JetBot ROS AI Kit 教程五、ROS智能语音
来自Waveshare Wiki
JetBot ROS AI Kit 进阶教程目录
- JetBot ROS AI Kit 教程一、雷达数据分析
- JetBot ROS AI Kit 教程二、SLAM激光雷达建图
- JetBot ROS AI Kit 教程三、自主导航
- JetBot ROS AI Kit 教程四、ROS OpenCV
- JetBot ROS AI Kit 教程五、ROS智能语音
- JetBot ROS AI Kit 教程六、Jetson nano 安装ROS系统及环境配置
- JetBot ROS AI Kit 教程七、Ubuntu 虚拟机安装ROS系统及环境配置
- JetBot ROS AI Kit 教程八、ROS语音环境配置
- JetBot ROS AI Kit 主页
前言
- 运行音频程序前先分别检测虚拟机和jetson nano的USB声卡是否正常工作,并设置USB声卡为默认音频输出设备。
检测声卡
- 检查播放:aplay -l
aplay -l
- 选择播放声卡 USB PnP Audio Device
- 检查录音:arecord -l
arecord -l
- 选择录音声卡 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
- 播放刚刚录制的音频
调节音量
sudo alsamixer
- 如果USB声卡没有设置为默认声卡则需要按 F6 选择声卡设备。
- 扩展板上的音量调节旋钮也可以调节喇叭音量,注意调节音量过大是会导致供电不足出现卡顿现象。
设置声卡
- 进入系统图形界面,点击右上角的音频图标进去声音设置界面。Output/Input 设备均选择USB PnP Audio Device
- 我们配置的系统默认已经开启VNC,如果没有屏幕可以通过VNC Viewer软件远程登录界面设置。在地址栏输入对应的IP地址打开连接,输入jetbot密码即可登录界面。
- 运行语音程序前必须先音频输出输入设置设置为音频声卡,否则程序出错或者不响应。
注意事项:
- 1.语音服务都需要联网,英文还需要科学上网才能正常工作,网络不好还能会反应缓慢或没响应;
- 2.中文采用科大讯飞服务,英文采用Google Assistant。每天有500次服务限制,超过将不在响应。用户可以自行申请账户,并修改程序替换为自己的账号;
- 3.英文Google Assistant需要先在虚拟环境中安装Google Assistant Service,否则程序运行出错;配置系统默认已经安装
- 4.语音播放中若出现声音卡顿现象,可能是功放电流不够,请适当减小音量
- 5.语音识别和人机对话都是通过webrtcvad检测语音,有一定漏检和虚检的概率,多噪声环境成功率会更低。
步骤1、语音流传输
- 语音流传输是电脑端和机器人可以进行实时语音传输,实现远程对讲功能。
- 虚拟机端需要外接输出输入音量设备,并音频输出输入设置对应为对应的音频设备,推荐使用USB音频设备,否则对应声卡无法找到或者不能正常传输音频。
- 下面图片展示如果再虚拟机中设置USB音频输入输出设备,选择虚拟机->可移动设备选择对应的USB音频设并连接到虚拟机。
- 在系统设置中选择sound设置,将Output/Input 设备均选择对应的USB设备。
- Output设置中,点击Test Speakersk可以测试设备是否可以正常播放。
- Input 设置中,麦克风有检测到声音Input level会跳动,测试麦克风是在正常。
- 音频传输使用的是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退出
【若没有声音输出,请检查通讯是否正常,ip地址是否写错】
步骤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