1. 引言
当前科学家们在不断努力使机器人实现智能化,随着机器人和传感器、人工智能等技术的结合,机器人逐渐出现在家庭、公共场所、办公室等地方,人们日常对机器人的控制需求也越来越多。为了实现人类对机器人更加方便智能的控制,控制方式在不断探索中发展,产生了键盘、屏幕、图像等方式,使用屏幕或者键盘进行控制的方式在日常生活和公共场合等场景中逐渐变得不是那么的方便 [1]。
语音作为人类日常使用的交流方式,语音控制和其它的控制方式相比更加方便自然,更符合人类的行为习惯 [2],于是语音控制方式应运而生。把通过语音控制的机器人称为声控机器人,声控机器人正在展现其优势逐渐进入到人类的日常生活,为人类提供便利的服务,提高人们的生活水平和质量。大量的研究投入和科技进步,机器人行业会蓬勃发展,声控机器人会在未来大放光彩。因此,对于声控机器人的研究具有重要的意义。
考虑到人们平常中使用手机的习惯,本论文设计了一种基于Android程序语音识别声控机器人,Android程序的语音控制信息通过MQTT协议发送给NodeMCU处理控制机器人,并通过SYN6288语音合成进行人机互动。
2. 系统功能设计
1) 声控。声控的前提需要实现语音识别,设计的语音识别语音指令有:前进、后退、左转、右转、停止、查询当前温度、查询当前湿度;2) 移动。由声控控制机器人做相应的移动,具体的动作有:前进、后退、左转、右转、停止;3) 温湿度检测,检测附近环境的温湿度;4) 语音应答。机器人在收到语音指令后做出相应的语音响应,实现人机互动。比如机器人收到“前进”后,机器人应答“好的前进”,当收到“查询当前温度”后,机器人回答“当前的温度为*摄氏度”。
3. 系统硬件设计
图1为系统设计的框架,语音识别采用Android软件程序完成,通过MQTT协议完成和ESP8266的通信。根据图1设计硬件电路。
3.1. MCU主控
ESP8266是乐鑫公司开发具有WIFI功能的芯片 [3],WIFI支持STA、AP、STA+AP工作模式,该芯片集成度高,内部集成有32位的微型处理器、标准数字外设接口、电源管理模块等,结构如图2。本论文使用了基于ESP8266芯片的NodeMCU开发板做为主控 [4] [5],控制和处理一系列的模块和指令。NodeMCU实用性高、成本低,大大降低了开发成本,被广泛应用到物联网上。

Figure 2. ESP8266 chip structure diagram
图2. ESP8266芯片结构图
3.2. 移动模块
移动模块的选择有轮式、腿式、复合式、履带式,选择为轮式移动结构 [6],轮式结构具有移动效率高、方便灵活的特点。用L298N电机驱动模块驱动电机,L298N的IN1、IN2、IN3、IN4四个接口与NodeMCU的D0-D3 GPIO口相连获取电机的控制信号,控制机器人前进、后退、左转、右转、停止。
3.3. 温湿度检测
DHT11传感器测量相对湿度的范围为5%~95%RH,温度的测量范围为−20℃~+60℃,温湿度测量的范围可用于大部分的环境,使用该一个传感器可完成温湿度的检测,节约资源,故选择DHT11传感器检测温湿度。DHT11为单总线的通信方式 [7],通信协议简单,每次传输40 bit的数据给NodeMCU。40 bit数据中,传输顺序为8 bit的湿度整数 + 8 bit湿度小数 + 8 bit温度整数 + 8 bit温度小数 + 8 bit校验位,其中湿度小数的数据固定为0。湿度数据和温度数据加起来等于校验位数据说明传输正确,否则传输错误。
3.4. 语音合成播报
SYN6288语音合成模块合成并播报语音,每次最多能合成200字节的文本,该模块为串口通信方式 [8]。SYN6288可以实现中文、英文字母、数字的语音合成播报,并且支持中文、英文字母、数字的混读。给待合成的文本编码,构造封装成格式帧,SYN6288串口接收格式帧,内部会合成语音,并且用扬声器播报出来 [9]。编码方式支持GB2312、GBK、BIG5、Unicode,该模块暂时不支持英文的单词和句子合成。
3.5. 电源模块
电源模块是为了给各个模块提供足够的电压,使系统能正常工作。系统各个模块需要的供电电压:L298N需要的电压不小于6V,NodeMCU需要5V电压,DHT11、SYN6288需要3.3V电压。考虑到L298N模块有5V稳压输出,可以给NodeMCU供电,所以选择12V可充电的18650型锂电池给L298N模块供电,然后NodeMCU再输出3.3V稳压给其他模块供电。
4. 软件设计
软件设计分为两个部分,分别是Android程序和NodeMCU程序。
4.1. Android程序设计
Android程序用Android Studio开发,程序的主要内容有:语音识别、MQTT通信。用百度提供语音识别服务开发Android语音识别 [10],使用百度语音识别需要到百度云平台上注册账号,申请APP_ID、API_KEY、SECRET_KEY,然后下载百度语音识别的Android SDK导入到自己的Android项目,配置好SDK文件。

Figure 3. Android programming flow chart
图3. Android程序设计流程图
MQTT是一种基于发布–订阅模式、传输带宽小的即时通信协议 [11] [12],MQTT可分为三个部分:发布者、服务器、订阅者。Android程序作为发布者,连接MQTT服务器,建立一个MQTT主题,然后就可以向该主题发布信息,NodeMCU作为订阅者连接到该MQTT服务器和该主题就能接收到Android程序发布的信息,实现两者的即时通信。
为了把每一个识别到的语音指令转变成控制机器人的命令,同时让NodeMCU方便快速地处理这些控制信息,把每一个语音指令都进行二进制编码,建立语音指令和编码一一对应的表,当Android程序语音识别到结果,和表中的语音指令逐一匹配,如果存在匹配结果说明是语音指令,则把相应的编码通过MQTT协议发送给NodeMCU,让NodeMCU进行控制,图3为Android的设计流程。
4.2. NodeMCU程序设计
NodeMCU开发板选择Arduino编程方式开发,程序的内容有:SYN6288的语音合成播报、MQTT通信、语音指令信息处理、L298N的运动控制、DHT11的温湿度检测。NodeMCU的工作过程:初始化,成功连接MQTT服务器后订阅相关主题,等待来自Android程序的语音控制指令,对控制指令处理,判断是什么控制指令,控制合成相应的语音和机器人运动,同时使用中断的方式进行温湿度的检测,图4为NodeMCU程序设计流程。

Figure 4. NodeMCU program design flow chart
图4. NodeMCU程序设计流程图
5. 结语
论文中设计了一种基于Android语音识别,使用ESP8266 NodeMCU开发板作为主控,SYN6288语音合成的声控机器人方案,可实现远程的语音声控,解决远距离情况下的语音控制效果不理想问题。利用百度语音识别,减少自己训练语音模型库的麻烦,提高识别的准确度,降低了开发门槛,对于一些方言也可识别出来,完成声控。该方案成本低,可用于轻量级的机器人,NodeMCU可搭配其他单片机完成更复杂的机器人控制。测试结果表明,语音识别的准确率达到95%以上,声控的实时性、稳定性达到预期效果,声控效果优良,合成语音流畅。
基金项目
基于人工智能的交互式智能云音箱研发与产业化,广西创新驱动发展专项,广西科技重大专项,项目编号:桂科AA21077007。
NOTES
*第一作者。
#通讯作者。