ROS机器人语音模块

ROS机器人语音模块

文章目录

*
ROS机器人语音模块

+ 零 乘骐骥以驰骋兮,来吾道夫先路
+ 壹 路漫漫其修远兮,吾将上下而求索
+ 贰 苟余情其信姱以练要兮,长顑颔亦何伤
+ 叁 不吾知其亦已兮,苟余情其信芳
+ 肆 虽体解吾犹未变兮,岂余心之可惩
+ 末 亦余心之所善兮,虽九死其犹未悔

近期我参加了第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛,目前我们队已经完成了场地搭建、环境配置,各传感器的功能也已验证完毕,接下来就是视觉代码编写以及ROS相关功能实现,其中就包括机器人语音功能,另外,互联网+比赛的机器人也需要实现语音功能。因此,实现ROS机器人语音功能的任务就落在了我的肩上。

目前,我找到了语音模块相关文档”环形六麦克风阵列开发者文档”,该文档用于描述科大讯飞环形六麦克风阵列的使用方法,覆盖语音唤醒、声源定位、语音获取、语音识别等应用的实现方式。废话不多说,直接开干咯!

零 乘骐骥以驰骋兮,来吾道夫先路

麦克风阵列简介:

ROS机器人语音模块
  1. 麦克风阵列是由一定数目的声学传感器(一般为麦克风)组成, 对声场的空间特性进行采样并处理的系统。其主要作用有声源定位,抑制背景噪声、干扰、混响、回声,信号提取与分离。其中,声源定位是指利用麦克风阵列计算声源阵列的角度和距离,基于TDOA(Time Difference Of Arrival,到达时间差)实现对目标声源的跟踪;信号的提取与分离是指在期望方向上有效地形成一个波束,仅拾取波束内的信号,从而达到同时提取声源和抑制噪声的目的。
  2. 麦克风的一般使用流程:① 麦克风启动并进入工作状态 ② 设置麦克风的主麦方向,可唤醒或手动设置 ③ 获取降噪音频送入识别引擎进行识别和处理

【注:在麦克风阵列中,一般指定一个主麦来实现指定方向声音加强,其他方向抑制的目的,且降噪音频的获取也属于该主麦方向。若未主动设置主麦,主麦方向随机,则获取到的降噪音频不一定基于说话方向,此时生成的降噪音频可能不是最优的】

; 壹 路漫漫其修远兮,吾将上下而求索

Linux-SDK:

  1. 本次智能车比赛所用麦克风阵列板载系统为Linux,用户可以使用任一搭载Linux系统的主机进行通信,主机与麦克风阵列之间的通信方式为基于USB的自定义通信协议。基于这些协议,用户可以在主机端进行诸如麦克风板开机、获取音频、设置主麦方向、获取唤醒角度等操作。为便于使用,本次比赛所用麦克风阵列配备SDK,主要对一些协议进行了API封装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBRPthll-1652716821228)(https://gitlab.com/Muscularmonk/project_01/uploads/aa51e6b68a79d573dab694dcb9a8f353/2.png)]

  1. 将sdk拷贝到系统任一目录,切换到该目录,可以看到 sdk-vvui 以及 ros 中对应的功能包集 vvui_ros-master。初次使用且未配置本麦克风的udev规则,则先完成如下操作:(注:xf_mic.rules位于根目录)
sudo cp xf_mic.rules /etc/udev/rules.d
sudo service udev restart

  1. 该SDK文件中 config 存放配置文件,其中 call.bnf 是用户自定义的离线命令词语法文件,可根据场景进行更改,且需要根据 bnf 语法规则来定义关键语料,需要先构建语法,再指定使用的语法
  2. SDK集成方式: 首先进入主机(搭载linux系统的PC或ARM板),将SDK拷贝到自定义的目录中,切换到该目录,执行以下命令,
tar xvf vvui.tar.gz
sudo apt-get install libasound2-dev
sudo apt-get install sox
sudo apt-get install mplayer

lsusb

贰 苟余情其信姱以练要兮,长顑颔亦何伤

基础功能测试:

  1. 动态库配置:
cd ./vvui/lib

若主机是X64操作系统,则执行:

cd x64 && sudo cp lib* /usr/lib

若主机是arm64操作系统,则执行:

cd arm64 && sudo cp lib* /usr/lib

若主机是arm32操作系统,则执行:

cd arm32 && sudo cp lib* /usr/lib
  1. 生成可执行文件:
cd vvui/sample/mic_demo_sample

若主机是X64操作系统,则执行:

sh ./x64bit_make.sh

若主机是arm64操作系统,则执行:

sh ./arm64_make.sh

若主机是arm32操作系统,则执行:

sh ./arm32_make.sh
  1. 测试:
cd ../../bin
sudo ./mic_demo_sample

若运行完成,会提示”成功打开麦克风设备”,后面附有1-11命令

【注:由于时间和篇幅问题,离线命令词识别案例和在线人机交互案例不在此处记录,有需要的uu可以下载相关文档,自行查看】

叁 不吾知其亦已兮,苟余情其信芳

麦克风相关 ROS接口使用步骤:

  1. 拷贝与编译:

将 vvui_ros-master 包放到任一ROS工作空间的src目录下,根据运行平台修改功能包的CmakeLists.txt文件,地址为 /工作空间名/src/vvui_ros-master,修改内容如下,若为Nvidia Jetson平台,则修改为 lib/arm64

link_directories(
    lix/x64
)

然后切换到该工作空间,直接 catkin_make,编译完成后,执行以下命令使工作空间生效:

echo "source ~/工作空间名/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

最后关闭所有终端

  1. udev rules 检查:
sudo service udev restart

最后再插拔麦克风即可

肆 虽体解吾犹未变兮,岂余心之可惩

首先在讯飞开放平台注册账号

ROS机器人语音模块

然后点击右上角”控制台”

ROS机器人语音模块

进入控制台后,如果是第一次使用,则控制台是空的,点击创建新应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shBspENP-1652716821230)(https://gitlab.com/Muscularmonk/project_01/uploads/02b0e8f91058eb7ca45a1142ab87b5fb/5.png)]

ROS机器人语音模块

提交后可以看到用户应用列表,选择刚创建的应用,进入应用配置界面。接着就可以下载sdk玩了。

【注:由于时间和篇幅问题,离线命令词识别和集成AIUI不在此处记录,有需要的uu可以下载相关文档,自行查看】

; 末 亦余心之所善兮,虽九死其犹未悔

常见错误纠错与解决方法找不到麦克风设备系统未检测到麦克风启动后出现报红或segment fault字样检查是否配置麦克风udev规则启动后出现libcjson.so.1不存在需要安装 cjson,且将/usr/local/lib中的libcjson.so.1移动到/usr/lib下23300或bnf_recognise_error离线命令词识别时 bnf 语法有误,检查标点符号、槽定义等是否有误10407或unfit_appid_and_lib_errorappid与动态库 libmsc.so 不匹配10102或build_grammer_error离线命令词识别过程中,common.jet 资源文件路径有误,建议修改为绝对路径11210appid与离线资源 common.jet 不匹配11201在线业务超次数或离线资源装机量超限文件无法打开确认音频文件是否有读写权限启动例程时一直显示麦克风未启动检查是否有开启录音后未停止录音的操作。若有,则需手动停止录音或断开与麦克风的连接

Original: https://blog.csdn.net/MuscleMonk/article/details/124811062
Author: monk_闲来垂钓
Title: ROS机器人语音模块

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/515894/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球