打算把我学习ROS、自动驾驶、语音识别的过程记录整理成系列,第一个系列是如何利用Tranbot小车实现一些DIY方案
,
有bug地方还请指正,共同学习。
引言
本文是入门级demo实现,实现语音控制小车运动,实现方式步骤概述如下:
1,笔记本电脑安装虚拟机,配置ROS环境
2,虚拟机安装科大讯飞语音听写SDK
3,虚拟机与小车jetson nano 实现ros主从通信
4,利用监听机制,实现口令控制小车
该实现方案我是借助的 Transbot ROS教育机器人 进行的二次开发,该款机器人功能比较齐全适合做学习开发使用,当然网上也有其他机器人或者自己设计机器人小车进行开发的教程,由于博主是该方向的萌新,哈哈哈,先学起来,后续积累好基础后,再尝试自己设计机器人。
完成该demo需要掌握一定的基础能力:ROS、python、linux
下面所用到的代码模块已上传个人github仓库:
实现细节
一. 环境
虚拟机:Ubuntu18.04 + 讯飞语音SDK 语音识别在线版 + ROS机器人操作系统
小车:Transbot旗舰版 搭载Jetson Nano 4GB + ROS机器人操作系统
二. 架构
由于tranbot小车无语音模块,需要借助笔记本电脑拾音,所以采下面这种架构实现本demo.
三. 实现步骤
1. 笔记本电脑安装虚拟机,配置ROS环境
win10上安装虚拟机部分可以参考网络上配置ubuntu18.04虚拟机教程!
链接: VMware安装Ubuntu18.04(必会) - 知乎 (zhihu.com)
虚拟机安装ROS环境可以参考古月·ROS入门21讲里面的ROS安装
链接:【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩_bilibili
2. 虚拟机安装科大讯飞语音SDK
这部分可以参考我的博客 : https://blog.csdn.net/m0_65173341/article/details/124782936
完成SDK环境布置后参考下载的SDK包里面的sample代码,修改自己的tranbot_voice_xf.cpp代码,代码在github上,创建自己的工作空间和代码见后面内容。
3. 虚拟机与小车jetson nano 实现ros主从通信
调试小车时候,使用VNC远程调试比较方便,输入账号密码,这里用的机器初始化账号密码,账号:jetson 密码:yahboom
连接VNC的时候。注意Transbot小车网络是否跟笔记本电脑匹配,不匹配的话,VNC远程登陆会失败
实现主从机通信部分可以参考我的博客 : https://blog.csdn.net/m0_65173341/article/details/124784788
4. 利用监听机制,实现口令控制小车运动
下面涉及了ROS一些基础能力,比如开辟工作空间、创建功能包,消息机制、订阅/监听机制等,可以根据古月居·入门21讲学习,链接:【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩_bilibili
虚拟机:
运行语音监听模块,发布监听到的语音信息,发布一个信息 learning_topic::Wakebot(micphnoe语音转写的文字)
具体实现代码步骤如下
出于一些原因,以下有些路径里面的* 屏蔽了一些名字,大家自己建立文件夹的时候,注意
建立生成的工作空间路径:/home/*/*/catkin_ws
工作空间下创建功能包:
cd /home/*/*/catkin_ws/src
catkin_create_pkg transbot_lzl std_msgs rospy roscpp
编译功能包:
cd /home/*/*/catkin_ws
catkin_make
source devel/setup.bash
创建代码 (tranbot_voice_xf.cpp 是根据讯飞sample 实现的满足自己需求的代码),另外两个c代码,是需要调用的模块,直接从下载好的SDK包里sample里面copy过来即可
修改tranbot_voice_xf.cpp代码.h文件的导入路径,这部分需要修改这个地方,然后拷贝对应的.h文件到include/transbot_lzl里面
再次编译功能包:
cd /home/*/*/catkin_ws
catkin_make
source devel/setup.bash
Transbot:
运行小车控制模块,监听learning_topic::Wakebot 消息,该消息根据自己需求定义msg,目前只是用wakewords成员变量,如何自定义msg,参考ros教程
识别文字str消息类容,匹配定义好的功能模块
(0)语音:“你好”,蜂鸣器响300ms,表示收到
(1)语音:“前进一”、“前进二”、“前进三”、“前进四”,小车前进不同距离;
(2)语音:“后退一”、“后退二”、“后退三”、“后退四”,小车后退不同距离;
(3)语音:“左转一”、“左转二”、“左转三”、“左转四”,小车左转不同角度;
(4)语音:“右转一”、“右转二”、“右转三”、“右转四”,小车右转不同角度;
具体实现代码步骤如下
生成工作空间路径: /home/jetson/lzl_Transbot/catkin_ws
工作空间下创建功能包:/home/jetson/lzl_Transbot/catkin_ws/src/learning_topic
创建代码 (tranbot_example.py)
tranbot小车控制库环境无需自己搭建,直接在代码里调用就好,这部分参考tansbot小车官网教程学习官网
效果展示
Transbot端运行:
roscore
cd /home/jetson/lzl_Transbot/catkin_ws/src/learning_topic/scripts/
python tranbot_example.py
程序已经运行,正在监听learning_topic::Wakebot消息
虚拟机端运行:
rosrun transbot_lzl transbot_voice_xf
程序已经运行起来,通过输入1后,说命令词即可,按2退出
实际效果展示:
语音控制1
实际效果不错,识别准确,运行功能完整,但是采用的在线识别SDK模块,识别速度比较慢,加上ROS多机发布接收,响应时间较慢。
后续可以改进:
1,离线SDK
2,Transbot小车安装语音模块
3,自动避障等其他功能