ROS联合Webots扩展(二)通过语音控制机器人方案

2023-10-08 23:20

本文主要是介绍ROS联合Webots扩展(二)通过语音控制机器人方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过语音控制机器人方案

注意:

  • 再学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识
  • 此教程以webots_demo为基础
    ubuntu版本:20.04
    webots版本:2021a
    ros版本:noetic

0.前言

目前语音机器人已经非常普遍,那我们想要搭建自己的低成本语音识别平台该如何实现呢?
在这里插入图片描述

图一就是笔者使用的方案,这个方案成本较低,但是环境搭建复杂。

  1. 语音唤醒:使用pocketsphinx实现
  2. 语音识别:使用腾讯云ASR实现
  3. 语义理解:使用腾讯云NLP实现
  4. 本地语音合成:使用ekho实现
    在这里只介绍如何搭建pocketsphinx环境和ekho环境。

1.安装pocketsphinx工具

具体可以看cmusphinx

1.1安装依赖

$ sudo apt-get install bison
$ sudo apt-get install swig

1.2安装sphinxbase

下载文件sphinxbase-5prealpha.tar.gz

$ tar -zxvf sphinxbase-5prealpha.tar.gz sphinxbase-5prealpha/
$ cd sphinxbase-5prealpha/
$ PYTHON=python3 ./configure
$ sudo make
$ sudo make install 

1.3安装pocketsphinx

下载文件pocketsphinx-5prealpha.tar.gz

$ tar -zxvf pocketsphinx-5prealpha.tar.gz pocketsphinx-5prealpha/
$ cd pocketsphinx-5prealpha/
$ PYTHON=python3 ./configure
$ sudo make
$ sudo make install 

1.4安装pocketsphinx-python

pip install pocketsphinx

笔者遇到的问题:

  • deps/sphinxbase/src/libsphinxad/ad_pulse.c:44:10: fatal error: pulse/pulseaudio.h: 没有那个文件或目录
$ sudo apt-get install libpulse-dev
  • deps/sphinxbase/src/libsphinxad/ad_alsa.c:76:10: fatal error: alsa/asoundlib.h: 没有那个文件或目录
$ sudo apt-get install libasound2-dev 

1.5安装中文模型

下载文件cmusphinx-zh-cn-5.2.tar.gz
zh_cn.cd_cont_5000;zh_cn.dic;zh_cn.lm.bin三个文件放到/home/mckros/.local/lib/python3.8/site-packages/pocketsphinx/model/

1.6安装pyaudio

$ sudo apt-get install portaudio19-dev 
$ pip3 install pyaudio

Ubuntu安装pyaudio找不到python.h的问题
对于Debian | Ubuntu使用包管理器安装PyAudio:

$ sudo apt-get install python-pyaudio python3-pyaudio

2.使用在线工具建立自己的语料库

2.1创建一个语料库

$ touch volcano.txt
$ vim volcano.txt 

输入以下内容:

小度你好
前进
后退

保存退出

2.2利用在线工具LMTool建立语言模型

工具网站:LMTool
选择刚刚创建的语料库,然后提交,顺序如下图所示:
在这里插入图片描述

提交之后需要下载的就.dic.lm两个文件,如下图所示:
在这里插入图片描述

将两个文件放到/home/mckros/.local/lib/python3.8/site-packages/speech_recognition/pocketsphinx-data/zh-CN/文件夹下。
如果没有zh-CN文件夹,自己新建一个,并且将pocketsphinx/model下的zh_cn.cd_cont_5000文件夹复制近来,改名成acoustic-model,将.lm改名为language-model.lm.bin,将.dic改名为pronounciation-dictionary.dict
打开pronounciation-dictionary.dict,给中文添加音标。

小度你好	x iao3 d u4 n i3 h ao3
前进	q ian2 j in4
后退	h ou4 t ui4

2.3编写程序

import speech_recognition as sr
# 使用pocketsphinx实现语音唤醒
def wake_up():r = sr.Recognizer()# obtain audio from the microphonewith sr.Microphone() as source:r.adjust_for_ambient_noise(source)  # listen for 1 second to calibrate the energy threshold for ambient noise levelsprint('say something')# os.system("aplay \"dd.wav\"")audio = r.listen(source)# recognize speech using Sphinxtry:phrase = r.recognize_sphinx(audio,language="zh-CN")print("Sphinx thinks you said " + phrase)except sr.UnknownValueError:print("Sphinx could not understand audio")except sr.RequestError as e:print("Sphinx error; {0}".format(e))
if __name__ == "__main__":wake_up()

运行结果如下所示:
在这里插入图片描述

3.安装发音模块 ekho(余音)

3.1安装依赖

$ sudo apt-get install libespeak-ng-dev
$ sudo apt-get install libsndfile1-dev libpulse-dev libncurses5-dev libmp3lame-dev libespeak-dev

3.2下载工具

工具下载地址:http://www.eguidedog.net/cn/ekho_cn.php
下载完成后:

$ ./configure
$ sudo make
$ sudo make install

3.3测试工具

$ ekho "hello 123"

可以听到扬声器发出了hello 123的声音

3.4python3代码实现

import os
os.system("ekho 好的")

3.5问题

./configure的问题
configure: error: sndfile test failed

$ locate sndfile
$ ln -s /usr/lib/libsndfile.so.1.0.20 /usr/lib/libsndfile.so

结语

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~
只要会使用这些模块就能很轻松的加入到ROS中进行机器人的语音控制。
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
✌Bye

可以通过github项目学习:https://github.com/JackyMao1999/volcano_robotsim/tree/Noetic-Webots-2021a
整个项目bilibili视频演示(语音在1:10秒左右):毕业设计视频-图书馆管理机器人

这篇关于ROS联合Webots扩展(二)通过语音控制机器人方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/168678

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除