JetBot ROS AI Kit 教程六、ROS音频应用
来自Waveshare Wiki
JetBot ROS AI Kit 进阶教程目录
- JetBot ROS AI Kit 教程一、Jetson nano 安装ROS系统及环境配置
- JetBot ROS AI Kit 教程二、Ubuntu 虚拟机安装ROS系统及环境配置
- JetBot ROS AI Kit 教程三、雷达数据分析
- JetBot ROS AI Kit 教程四、ROS OpenCV 应用
- JetBot ROS AI Kit 教程五、ROS音频配置
- JetBot ROS AI Kit 教程六、ROS音频应用
- JetBot ROS AI Kit 主页
步骤1、语音流传输
- 语音流传输是电脑端和机器人可以进行实时语音传输,实现远程对讲功能。
- 注意:按以下图片所示,在虚拟机端和机器人端正确设置默认声卡,否则不能正常工作
- 机器人端请外接显示器等外设,以便可以设置声卡;虚拟机端需要外接音箱麦克风或者是带麦克风的耳机,否则对应声卡无法找到。
- 机器人端和虚拟机端请输入以下命令安装ROS音频包
sudo apt-get install ros-melodic-audio-common
- 在Ubuntu虚拟机中启动语音流传输节点
roslaunch jetbot_pro audio_stream.launch
- 在机器人端启动语音流传输节点
roslaunch jetbot_pro audio_stream.launch
- 启动之后,你可通过外接麦克风和机器人交流;若无声音,请按下图所示,检查声卡是否正常,扩展板音量开关是否打开
- Ctrl+C,退出语音流传输节点
步骤2、TTS(从文本到语音(TextToSpeech))
- 接收/speak文本数据话题,并将文本数据转换为语音然后播放。
- 注意:使用该功能需要联网,如果发布话题是英文,则需要科学上网
- 在机器人端输入以下命令启动TTS节点
roslaunch jetbot_pro tts.launch
- 在虚拟机端输入以下命令发布/speak话题
rostopic pub -1 /speak std_msgs/String "data: 'hello,who are you'"
- -1 表示只发送一次
- 节点接收到/speak话题后转换为语音输出
- 程序默认为英文,采用gtts。如果要使用科大讯飞中文,请输入以下命令启动TTS节点
roslaunch jetbot_pro tts.launch lang_type:="cn"
- 虚拟机端发布中文给/speak话题
rostopic pub -1 /speak std_msgs/String "data: '你好,你是谁'"
- Ctrl+C退出
步骤3、vad 语音活动侦测(Voice Activity Detection)
- 从麦克风静音背景检测语音,如果将测到有声音则录制声音并播放
- 在机器人端输入以下命令启动语音活动侦测节点
rosrun jetbot_pro vad.py
- 如图中所示, recording: 表示正在检测声音状态,当检测到声音后显示Open开始录制声音,检测到声音停止时显示close停止录音声音
- done recording:表示声音处理状态,此时将播放刚才录制到的声音
- Ctrl+C退出
步骤4、ASR(自动语音识别技术(Automatic Speech Recognition))
- 该功能为语音识别,将识别到的语音转换为文本数据,并发送字符串话题
- 机器人端输入以下命令启动ASR节点
roslaunch jetbot_pro asr.launch
- 如图中所示, recording: 表示正在检测声音状态,当检测到声音后显示Open开始录制声音,检测到声音停止时显示close停止录音声音
- done recording:表示声音处理状态。将语音数据传输到服务器识别,如果识别到语音则会显示识别到的文本数据,否则将进入recording状态继续检测声音
- 重新打开一个终端输入以下命令查看发布的话题
rostopic echo /chatter
- 以上检测默认是英文,采用Google Assistant。如果要使用科大讯飞中文,使用如下命令启动ASR节点。
roslaunch jetbot_pro asr.launch lang_type:="cn"
- 运行rostopic echo /chatter 将可以查看发布的话题。不过中文不能正常显示
rostopic echo /chatter
- 可以运行如下命令将接收到的话题显示出来
rosrun rospy_tutorials listener
- Ctrl+C退出
步骤5、人机对话
- 机器人识别到人说话并通过语音回复,实现人和机器人对话聊天,并发送对话内容话题。此功能需要联网,如果是英文还需要科学上网
- 机器人端输入以下命令启动人机对话节点
roslaunch jetbot_pro talk.launch
- 如图中所示, recording: 表示正在检测声音状态,当检测到声音后显示Open开始录制声音,检测到声音停止时显示close停止录音声音
- done recording:表示声音处理状态。将语音数据传输到服务器识别,如果识别到语音则会对话内容并通过声音播放机器人回复的语音,否则将进入recording状态继续检测声音
- 重新打开一个终端输入以下命令查看发布的话题
rostopic echo /chatter
- 程序默认为英文,采用Google Assistant。如果要使用科大讯飞AIUI中文人机交互,使用如下命令启动
roslaunch jetbot_pro talk.launch lang_type:="cn"
- 可以运行如下命令显示对话内容
rosrun rospy_tutorials listener
注意事项: 1.语音服务都需要联网,英文还需要科学上网才能正常工作,网络不好还能会反应缓慢或没响应; 2.中文采用科大讯飞服务,英文采用Google Assistant。每天有500次服务限制,超过将不在响应。用户可以自行申请账户,并修改程序替换为自己的账号; 3.英文Google Assistant需要先在虚拟环境中安装Google Assistant Service,否则程序运行出错; 5.语音播放中若出现声音卡顿现象,可能是功放电流不够,请适当减小音量 4.语音识别和人机对话都是通过webrtcvad模块检测语音,有一定漏检和虚检的概率,多噪声环境成功率会更低。