JetBot ROS AI Kit 教程五、ROS智能语音

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

JetBot ROS AI Kit 进阶教程目录

前言

  • 运行音频程序前先分别检测虚拟机和jetson nano的USB声卡是否正常工作,并设置USB声卡为默认音频输出设备。

检测声卡

  • 检查播放:aplay -l
aplay  -l    
J50.png
  • 选择播放声卡 USB PnP Audio Device
  • 检查录音:arecord -l
 arecord -l
J51.png
  • 选择录音声卡 USB PnP Audio Device

录音播放测试

  • 录音
jetson@linux:~$ arecord -D plughw:2,0 -f S16_LE -r 48000 -c 2 test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
  • -D "plughw:1,0"表示card 1 , device 0,即我们使用的USB声卡,-f S16_LE代表有符号16位小端序,-c 2表示双声道,test.wav是录制生成的文件名。
  • 按Ctl+C结束录音
  • 播放
jetson@linux:~$ aplay -D hw:2,0 test.wav 
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
  • 播放刚刚录制的音频
J52.png

调节音量

sudo alsamixer
  • 如果USB声卡没有设置为默认声卡则需要按 F6 选择声卡设备。

Audio-Card-for-Jetson-Nano-01.png
Speaker为喇叭输出音量,Mic为麦克风录音音量

  • 扩展板上的音量调节旋钮也可以调节喇叭音量,注意调节音量过大是会导致供电不足出现卡顿现象。

设置声卡

  • 进入系统图形界面,点击右上角的音频图标进去声音设置界面。Output/Input 设备均选择USB PnP Audio Device

Audio-Card-for-Jetson-Nano-03.png

  • 我们配置的系统默认已经开启VNC,如果没有屏幕可以通过VNC Viewer软件远程登录界面设置。在地址栏输入对应的IP地址打开连接,输入jetbot密码即可登录界面。

Jetbot image003.png

Jetbot image004.png

  • 运行语音程序前必须先音频输出输入设置设置为音频声卡,否则程序出错或者不响应。

注意事项:

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

步骤1、语音流传输

  • 语音流传输是电脑端和机器人可以进行实时语音传输,实现远程对讲功能。
  • 虚拟机端需要外接输出输入音量设备,并音频输出输入设置对应为对应的音频设备,推荐使用USB音频设备,否则对应声卡无法找到或者不能正常传输音频。
  • 下面图片展示如果再虚拟机中设置USB音频输入输出设备,选择虚拟机->可移动设备选择对应的USB音频设并连接到虚拟机。

Jetbot image005.png

  • 在系统设置中选择sound设置,将Output/Input 设备均选择对应的USB设备。

Jetbot image006.png

  • Output设置中,点击Test Speakersk可以测试设备是否可以正常播放。

Jetbot image007.png

  • Input 设置中,麦克风有检测到声音Input level会跳动,测试麦克风是在正常。

Jetbot image008.png

  • 音频传输使用的是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: '你好,你是谁'"   
J53.png
  • Ctrl+C退出

【若没有声音输出,请检查通讯是否正常,ip地址是否写错】

步骤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