Reachy Mini 语音对话实战:3 条命令让机器人开口回话
【免费下载链接】reachy_miniReachy Mini's SDK项目地址: https://gitcode.com/GitHub_Trending/re/reachy_mini
你坐在桌面机器人对面,说了句"喂,小家伙"。Reachy Mini 的头转过来看着你,停了一拍,用合成语音回了一句"我在"。这套语音对话链路的每一环都躺在同一个开源仓库里:芯片在片上算方向,daemon 把结果吐成接口,你的应用只负责 ASR 和 LLM。下面按声音走过的顺序,把这条链路拆开看。
先看清全貌:一段声音的数据旅程
你的声音先落在 Reachy Mini 音频卡上的麦克风阵列,卡上那颗 XMOS XVF3800 芯片直接在片上算出声源到达方向(DoA)和语音活动标志;daemon 把这两个值读出来,通过/api/state/doa接口暴露给你的应用。应用层拿录音做 ASR,文本进 LLM,回复文本再经 TTS 变成音频,喂给 GStreamer 播放管道从扬声器放出,与此同时舵机把头转过去。整条链路压成一行就是:
麦克风阵列(XVF3800)→ 片上 DoA + VAD → daemon
/api/state/doa→ 应用层(ASR → LLM)→ TTS 音频 → GStreamer 播放 → 扬声器 + 转头
3 条命令跑通语音链路
克隆仓库、装 SDK,你会拿到三个入口命令:reachy-mini-daemon启动后台服务(电机、音频、状态接口全在它上面),reachy-mini-app-assistant用于脚手架式创建新应用,reachy-mini-reflash-motors负责电机固件。
git clone https://gitcode.com/GitHub_Trending/re/reachy_mini cd reachy_mini pip install -e . reachy-mini-daemon机器人唤醒后,再开一个终端跑 TTS 示例,它就会"开口":
uv run python examples/sound_tts.py --text "你好,我是 Reachy Mini"sound_tts.py 把文本交给支持 23 种语言的 TTS 服务,合成音频后在机器人上播放,同时启用和语音同步的头部摆动。到这里,一条最薄的语音回路已经通了:你说话的部分还没接,但"它开口"这一侧已经能验证。
三个决定对话顺不顺的节点
Reachy Mini 声源定位:芯片算好的,代码只负责读
它解决的问题:声音从哪个方向来,头该朝哪转。关键实现思路:方向不是软件算的,XVF3800 芯片片上输出 DoA,audio_doa.py 把 USB 读取封装成get_DoA(),返回(angle, speech_detected),角度单位弧度,0 是左侧、π/2 是正前、π 是右侧。
doa = mini.media.get_DoA() # (angle_rad, speech_detected) 或 None if doa and doa[1]: a = doa[0] mini.look_at_world(np.sin(a), np.cos(a), 0.0, duration=0.5)VAD 判断说完:别被一次呼吸打断
它解决的问题:你只是停顿了一下,机器人不能就把话头抢过去交给 LLM。关键实现思路:语音活动检测同样在片上做,audio_control_utils.py 里的 AEC 参数集就是这套芯片能力的入口,speech_detected标志直接来自get_DoA()。sound_doa.py 的用法值得抄:标志为真、且角度变化超过 0.004 弧度(约 2 度)才命令转头,两个条件同时卡住,噪声和微小抖动都被滤掉。
GStreamer 管道:延迟藏在 50 毫秒里
它解决的问题:播放不卡顿、不打爆缓冲区,同时延迟可控。关键实现思路:audio_gstreamer.py 把录音和播放都固定成source → queue → audioconvert → audioresample → appsrc/appsink的短管道,播放侧缓冲区按 50 ms、延迟按 5 ms 设置,采样率 16 kHz,延迟量级是几十毫秒而不是几百毫秒。
踩坑速查:语音交互常见症状
调任何参数之前,先确认麦克风阵列被系统认到了,再谈调参。这张表能覆盖大半情况:
| 症状 | 大概率原因 | 处理方式 |
|---|---|---|
| 找不到 ReSpeaker 设备 | 固件低于 2.1.0 | 升级固件到 2.1.0 以上 |
| DoA 接口无数据 | 音频未初始化 | 重启 daemon,检查 USB |
| 轮询时说话中途断 | Wi-Fi 下握手超时 | 复用同一个 Session |
| 语音发闷、发糊 | 头部腔体谐振 | 跑一次扬声器 EQ 校准 |
从 Demo 到开源机器人语音助手
这条链路没有止步于"它回话"。把 ASR 和 LLM 接进/api/state/doa和你自己的录音循环,同一个骨架就能长出客服、教育、家庭助理三种形态,变的只有应用层那一截。去 examples 目录挑个脚本跑起来,亲眼看到它转头的瞬间,再决定往哪个方向长。
【免费下载链接】reachy_miniReachy Mini's SDK项目地址: https://gitcode.com/GitHub_Trending/re/reachy_mini
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考