2026-01-19 11:35:01 +08:00
2026-01-19 11:35:01 +08:00
2026-01-13 22:14:46 +08:00
2026-01-05 09:53:18 +08:00
2026-01-19 11:35:01 +08:00
2025-09-29 10:59:27 +08:00
2026-01-19 09:09:28 +08:00
2026-01-19 09:09:28 +08:00
2026-01-05 09:53:18 +08:00
2026-01-12 17:40:08 +08:00

ROS 语音包 (robot_speaker)

注册阿里云百炼获取api_key

https://bailian.console.aliyun.com/?tab=model#/api-key ->密钥管理 放到config/voice.yaml

安装依赖

  1. 系统依赖
sudo apt-get update
sudo apt-get install -y python3-pyaudio portaudio19-dev alsa-utils ffmpeg swig meson ninja-build build-essential pkg-config libwebrtc-audio-processing-dev
  1. Python依赖
cd ~/ros_learn/hivecore_robot_voice
# 在 Python 3.10 环境下,需要单独安装 aec-audio-processing 以跳过版本检查
pip3 install aec-audio-processing --no-binary :all: --ignore-requires-python --break-system-packages
pip3 install -r requirements.txt --break-system-packages

编译启动

  1. 注册声纹
  • 启动节点后可以说:二狗今天天气真好开始注册声纹
  • 正确的注册姿势: 方法A推荐唤醒后停顿一下然后说一段长句子。 用户:"二狗" 机器:(日志提示等待声纹语音) 用户:"我现在正在注册声纹,这是一段很长的测试语音,请把我的声音录进去。"(持续说 3-5 秒) 方法B连贯说一口气说很长的一句话。 用户:"二狗你好,我是你的主人,请记住我的声音,这是一段用来注册的长语音。"
  • 注意要包含唤醒词语句不要停顿尽量大于1.5秒
cd ~/ros_learn/hivecore_robot_voice
colcon build
source install/setup.bash
ros2 run robot_speaker register_speaker_node
  1. 主节点
  • 启动节点后每句交互包含唤醒词,唤醒词和语句之间不要有停顿
  • 二狗拍照看看开启图文交互
  • 支持已注册声纹用户打断
cd ~/ros_learn/hivecore_robot_voice
colcon build
source install/setup.bash
ros2 launch robot_speaker voice.launch.py

架构说明

[录音线程] - 唯一实时线程 ├─ 麦克风采集 PCM ├─ VAD + 能量检测 ├─ 检测到人声 → 立即中断TTS ├─ 语音 PCM → ASR 音频队列 └─ 语音 PCM → 声纹音频队列(旁路,不阻塞)

[ASR推理线程] - 只做 audio → text └─ 从 ASR 音频队列取音频→ 实时 / 流式 ASR → text → 文本队列

[声纹识别线程] - 非实时、低频CAM++ ├─ 通过回调函数接收音频chunk写入缓冲区等待 speech_end 事件触发处理 ├─ 累积 1~2 秒有效人声VAD 后) ├─ CAM++ 提取 speaker embedding ├─ 声纹匹配 / 注册 └─ 更新 current_speaker_id共享状态只写不控 声纹线程要求不影响录音不影响ASR不控制TTS只更新当前说话人是谁

[主线程/处理线程] - 处理业务逻辑 ├─ 从 文本队列 取 ASR 文本 ├─ 读取 current_speaker_id只读 ├─ 唤醒词处理(结合 speaker_id ├─ 权限 / 身份判断(是否允许继续) ├─ VLM处理文本 / 多模态) └─ TTS播放启动TTS线程不等待

[TTS播放线程] - 只播放(可被中断) ├─ 接收 TTS 音频流 ├─ 播放到输出设备 └─ 响应中断标志(由录音线程触发)

用到的命令

  1. 音频设备
# 1. 查看所有音频设备
cat /proc/asound/cards
# 2. 查看 card(1)的流信息(设备参数)
cat /proc/asound/card1/stream0
  1. 相机设备
# 1. 查看相机所有基础信息(型号、固件版本、序列号等)
rs-enumerate-devices -c 
  1. 模型下载
modelscope download --model iic/speech_campplus_sv_zh-cn_16k-common --local_dir [指定路径]
Description
No description provided
Readme Apache-2.0 737 KiB
Languages
Python 100%