ROS+科大讯飞语音=让你的机器人能听会说---(一)环境搭建与准备
概述
ROS介绍
ROS是是用于机器人的一种次级操作系统。它提供类似操作系统所提供的功能,包含硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,它也提供一些工具程序和库用于获取、建立、编写和运行多机整合的程序。对ROS进行分级可分为计算图级、文件系统级、社区级。其中计算图级主要描述程序如何运行;文件系统级决定程序文件如何组织和构建;社区级负责程序的分布式管理。计算图是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程以及他们所进行的数据处理,将会通过一种点对点的网络形式表现出来。这一级主要包括几个重要概念:节点(node)、消息(message)、主题(topic)、服务(service)。
具体见 http://wiki.ros.org/
讯飞语音介绍
讯飞开放平台作为全球首个开放的智能交互技术服务平台,致力于为开发者打造一站式智能人机交互解决方案。用户可通过互联网、移动互联网,使用任何设备、在任何时间、任何地点,随时随地享受讯飞开放平台提供的“听、说、读、写……”等全方位的人工智能服务。目前,开放平台以“云+端”的形式向开发者提供语音合成、语音识别、语音唤醒、语义理解、人脸识别、个性化彩铃、移动应用分析等多项服务。
相比其他的语音sdk,科大讯飞提供了多个平台的sdk,适合各个领域的开发与应用。并且提供了开放语义的平台和完善和开发者平台,能够很方便对机器人的对话进行自定义。
硬件条件
- intel minnow board 开发板 (当然一般笔记本电脑也可以)
- 科大讯飞五麦环形阵列评估版(也可用软件sdk方法实现唤醒,后面会介绍)
环境准备
- 安装好ubuntu 14.04 LTS
- 安装好ROS indigo
- 搭建好一个catkin工作空间
- 安装mplayer播放器(用于音频播放)
- 命令 sudo apt-get install mplayer
- 可选软件
- 安装ssh服务端(主要方便远程命令行调试)
- 安装x11vnc(主要方便远程桌面调试)
- 安装samba(主要方便文件的传输与共享)
- 注册有讯飞开发平台账号
- 创建了app
- 下载相关sdk的linux版本(包括离线命令字识别,离线语音合成,申请开发云语义,语音唤醒)
- 编译运行官方demo测试sdk能使用以后,将离线命令字识别包中的lib/libmsc.so复制到/usr/lib目录下,这个libmsc.so包含了所有的api函数。
整体节点框图
工作过程
- 五麦阵列硬件监听到特定的关键字后通过串口发送唤醒信号给平台,wakeup节点监听串口,唤醒后发送一个主题为xfwakeup的消息,此消息包含唤醒的角度信息。(此节点也可以里利用讯飞的语音唤醒sdk以软件方式实现,后续会介绍)
- xfasr节点订阅了xfwakeup消息,消息来到后,xfasr节点就开始一边采样声音信号,一边进行识别,但又识别结果或者设置时间到达后,停止录音。若识别成功,则将返回的结果的json格式发送到xfunderstand主题上。
若没有识别结果,这发送失败提示语到xfsaywords主题上。 - xftts订阅了xfsaywords主题,并负责将此主题出现的消息的字符串转换为音频文件,然后调用mplayer播放器播放。xftts还订阅了xfplaywave的主题,用于播放指定路径或者网址的文件
- explain节点订阅xfunderstand主题,功能是对识别结果进行解析,并发出相应的控制指令到control_cmd主题上,同时将应答语句发送到xfsayword主题,以便xftts节点进行转换播放。此节点采用python语言编写,方便随时修改和升级
主要工作
- 将自己的唤醒字资源文件下载到环形阵列板卡中,并实现板卡串口与平台串口的连接,在c语言中编写相应的驱动。(笔者在这采样的是mraa库)
- 编写xfasr节点,能做到一边录音一边识别,识别到结果后自动停止录音。这里笔者是花了很多时间的,主要是在声卡的驱动上,最后采用的alsa录音。
- 编写xftts节点,简单讲官方的demo改改就可以实现,播放时笔者利用里mplayer播放器,使用其被动模式,与管道通信的方法,实现了随时播放也可被打断,并且稳定性高。
- explain节点就是将识别结果的json数据转换为字典变量,然后进行进一步解析和处理。
本系列结构
本系列为ROS+科大讯飞语音=让你的机器人能听会说,
主要分为环境搭建与准备篇,说话篇,识别篇,唤醒篇,语义解释篇五部分。
笔者的所有源码 将在相关篇中全部列出,并且会上传到笔者的github仓库保存
git仓库地址 https://github.com/zhouge94/Cute_Six_ROS_Balance (已经上传)