跳到主要内容
版本:V2.0.5.x

3.2.系统架构


硬件拓扑结构

项目使用多机器协同架构,Orin 板是整个系统的核心编排者

IP 地址配置

设备IP 地址功能端口
RK3588s10.42.0.127音频采集与播放9080
Orin 板192.168.41.2ROS 2 系统 + Ollama LLM + Piper TTS11434
x86 服务器192.168.41.1Funasr ASR 服务10097

网络通信协议详解

1. RK3588s ↔ Orin 板(Socket TCP)

RK3588s 麦克风

音频流 (16000 Hz, 16-bit PCM)

Socket TCP 连接 (10.42.0.127:9080)
↓ (发送原始音频)
tk_audio_publisher (通过VAD字段判断并接收整句的音频)

ROS audio_sentence_frames 话题

tk_asr_text_publisher (订阅)

其中RK3588s板上9080端口提供的TCP数据包(详细代码在 src\audio_service\audio_service\socket_audio_provider.py 文件),下文会有详细的说明。

2. Orin 板 ↔ x86 服务器(WebSocket)

tk_asr_text_publisher (Orin 板)

WebSocket Client 连接

192.168.41.1:10097 (x86 服务器 Funasr)

发送整句音频

Funasr 模型识别

返回识别结果

获得最终识别文本

3. Orin 板内部(本地 Ollama + Piper TTS)

tk_audio_process (收到识别文本)

Ollama LLM Client (HTTP)

localhost:11434/api/chat (本地 Ollama 服务)

qwen2.5:1.5b 模型流式生成回答

等待流式返回适合作为一个分句播放的回答文本后

Piper TTS (本地调用)

ONNX 模型推理:文本→语音波形

AudioPlayer 播放

持续播放直到Ollama LLM Client生成结束

关键点总结

层级处理位置技术说明
音频采集RK3588s麦克风阵列 + Socket原始音频通过 Socket 发送到 Orin
音频接收与发布Orin 板tk_audio_publisher (ROS)接收原始音频,按整句发布
语音识别Orin 板 发送,x86 处理WebSocket + Funasr DockerOrin 通过 WebSocket 将音频发送给 x86 识别
文本发布Orin 板tk_asr_text_publisher (ROS)识别结果发布到 ROS 话题
LLM 处理Orin 板Ollama HTTP API本地调用 Ollama,生成回答(流式)
TTS 合成Orin 板Piper ONNX + Pytorch本地调用 Piper,生成语音波形
音频播放Orin 板AudioPlayer (PyAudio)队列式播放,直接在Orin1上进行播放