Skip to main content

接入豆包实时语音大模型案例

描述

  • 接入豆包实时语音大模型,实现了一个基于 ROS 的语音交互系统,包括麦克风音频采集、实时语音交互和音频播放功能。
  • 示例代码路径:<kuavo-ros-opensource>/src/kuavo_doubao_model/llm_doubao.py

程序逻辑

  1. 导入模块及定义全局变量
  • 作用:导入所需的 Python 标准库、第三方库和 ROS 相关模块,定义核心交互类。
  1. ROSDialogSession 类
  • 作用:处理与豆包实时语音大模型的 WebSocket 通信,管理音频数据的接收、处理和 ROS 发布。

  • 关键逻辑:

    • 初始化会话 ID 和 WebSocket 客户端,建立与豆包大模型的连接

    • 通过单独线程处理音频块,实现音频数据的缓冲和处理

    • 将音频字节数据转换为 ROS 兼容的整数列表格式

    • 实现音频重采样(从 24kHz 到 16kHz)以适配 ROS 音频系统

    • 将处理后的音频数据发布到 ROS 话题

  1. RobotLLMDoubaoCore 类
  • 作用:作为系统核心,管理麦克风音频采集、会话生命周期和整体交互流程。

  • 关键逻辑:

    • 初始化麦克风接口和 ROS 音频接口

    • 配置 WebSocket 连接参数,包括认证信息

    • 验证与豆包大模型服务的连接

    • 启动和停止语音交互系统

    • 在独立线程中运行异步会话,处理麦克风数据和服务器通信

  1. 主程序代码路径:<kuavo-ros-opensource>/src/kuavo_doubao_model/start_communication.py
  • 作用:程序主入口,负责初始化 ROS 节点、建立豆包语音连接、启动语音交互和处理退出逻辑。

  • 关键逻辑:

    • 初始化 ROS 节点 voice_conversation

    • 创建 RobotSpeech 实例,用于管理语音交互

    • 调用 establish_doubao_speech_connection 方法,使用提供的 app_id 和 access_key 建立与豆包大模型的连接

    • 连接成功,调用 start_speech 方法启动语音交互

    • 进入循环,通过非阻塞方式检测键盘输入

    • 当检测到用户输入 'c' 或 ROS 节点关闭时,调用 stop_speech 方法停止语音交互

说明

⚠️ 注意: 该案例使用了火山引擎的豆包端到端实时语音大模型,此模型为收费模型,需要自行创建账号充值获取APP ID和Access Token并将获取到的APP ID和Access Token复制到程序对应地方,使用时机器人下位机要连接外网(能访问互联网)

  • 该案例所使用的豆包端到端实时语音大模型: https://console.volcengine.com/auth/login/

    • 登录后点击大模型-豆包实时语音模型-立即使用,获取APP ID和Access Token
    • 将程序<kuavo-ros-opensource>/src/kuavo_doubao_model/start_communication.py第11,12行的app_id,access_key替换成获取到的即可

执行

  • 执行本案例需要在下位机外接一个USB麦克风,最好是带有一键开关麦功能的麦克风。

  • 建议先在下位机系统设置中测试麦克风是否可用。

  • 启动

    cd kuavo-ros-control  # 进入下位机工作空间(根据实际部署目录切换)
    sudo su
    source devel/setup.bash
    roslaunch kuavo_audio_receiver receive_voice.launch # 若终端提示未找到与关键词 ['USB Composite Device'] 匹配的设备,ctrl+c关闭程序,终端执行sudo modprobe snd-usb-audio 再重启程序
    • 另开终端输入rosnode list | grep /audio_stream_player_node查看audio_stream_player_node是否存在,存在则跳过运行play_music.launch
    • 音响接下位机
    cd kuavo-ros-control  # 另开终端进入下位机工作空间(根据实际部署目录切换)
    sudo su
    source devel/setup.bash
    roslaunch kuavo_audio_player play_music.launch
    • 音响接上位机
    cd kuavo_ros_application  # 进入上位机工作空间(根据实际部署目录切换)
    source /opt/ros/noetic/setup.bash
    source devel/setup.bash
    roslaunch kuavo_audio_player play_music.launch
    • 运行案例
    cd kuavo-ros-control  # 另开终端进入下位机工作空间(根据实际部署目录切换)
    sudo su
    source devel/setup.bash
    python3 src/demo/kuavo_doubao_model/start_communication.py

  • 效果 效果