《ROS理论与实践》学习笔记(七)机器人语音交互

在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现的问题,后续会对尚未解决的问题继续分析并更新,纯小白,仅供参考。
本次学习笔记关于课程中的第八讲:机器人语音交互 。主要学习了讯飞开放平台、ROS的语音识别、输出和交互。


课程内容

在进行课程之前突然发现不能联网了,在网上找了很多办法,包括修改网络共享,桥接模式、NAT模式、自定义模式之类的,都不行,最后发现重启以下网络连接就好了。

$ sudo service network-manager stop
$ sudo rm /var/lib/NetworkManager/NetworkManager.state
$ sudo service network-manager start 

1.讯飞开放平台使用

登录讯飞开放平台,在控制台创建一个应用robot_voice_ros_zzy,下载SDK

  • 语音识别例程
    首先对samples中的iat_online_record_sample进行编译

    $ source 64bit_make.sh
    

    出现错误提示

    alsa/asoundlib.h: No such file or directory
    

    解决方法:

    $ sudo apt-get install libasound2-dev
    

    在bin目录下运行代码:

    $ ./iat_online_record_sample
    

    出现错误提示:

    ./iat_online_record_sample: error while loading shared libraries: libmsc.so: cannot open shared object file: No such file or directory
    

    解决方法:
    把libmsc.so文件复制到usr/local/lib文件夹下

    $ sudo cp libs/x86/libmsc.so /usr/local/lib/
    $ sudo ldconfig
    

    可以通过麦克风或者音频文件输入,运行能够输出对应的文字

  • 文字输出为音频例程
    首先对samples中的tts_online_sample进行编译

    $ source 64bit_make.sh
    

    在bin目录下运行代码:

    $ ./tts_online_sample
    

    程序输出一个名为tts_sample.wav的音频文件


2.ROS语音识别与语音输出

  • 语音识别
    创建一个节点iat_publish,创建subscriber用于接收唤醒信号,将wakeupFlag变量置位,创建publisher用于调用SDK的语音识别功能,识别成功后置位resultFlag,将识别出来的字符串发布。即通过topic通信唤醒一次,通过麦克风输入语音信号,将语音识别结果打印在屏幕上
    代码来自课程代码包,不再贴出
    启动方法:

    $ roscore
    $ rosrun robot_voice iat_publish
    $ rostopic pub /voiceWakeup std_msgs/String "data:'xxx'"
    
  • 语音输出
    创建一个节点,创建subscriber用于订阅voiceWords话题,接收输入的字符串,创建voiceWordCallback用于使用SDK接口将字符串转换成中文语音
    代码来自课程代码包,不再贴出
    启动方法:

    $ roscore
    $ rosrun robot_voice tts_subscribe
    $ rostopic pub /voiceWakeup std_msgs/String "data:'啊喽哈'"
    
  • 语音输入与输出结合
    通过launch文件同时启动两个节点,通过话题唤醒,然后接收麦克风输入信号,语音识别成字符串后,转换为语音。
    代码来自课程代码包,不再贴出
    启动方法:

    $ roslaunch robot_voice repeat_voice.launch
    $ rostopic pub /voiceWakeup std_msgs/String "data:'xxx'"
    

3.语音交互

创建一个节点voice_assistant,创建subscriber订阅voicewords话题,接收输入的字符串,创建voicewordscallback,通过if判断关键词,完成语音回复。
代码来自课程代码包,不再贴出
启动方法:

```
$ roslaunch robot_voice voice_assistant.launch
$ rostopic pub /voiceWakeup std_msgs/String "data:'xxx'"
```

运行效果:
在这里插入图片描述


本讲作业

通过语音输入控制Gazebo仿真器中机器人的运动,后续更新。

结语

本讲主要学习了机器人的语音交互 ,主要学习了讯飞开放平台、ROS的语音识别、输出和交互,并在作业中加深理解。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐