BUAA-SoftwareEngineering-Task5
本系列文章是 2024 春季学期北航计算机学院本科生课程《软件工程》(嵌入式方向)的实验部分报告,不包含团队大作业项目内容与相关细节
任务5-机械臂操控与语音识别输出
实验目的
- 了解启智机器人的机械臂组件,并操作机械臂完成较为复杂的机械臂控制行为
启智机器人安装了一个可用于抓取桌面上物品的机械臂,该机械臂提供两个控制量:上升高度和手抓的闭合宽度。通过配合机器人其他传感器,设置这两个控制量,能够实现较为复杂的机械臂控制行为。
- 了解启智机器人的语音识别输出组件,实现语音识别、语音输出等交互操作
启智ROS 机器人头部Kinect2 下半部分有一组阵列麦克风,采集正前方的声音信息,可以用来接收语音指令。本实验将在虚拟机上模拟实现,使用语音识别引擎,识别语音指令,再通过语音输出交互内容。
实验任务
- 操作启智机器人机械臂,完成机械臂的操控和物体抓取任务。
- 编写语音交互中间节点,获取识别语音信息,输出对应信息。
实验内容
机械臂控制例程
- 启动机器人机械臂控制示例进程和机械臂控制节点
roslaunch wpr_simulation wpb_table.launch |
进程启动了 RViz 界面,控制节点会周期性地发送机械臂的控制指令,可以在 RViz 界面中观察到机械臂状态的变化。
具体而言, wpb_home_mani_ctrl
节点通过发送 JointState
类型的消息将信息包 publish 到机械臂部分,具体而言可以仿照示例修改 position
和 velocity
字段的内容:
sensor_msgs::JointState ctrl_msg; |
机械臂物体抓取任务
- 启动机器人机械臂控制例程和物体识别抓取节点
wpb_home_grab_client
,观察机械臂运动状况与信息输出
roslaunch wpr_simulation wpb_table.launch |
抓取过程关键截图:
语音识别输出
- 安装依赖项、在 src 目录中引入源码:
sudo apt-get install ros-melodic-audio-common |
- 注意因为机器人官方代码包已经将 kinetic ~ noetic 的三个版本封装在一个 branch 上,并且没有保留其他分支,所以也不用 checkout,直接在 master 上配置即可
./scripts/install_for_melodic.sh |
- 在
src
目录下创建语音识别软件包sr_pkg
并回到项目根目录再次编译
catkin_create_pkg sr_pkg rospy std_msgs |
- 进入软件包创建
scripts
文件夹并编写一个节点文件sr_en_node.py
,使其简单支持两种文字的识别,由于文字处理能力有限,所以相关的操作只能绑定字符的完全匹配 - 编写完毕后赋予执行权限
#!/usr/bin/env python |
msg.data
:语音识别的结果spk_msg.data
:机器人发声的回复语句这里需要注意回调函数中
msg.data
最开始必须要有一个空格,否则会无法匹配;如果想手动添加新的elif
识别分支,建议先读一遍识别出正确的文本后进行复制
配置完毕后分别启动语音转换服务以及语音交互中间节点即可进行识别:
roslaunch xfyun_waterplus sr_tts_en.launch |
- 使用
rqt_graph
观察服务消息传递路径
/xfyun_iat_node
从系统中录制声音,完成从语音转文字的功能,并将信息发布到/xfyun/iat
话题中- 我们编写的节点
/sr_en_node
订阅iat
话题并获取转换后的文字信息,通过回调函数设置好待发送的信息并发布到/xfyun/tts
话题中 /xfyun_tts_node
订阅话题tts
,完成生成对应文字的录音的功能,并将发布录音文件- soundplay_node 服务提供了一个 ROS 节点,订阅话题 (
/robotsound
) ,还可以将转换为声音。该节点支持内置声音,播放OGG/WAV文件,实现录音播放,完成整个语音交互流程。
- 在执行语音识别时的一个小报错
请在 10 秒内下达命令 |
如果在启动语音服务后显示上面这个找不到文件的报错信息,无需理会,这个 wav
文件只起到提示音的作用,如果想要消除报错可以参照以下操作:
- 找到工作目录下的
/home/<Your Username>/<Your Working Directory>/src/xfyun_waterplus/src/iat_node.cpp
文件 - 修改文件的第 141 行代码中的路径为工作路径
char const* home = getenv("HOME"); |
- 使用
catkin_make
重新编译项目,然后报错就不会显示了,你还会在开始语音转换时听到动耳的提示音()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 sin!