我来帮你排查这个问题。先搜索一下社区是否有相关讨论。
根据你提供的截图和错误信息,问题很明确:RDK X5 的 Node-RED 环境中缺少 speechtotext(语音转文本)组件,导致流程无法运行。
问题分析
从截图可以看到:
- RDK Tools 中有"文字转语音"组件,但没有"语音转文字"组件
- 流程报错:
rdk-tools speechtotext- 搜索未知节点 - 你使用的是 RDK X5 板卡,Node-RED 版本 v0.3.22
解决方案
方案一:使用 SenseVoice ROS2 包(推荐)
RDK X5 的语音识别主要通过 SenseVoice ROS2 包实现,而不是通过 Node-RED 组件。
步骤:
- 安装 SenseVoice ROS2 包
# 确保已安装 ROS2
source /opt/ros/humble/setup.bash
# 克隆 sensevoice_ros2 仓库
cd ~/ros2_ws/src
git clone https://github.com/D-Robotics/sensevoice_ros2.git
# 安装依赖
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
# 编译
colcon build --packages-select sensevoice_ros2
source install/setup.bash
- 运行语音识别节点
# 启动语音识别
ros2 run sensevoice_ros2 sensevoice_node
- 订阅识别结果
# 查看发布的 topic
ros2 topic list
# 订阅识别结果(通常是 asr_text 或 audio_asr)
ros2 topic echo /asr_text
详细文档参考:sensevoice_ros2 GitHub
方案二:在 Node-RED 中调用 ROS2 服务
如果你必须在 Node-RED 中使用,可以通过 ROS2 桥接方式:
- 安装 node-red-contrib-ros2 节点(如果支持)
- 使用 exec 节点调用 ROS2 命令
- 通过 HTTP 请求调用自定义的语音识别服务
方案三:使用通义千问的语音 API
如果你的场景是"通义千问大模型对话",可以直接使用通义千问的语音识别 API:
// 在 Node-RED 中使用 function 节点调用 API
const axios = require('axios');
async function speechToText(audioBuffer) {
const response = await axios.post(
'https://dashscope.aliyuncs.com/api/v1/services/asr/transcription/transcription',
{
audio: audioBuffer.toString('base64'),
format: 'wav',
sample_rate: 16000
},
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
}
);
return response.data.output.text;
}
为什么没有语音转文本组件?
根据社区讨论,RDK X5 的语音方案架构是:
- 语音识别(ASR):通过 SenseVoice ROS2 包实现
- 语音合成(TTS):通过 Node-RED 的"文字转语音"组件实现
- 语音唤醒:通过独立的唤醒词检测模块
这种设计是为了让开发者更灵活地选择语音识别方案(可以使用 SenseVoice,也可以集成其他 ASR 引擎)。
建议
- 新手用户:先参考社区的 RDK X5 快捷语音方案教程,了解完整的语音交互流程
- 进阶用户:直接使用 SenseVoice ROS2 包,更灵活可控
- 大模型对话场景:建议结合通义千问的语音 API + ROS2 话题通信
你可以先尝试方案一,如果遇到问题,可以把具体的错误日志发到社区,大家会帮你进一步排查。
旧版Studio即将停止维护,这个语音转文字的功能 TROS 有提供,是旧版Studio不支持并非RDK X5 ,
https://horizonrobotics.feishu.cn/wiki/YCPqwwV12i7VDtknc4UcT1KFnFg?from=navigation


