ROS Kinetic 使用PocketSphinx进行语音识别和控制机器人
ROS Kinetic使用PocketSphinx进行语音识别
- ROS Kinetic使用PocketSphinx进行语音识别
- 安装准备
- 安装ROS-PocketSphinx
- 启动与测试
- 除此之外需要多说几句
目前在ROS中调用pocketsphinx进行语音识别的教程中,有大部分的教程没有针对Kinetic版本的ROS进行讲解,很少的几个,比如 倔强不倒翁 大神的这一篇很贴近了,但仍然没有解决问题。本文大部分内容参考了倔强不倒翁的教程和另一片现在找不到的教程,在此表示感谢!
安装准备
首先安装各种库和组件
sudo apt-get install ros-kinetic-audio-common libasound2 gstreamer0.10-* gstreamer1.0-pocketsphinx
安装libsphinxbase1
sudo dpkg -i libsphinxbase1_0.8-6_amd64.deb
安装libpocketsphinx1
sudo dpkg -i libpocketsphinx1_0.8-5_amd64.deb
安装gstreamer0.10-pocketsphinx
sudo dpkg -i gstreamer0.10-pocketsphinx_0.8-5_amd64.deb
这个可能不需要,因为前面装了gstreamer1.0-pocketsphinx,但我两个版本都装了,所以不好说,抱歉(・_・)
安装ROS-PocketSphinx
这个repo目前只支持到ROS Jade,而且本身使用的sphinx版本也很老了,但目前没看到更好的方案。github上有几个替代方案,我只试用了CMU自己出的那个,但并无卵用。之后有时间的话会再试试其他几个方案的。
cd ~/catkin_ws/src
git clone https://github.com/mikeferguson/pocketsphinx
启动与测试
首先需要进行的是麦克风的测试,确认一下麦克风确实能收到声音,也没有太大的干扰。
这个怎么测就不演示了。。。此处本有一波黑恶势力( ̄▽ ̄)
直接启动demo的命令为
roslaunch pocketsphinx robocup.launch
然而一定会报如下错误(请原谅我盗图吧,我自己报错的时候没截图(>ω・* )ノ)
这个错误的原因不是很清楚,我个人的观点是repo里用的pocketsphinx版本太老,还在用现在pocketsphinx已经抛弃的DMP文件格式,另外也缺少hmm的设置,以及与ROS kinetic版本不匹配等一系列原因合成出来的配置错误。其实ROS kinetic和indigo两个版本的差距不是那么巨大,有不少在indigo上能用的程序在kinetic下重新编一编改一下也能用的。总之,接下来要通过对recognizer.py和launch文件的修改将这个错误干掉。
首先是对recognizer.py的更改:
在init中加入hmm参数
def __init__(self):# Start noderospy.init_node("recognizer")self._device_name_param = "~mic_name" # Find the name of your microphone by typing pacmd list-sources in the terminalself._lm_param = "~lm"self._dic_param = "~dict"self._hmm_param = "~hmm" #加入hmm参数
在start_recognizer中把set_property这一句屏蔽掉
def start_recognizer(self):rospy.loginfo("Starting recognizer... ")self.pipeline = gst.parse_launch(self.launch_config)self.asr = self.pipeline.get_by_name('asr')self.asr.connect('partial_result', self.asr_partial_result)self.asr.connect('result', self.asr_result)#self.asr.set_property('configured', True) #使用launch文件中提供的设置self.asr.set_property('dsratio', 1)
还是在start_recognizer中获取hmm参数并设置
# Configure language modelif rospy.has_param(self._lm_param):lm = rospy.get_param(self._lm_param)else:rospy.logerr('Recognizer not started. Please specify a language model file.')returnif rospy.has_param(self._dic_param):dic = rospy.get_param(self._dic_param)else:rospy.logerr('Recognizer not started. Please specify a dictionary.')return#获取hmm参数if rospy.has_param(self._hmm_param):hmm = rospy.get_param(self._hmm_param)else:rospy.logerr('Recognizer not started. Please specify a hmm.')returnself.asr.set_property('lm', lm)self.asr.set_property('dict', dic)self.asr.set_property('hmm', hmm) #设置hmm参数self.bus = self.pipeline.get_bus()self.bus.add_signal_watch()self.bus_id = self.bus.connect('message::application', self.application_message)self.pipeline.set_state(gst.STATE_PLAYING)self.started = True
接下来需要修改的是launch文件,需要在其中加入hmm的参数设置:
<param name="hmm" value="/usr/local/lib/python3.5/dist-packages/pocketsphinx/model/en-us"/>
以demo中的voice_cmd.launch为例:
<launch><node name="recognizer" pkg="pocketsphinx" type="recognizer.py"><param name="lm" value="$(find pocketsphinx)/demo/voice_cmd.lm"/><param name="dict" value="$(find pocketsphinx)/demo/voice_cmd.dic"/><param name="hmm" value="/usr/local/lib/python3.5/dist-packages/pocketsphinx/model/en-us"/></node><node name="voice_cmd_vel" pkg="pocketsphinx" type="voice_cmd_vel.py" output="screen"/></launch>
我在这里使用的hmm是通过pip下的pocketsphinx中自带的英语模型,识别率还不错,如果用tidigits那一套的话只能识别0-9的英文+Oh♂
之后测试只需要输入
roslaunch pocketsphinx voice_cmd.launch
然后启动gazebo或者stage或者fake或者龟机本体
对着麦克风大声的说出你的命令:FORWARD─=≡Σ(((つ•̀ω•́)つ
就可以看着自己的龟机很听话的满地跑了ヾ(๑╹◡╹)ノ
除此之外需要多说几句:
1.lm、dic、hmm三个东西最好是能配套使用,否则会造成各种识别错误
2.要自制词典的话请去Sphinx自行制作
3.语言模型文件不一定使用DMP格式,lm也可以,但是lm.bin格式不行
4.英语的识别率和你的发音是否标准有很大关系,达不到80%以上正确率的请自己反省
5.Sphinx的中文做的很一般,中文语音识别请认准科大讯飞
6.麦克风质量、距离、周围环境噪音等都会对识别造成影响
7.有没有什么办法能在代码块里高亮出某行代码呢(´・_・`)?
ROS Kinetic 使用PocketSphinx进行语音识别和控制机器人相关推荐
- ROS中阶笔记(六):机器人感知—机器语音
ROS中阶笔记(六):机器人感知-机器语音 文章目录 1 语音识别理论 2 常用语音功能包 3 科大讯飞SDK 3.1 使用前提 3.2 语音听写 3.3 语音合成 3.4 智能语音助手 4 参考资料 ...
- ROS+科大讯飞语音识别控制机器人
科大讯飞语音识别控制实际机器人运动. 本文将ros与语音识别想结合进行开发.进行以下步骤, 1.创作ros工作空间 2.安装mpalyer播放器 sudo apt-get install mplaye ...
- 基于ROS的语音控制机器人(一):基本功能的实现
文章目录 目录 文章目录 前言 一.ubuntu16.04和树莓派安装ROS-kinetic 二.树莓派和PC机之间的ros通信 1.修改环境变量 2.数据通信 三.科大讯飞sdk下载 四.树莓派和S ...
- python 语音识别机器人控制系统_ROS+科大讯飞语音识别控制机器人
科大讯飞语音识别控制实际机器人运动. 本文将ros与语音识别想结合进行开发.进行以下步骤, 1.创作ros工作空间 2.安装mpalyer播放器 sudo apt-get install mplaye ...
- 小R SLAM机器人树莓派3b+ ROS kinetic 环境搭建笔记
上位机环境搭建基本应该没什么难的,装一个Ubuntu16.04,然后根据ros官方指导来操作即可 http://wiki.ros.org/kinetic/Installation/Ubuntu 树莓派 ...
- Ubuntu16.04 + ROS kinetic + 激光slam-cartographer ROS + 数据仿真 + Turtlebot3仿真
一.Ubuntu16.04 +ROS kinetic的安装及问题解决 https://blog.csdn.net/GGY1102/article/details/107877937 二.Cartogr ...
- Ubuntu16.04安装ROS kinetic 及问题解决
ROS kinetic官网:http://wiki.ros.org/kinetic/Installation/Ubuntu 尽量参考官方网站的链接和教程,内容较新. 1. 配置Ubuntu的资源库:& ...
- 的环境下 qt 运行在_Ubuntu16.04环境下运行vins mono(环境配置及编译)之ROS kinetic的安装...
所需环境:ubuntu16.04+ROS kinetic+opencv 3.3.1+eigen3.3.3+ceres solver 1.14 1.ROS Kinetic 的安装 (1)设置source ...
- 【Ubuntu16.04】ROS · Kinetic安装 · 图文教程与问题详解
ROS 安装 1. 设置安装源 在终端输入指令:(同下) sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors ...
最新文章
- 2022-2028年中国边缘计算行业投资分析及前景预测报告(全卷)
- BMP图形文件分析类(c#)
- 微信小程序插件功能页开发详细流程
- python添加时间戳_Python 给某个文件名添加时间戳的方法
- .NET framework Library
- OpenCV3.1.0+VS2015开发环境配置
- 连接数据库时提示归档器失败 ORA-00257: archiver error
- vector的去重操作
- [2020.10.30NOIP模拟赛]小鱼吃大鱼【RMQ】
- 【Manacher】绿绿和串串(luogu 5446)
- codeforces #236 div2 简洁题解
- 15--0~n-1中缺失的数字
- php7开发的项目怎么样,如何在PHP7项目中搭建一个多线程
- 华为的鸿蒙系统是海思_全新12.9英寸华为MatePad平板曝光:搭载鸿蒙系统
- html之页面元素印射
- 前端element-ui中图片oss直传到阿里云
- mysql 十年_十年前的老问题,MySQL 8.0有了答案
- C语言this is a string,求一道C语言题目The aim of this exercise is to write a C program tha
- 计算机文字输入程序,电脑上怎么输入汉字
- python视频转字符动画_python字符动画
热门文章
- 刺激战场pc服务器没有响应,刺激战场PC端玩不了怎么办 PC端玩不了解决方法[多图]...
- php 手机打开摄像头,能够使用浏览器打开手机端摄像头
- 在 main 函数之前执行代码(C 语言)
- Kibana(Windows版本)
- C++ vector用法和传参
- 随机森林(RandomForestClassifier)----概述与应用
- 3万多款插画笔刷,40种风格!完善设计弹药库
- Excel取中间几个字符
- 录音转文字助手该怎么使用?这里教你操作方法
- css设置滚动条、并设置滚动条样式