JetBot ROS AI Kit 教程七、ROS音频应用

来自Waveshare Wiki
跳转至: 导航搜索

JetBot ROS AI Kit 进阶教程目录


步骤1、语音流传输

  • 语音流传输是电脑端和机器人可以进行实时语音传输,实现远程对讲功能。
  • 注意:按以下图片所示,在虚拟机端和机器人端正确设置默认声卡,否则不能正常工作
J30.png
  • 机器人端请外接显示器等外设,以便可以设置声卡;虚拟机端需要外接音箱麦克风或者是带麦克风的耳机,否则对应声卡无法找到。
  • 机器人端和虚拟机端请输入以下命令安装ROS音频包
  sudo apt-get install ros-melodic-audio-common   
  • 在Ubuntu虚拟机中启动语音流传输节点
  roslaunch jetbot_pro audio_stream.launch   
  • 在机器人端启动语音流传输节点
  roslaunch jetbot_pro audio_stream.launch  
  • 启动之后,你可通过外接麦克风和机器人交流;若无声音,请按下图所示,检查声卡是否正常,扩展板音量开关是否打开
J31.png
  • 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   
J32.png
  • 如图中所示, recording: 表示正在检测声音状态,当检测到声音后显示Open开始录制声音,检测到声音停止时显示close停止录音声音
  • done recording:表示声音处理状态,此时将播放刚才录制到的声音
  • Ctrl+C退出


步骤4、ASR(自动语音识别技术(Automatic Speech Recognition))

  • 该功能为语音识别,将识别到的语音转换为文本数据,并发送字符串话题
  • 机器人端输入以下命令启动ASR节点
  roslaunch jetbot_pro asr.launch   
J33.png
  • 如图中所示, recording: 表示正在检测声音状态,当检测到声音后显示Open开始录制声音,检测到声音停止时显示close停止录音声音
  • done recording:表示声音处理状态。将语音数据传输到服务器识别,如果识别到语音则会显示识别到的文本数据,否则将进入recording状态继续检测声音
  • 重新打开一个终端输入以下命令查看发布的话题
  rostopic echo /chatter   
J34.png
  • 以上检测默认是英文,采用Google Assistant。如果要使用科大讯飞中文,使用如下命令启动ASR节点。
 roslaunch jetbot_pro asr.launch lang_type:="cn"   
J35.png
  • 运行rostopic echo /chatter 将可以查看发布的话题。不过中文不能正常显示
  rostopic echo /chatter   
J36.png
  • 可以运行如下命令将接收到的话题显示出来
 rosrun rospy_tutorials listener   
J37.png
  • Ctrl+C退出


步骤5、人机对话

  • 机器人识别到人说话并通过语音回复,实现人和机器人对话聊天,并发送对话内容话题。此功能需要联网,如果是英文还需要科学上网
  • 机器人端输入以下命令启动人机对话节点
  roslaunch jetbot_pro talk.launch   
J38.png
  • 如图中所示, recording: 表示正在检测声音状态,当检测到声音后显示Open开始录制声音,检测到声音停止时显示close停止录音声音
  • done recording:表示声音处理状态。将语音数据传输到服务器识别,如果识别到语音则会对话内容并通过声音播放机器人回复的语音,否则将进入recording状态继续检测声音
  • 重新打开一个终端输入以下命令查看发布的话题
  rostopic echo /chatter   
J40.png
  • 程序默认为英文,采用Google Assistant。如果要使用科大讯飞AIUI中文人机交互,使用如下命令启动
  roslaunch jetbot_pro talk.launch lang_type:="cn"  
J41.png
  • 可以运行如下命令显示对话内容
 rosrun rospy_tutorials listener   
J42.png


 
注意事项:
1.语音服务都需要联网,英文还需要科学上网才能正常工作,网络不好还能会反应缓慢或没响应;
2.中文采用科大讯飞服务,英文采用Google Assistant。每天有500次服务限制,超过将不在响应。用户可以自行申请账户,并修改程序替换为自己的账号;
3.英文Google Assistant需要先在虚拟环境中安装Google Assistant Service,否则程序运行出错;
5.语音播放中若出现声音卡顿现象,可能是功放电流不够,请适当减小音量
4.语音识别和人机对话都是通过webrtcvad模块检测语音,有一定漏检和虚检的概率,多噪声环境成功率会更低。