最新消息:

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

ROS1/一代机器人系统 少儿编程 2103浏览 0评论

本篇文章将使用树莓派与 ReSpeaker 4-Mic Array for Raspberry Pi 来完成语音识别的功能;并使用 ROS 1.0 系统的多机通讯功能,操控远程计算机的小乌龟。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

准备事项

•准备好两台已安装 ROS 1.0 系统之个人计算机或单板计算机

•开启分页型 Terminal 的快捷键为Ctrl + shift + T

Ø 开头若是此符号,表示为需要输入的指令

本范例将会有树莓派的 Terminal gif 动画与笔电的 gif 动画,分辨方式为查看开头的用户帐户与实体主机名,如下两张图与红框所示

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

本文将介绍:

1.如何使用树莓派原生系统 Raspbian 安装 ROS 1.0Kinetic 版本

2.建置使用语音识别时的工作环境

3.即使使用不同的操作系统操作 ROS 1.0,依旧能够完成多机通讯操作

4.使用基于语音识别系统 Sphinx ROS packagepocketsphinx」完成语音识别

5.利用语音识别结果与 ROS 1.0,远程操控 ROS 1.0tutorial 中的 turtlesim

现在开始:

实际操作

早在计算机发明前,自动语音识别的设想已经被提上了议事日程,早期的声码器可被视为语音识别及合成的雏形;而语音识别技术最重大的突破是「隐马尔科夫模型(Hidden Markov Model)」的应用,现今大多数的语音识别或多或少也都与隐马尔科夫模型的应用有关。

因此本篇文章我们将使用由卡内基梅隆大学的李开复教授,基于隐马尔科夫模型的大词汇量语音识别系统「Sphinx」,搭配 ROS 系统来完成语音识别的功能。本篇文章将使用树莓派与 ReSpeaker 4-Mic Array for Raspberry Pi 来完成语音识别的功能;并使用 ROS 1.0 系统的多机通讯功能,操控远程计算机的小乌龟。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

ROS 1.0 系统较为困难的操作之一,便是「开发环境的建置」,因此在前几篇教学文章中我们多采用 Ubuntu 操作系统来安装,这是因为 ROS Ubuntu 系统兼容性最高,也最容易安装;然而,在这次我们使用的 Respeaker 4-Mic Array for Raspberry Pi(以下皆简称为respeaker),目前为止并不支持 Ubuntu-mate 16.04 系统

因此若是想利用 ROS 1.0 系统与 respeaker 完成语音识别,势必将须使用另一外套操作系统。通常被最多询问的二个问题:

•是否可以在别的操作系统,安装 ROS 1.0

•若是以不同操作系统来操作 ROS 1.0,是否依然可以完成多机通讯的操作?

接下来,我们将透过本篇的 ROS 1.0 与语音识别的教学文章,回答大家两个问题!我们将执行 8 个步骤,来执行 ROS 1.0 语音识别的功能。

1. Raspbian 操作系统 安装 ROS 1.0 系统

要在 Raspbian 操作系统中,安装 ROS 1.0 前,请确保树莓派中的 Raspbian 系统为 2018 11 13 日所发行的版本。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

确认 Raspbian 系统的版本后,接下来便可以安装 ROS 1.0 Knietic 版本了。熟悉 Linux 系统的朋友,可以依照此网址的安装步骤自行安装;若是不熟悉 Linux 操作系统的朋友,可依照下列步骤,安装 ROS 1.0Knietic 版本。

•树莓派的 Raspbian 操作系统开启 Terminal ,使用 apt 套件安装 git 套件;Ø sudo apt-get install git

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

由于小编先前已在树莓派的 Raspbian 操作系统上安装过 git 版本控制器,因此上方的动画呈现的是已经安装的动画。

•下载开源专案 smart_robot

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

执行 ROS_PI_kinetic_install.sh 脚本

这里需要注意的是,因为 Raspbian 操作系统的源仓库中,并没有 ROS 1.0 相关的安装套件(也就是无法使用 sudo apt-get install ros-kinetic-desktop-full 安装 ROS 1.0)。因此,我们是透过Python 中的 rosinstall 套件产生下载 ROS-kinetic 相关套件的连结,再使用 Python 中的 wstool 套件来管理 ROS-kinetic 相关套件的连结,决定是否下载该套件的原始码。

最后,再透过 Cmake 系统,将刚刚下载的 ROS kinetic 相关套件原始码,进行编译与安装。在此编译与安装过程中,因为树莓派本身硬件限制,无法一次执行多个编译与安装任务,因此我们在 make 的选项后面,加入「-j1」的参数选项,即告知树莓派请一次执行一个编译或安装,因此此步骤将会执行 3 ~ 5 小时不等的时间。

请务必确保树莓派是使用变压器供给电源且散热充足的情况下,再输入指令 Ø source ~/smart_robot/ROS_PI_kinetic_install.sh,开始安装 ROS 1.0 kinetic 版本。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

执行完「ROS_PI_kinetic_install.sh」脚本后,Raspbian 操作系统便会开始自行安装ROS 1.0kinetic 桌面完全安装版本。

2. 下载开源专案 smart_robot

ROS 1.0 kinetic 版本安装完成后,便可以下载github上的的开源项目—smart_robot;如果树莓派已经在安装步骤下载过开源项目 smart_robot 的朋友,可以直接进入步骤 3;还没下载的朋友可以依照步骤 1 下载。

若是想要进行 ROS 1.0 系统的多机通讯操作,也请务必在主控计算机端(已安装完成 Ubuntu 操作系统与 ROS 1.0 -kinetic 版本),下载开源项目 smart_robot

3. 下载与安装开源专案 smart_robot的依赖

在执行开源项目 smart_robot 前,我们需要下载与安装相关的依赖。需要注意的是,因为依赖众多的原因,加上在使用 Cmake 系统的时候,我们设定的参数选项为「-j1」,因此请确保树莓派是使用变压器供给电源与散热充足的情况下,再执行下载与安装依赖的脚本。

在树莓派端需要执行的是「dependencies_for_smartRobot_pi_ws_tools.sh」脚本档案;Øsource ~/smart_robot/dependencies_for_smartRobot_pi_ws_tools.sh

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

当然,若是想进行 ROS 1.0 多机通讯操作,请务必在笔电端下载安装开源项目 smart_robot 相关的依赖。在笔电端需要执行的是「dependencies_for_laptop.sh」脚本档案;Ø source~/smart_robot/dependencies_for_laptop.sh

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

到目前为止,在树莓派原生系统 Raspbian 操作系统中,配置 ROS 1.0 kinetic 版与执行开源项目 smart_robot 的工作环境大致完成了!

4. 建立开源项目 smart_robot ROS 1.0 工作空间

当开源项目 smart_robot 所需要的工作环境建立完成后,我们便可以开始构建该项目的 ROS 1.0 工作空间了,请输入下列指令 Ø cd ~/smart_robot/catkin_ws && catkin_make -j1

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

由于开源项目 smart_robot 拥有的 package 较少,因此即使以 [ -j1 ] 的参数选项来构建 ROS 1.0 工作空间,不会耗费太多时间

5. 关闭树莓派,并安装 respeaker 硬件

当开源项目 smart_robot 相关的工作环境、工作空间都就绪后,我们就可以先将树莓派关机。确保树莓派无任何外部电源供电后,便可以将 respeaker 安装至树莓派,安装方法非常简单,只要将 respeaker 的母座,对准树莓派所有 GPIO 的脚位后,轻轻地安装上去即可。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

6. 设定树莓派抓取 Respeaker 硬件

•查询树莓派的声卡和数字音频设备

Respeaker 安装完成后,接下来是韧体端的设定了。将树莓派启动后,开启 Terminal 并输入指令 Ø arecord -l 查找目前的声卡与数字音频设备(录音)。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

输入指令后,便会出现关于树莓派本身所搭载的声卡和数字音频设备(录音)相关信息,这里我们需要纪录的是 card 的编号与 device 的编号。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

如上图所示,在本篇文章教学中,respeaker card 的编号为 1 device 的编号为 0

我们也顺便查找一下声卡和数字音频设备(播放)的相关设备信息,以便之后可以直接自行开发 google 的语音助理相关功能:

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

输入指令后,便会出现关于树莓派本身所搭载的声卡和数字音频设备(播放)相关信息。同样地我们需要纪录的是 card 的编号与 device 的编号,我们选择树莓派本身就具有的 3.5 mm jack 作为播放声音的设备(下图红框的编号)。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

配置 ~/.asoundrc 文件,让树莓派抓取声卡和数字音频设备

记录好录音与播放的 card device 编号后,接着我们需要告知树莓派使用这一组编号作为预设的使用编号。相关的设定指令如下图所示:

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

这里需要注意的是红框部分,在 mic 部分需要替换成刚刚记录 respeaker card 编号与 device 编号;在 speaker 部分需要替换成刚刚纪录 3.5 mmjack card 编号与 device 编号。

请输入下列指令 Ø sudo vim ~/.asoundrc、新增并修改 ~/.asoundrc 文件(此篇教学文章使用vim 作为文本编辑器),将设定声卡和数字音频设备指令输入至此文件。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

因作者的树莓派已经有新增并修改过 ~/.asoundrc 文件,因此上面的 gif 动画显示的结果是已经配置好设定指令的画面,若是第一次输入指令的朋友呈现的应该会是空白的画面。下图是配置完成后的结果:

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

配置好 ~/.asoundrc 文件后,便可以存盘关闭并重新启动树莓派,让树莓派在开机时自动读取该文件的设定,使 respeaker 能够发挥作用。这边很重要的一点是,此配置方法是 Linux 操作系统的配置方法,在 Raspbian 操作系统及 Ubuntu 操作系统都可使用,另外也可以在笔电上用此种方法配置好关于录音与播放所想要使用的设备。

7. 使用 ROS 系统进行语音识别

•配置 ROS 1.0 多机通讯架构

/小编:配置 ROS 1.0 的多机通讯方法将在后面的课程与大家分享/

若是不想使用 ROS 1.0 多机通讯,则第 7、第 8 的所有步骤皆可在树莓派端中执行。

•笔电向网域注册 Master

本篇文章教学范例中,使用笔电向网域注册 Master,请在可操作 ROS 1.0 系统的笔电上开启 Terminal ,并输入指令 Ø roscore 以注册 Master

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

树莓派执行「pocketsphinx.launch」文件

在开源项目 smart_robot 中,有着由 github 上的作者 UTNuclearRoboticsPublic 所改编而来的 ROS 1.0Package—「pocketsphinx」。这个 Package 便是使用语音识别系统 Sphinx 的模型,来实现语音识别,因此我们仅需要执行 pocketsphinx.launch 的文件,便可以开启语音识别的功能。请在树莓派端输入下列指令 Ø roslaunch pocketsphinx pocketsphinx.launch 执行「pocketsphinx.launch 」文件。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

查看语音识别结果

由于 sphinx 语音识别模型是以本地数据库来交叉比对测试者的语音,因此我们需要先知道该模型可辨识的关键词词与数据库所拥有的数据,才能说出正确的字词,让树莓派辨识语音结果。关键词词与数据库皆存放在 pocketsphinx/vocab/hub4wsj_sc_8k 文件夹里,如下图所示:

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

其中,「voice_cmd.dic」存放的便是语音数据库 ; voice_cmd.kwlist 」存放的是关键词词;我们可以开启「voice_cmd.kwlist」,查看目前有哪些关键词词可供辨认。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

当知道有那些关键词词可供辨认后,我们便可以查看此时 ROS 1.0系统中的 topic : /pocketsphinx_recognizer/output ,来知道树莓派是否真的能够辨识出我们所说的关键词。在笔电的 Terminal 上,输入下列指令查看该 topic 的数据,此数据便是语音识别的结果。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

由于我们使用的 sphinx 语音识别模型是以外国人士的声学模型,所建立的语音识别模型,因此在实测时会发现,对于并非以英文为母语的测试者,辨识的准确率实际上并不高;若是想自行更换关键词词与数据库,可至该网站自行下载。

https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/

8. 语音控制 turtlesim

请确保第 7 步骤已顺利执行,且可辨认「go stop backleftright等简单词汇后,我们就可以控制 turtlesim 啰!

首先请在笔电端开启 terminal ,并执行开启 turtlesim 的指令 Ø rosrun turtlesim turtlesim_node

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

当小乌龟出现后,我们便可以在树莓派端,执行节点「voice_control_turtlesim」,用语音控制小乌龟。

 

机器人课程系列:如何使用 ROS 1.0 完成语音识别功能

执行完毕后,我们便可以将开启小乌龟的 terminal 与执行 voice_control_turtlesim 并排呈现,开始使用语音控制小乌龟。

小结

本篇文章的语音识别教学到此告一个段落,与大家分享如何在 Rasp.bian 操作系统中安装 ROS 1.0,并成功在拥有 Ubuntu 16.04 操作系统的笔电上,透过 ROS 1.0 系统,接收来自 Raspbian 操作系统的树莓派语音识别结果,相信大家在操作过程中,应该一步步解决了文章一开始提及的两个问题。

另外,由于 smart_robot 是一个藉由众人的力量所完成的开源项目,所以也欢迎大家自行修改里面的程序代码,完成属于自己的机器人

转自公众号:
易心Microbit编程

您必须 登录 才能发表评论!