2019年华北五省(市、自治区)大学生机器人大赛:人工智能与机器人创意设计赛论文集
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3 情感机器人系统实现(Realizationofemotional robotsystem)

本节从硬件、软件的设计与实现和虚拟机器人的实现三个部分进行介绍。

3.1 硬件的设计与实现

硬件部分主要由尾部舵机驱动模块、控制器、应变片检测模块、M3 语音播放模块、电源模块、语音识别模块六部分构成,如图6所示。控制器采用stm32F103ZET6作为主控芯片[12];应变片选用BF350-3AA应变计高精度电阻式应变片,该应变片的尺寸较小、重量较轻,可方便地安装在情感机器人的上表面,应变片中的金属箔丝灵敏度高,应变片弯曲时,箔丝同时弯曲伸长,从而使电阻发生变化。高精度电阻式应变片与传感器模块的连接如图 6 中的应变片检测模块所示,传感器模块可以将电阻的阻值转换成电压模拟量,输出模拟电压 0~5V,应变片弯曲程度越大输出电压越高,传感器带有调零电位器,可以用电位器调节输出起始电压。

尾部结构选用了一种非常适合机器人的数字舵机,RDS3115双轴数字舵机,用stm32定时器制造PWM波,通过调整PWM波的占空比来调节RDS3115双轴数字舵机的旋转角度。

图6 系统硬件模块设计
Fig.6 Design of system hardware module

语音模块主要用的是LD3320 芯片[16],它的主要功能是可以进行非特定人声识别,即只要把关键词语提前设定好,就可以进行语音识别,不需要再进行任何训练。LD3320芯片的优势在于不用再接flash或者RAM,因为它有精度很高的A/D和D/A接口,这在降低系统成本的同时也使应用更加方便。选择一个简单的控制芯片就可以实现语音识别,本设计选用的语音识别模块集成了一个51芯片。

如图6所示发声模块由 M3语音播放模块构成,它有九个触发端口,每给一个端口低电平就会播放一首对应的歌,并且一首歌放完后再触发才会有效果。

系统用两块锂电池和调压降压稳压电源模块完成对数字舵机、stm32芯片、发声模块、语音识别模块的供电,形成独立供电系统。

3.2 软件的设计与实现

3.2.1 参数采集

参数提取采用实时信号采集的方法。当传感器有信号输入变化时,记录下传感器阵列中各传感器的触发顺序、时间间隔及触发强度,并限定一次信号采集的总时长,避免陷入信号采集的死循环,达到及时做出反应、给用户以反馈的效果。利用 stm32F103ZET6嵌入式芯片采集13个电阻式应变片传感器的电压信号。芯片采集电压信号时,会将电阻式应变片传感器输出的 0~3.3V 电压转化为0~4096的数字量,并保存在一个1×13的一维数组中,一维数组每个位置上存的数字量固定表示一个对应位置上电阻式应变片传感器输出的电压。

考虑应变片在受力后,电阻参数存在轻微波动,每次下载程序时都会将数字量存到一个数组里,并将其作为初始值,通过反复多次实验,记录每个传感器的灵敏度,即数字量变化多少可以判定为被抚摸,还要记录每个传感器感知不同力时的数字量。还要给每个传感器设置一个flag,当检测被抚摸后开始增加,只有当全部flag 都不再变化时,才视为一次动作的结束。通过这种方法,可以记录被抚摸的传感器的位置及抚摸时间。

3.2.2 动作情感分析

根据问卷的调查,统计出用户对情感机器人可能做的动作,由于机器人的外观更像抱枕,动作模块根据用户使用习惯分为睡觉、拥抱、抚摸三个动作。

睡觉动作的识别把传感器分为两部分,即外圈的 1、2、3、6、9、11、12、13 八个传感器,内圈的4、5、7、8、10五个传感器见图4。当用户趴在机器人上睡觉时胳膊会不自觉地搭在机器人上表面的两侧,脸部会自然地贴在机器人上表面的中央,所以外圈的八个传感器主要靠胳膊的压力来感应,内圈的五个传感器主要靠头部的重力来感受。外圈的传感器分为两部分,即1、2、3和11、12、13,考虑不同人的睡觉姿势略有差异,所以这两部分传感器检测到两个或者两个以上压力就可以识别用户动作,内圈的检测到4压力就可以识别用户动作。识别睡觉动作主要在于时间,当上述动作达到 10s 以上时,传感器的flag 还在持续增加,就可以判定为睡觉。

拥抱动作主要由传感器4、5、6、7、8、9、10感应,当用户拥抱机器人时,机器人一般为尾巴朝下。用户用双臂抱住机器人的两侧,自然会压到传感器6、7、8、9,机器人表面充置了棉花,中央略微凸起,拥抱时会压到中央传感器4。经过反复实验测定,拥抱时间在7~10s,并且每个传感器的flag增加的时间相同,这是拥抱与抚摸的主要区别。抚摸作为用户的主要动作,其方式多种多样,速度、方向、力度范围和路径等也不相同。传感器感受到被触摸,并且不属于睡觉和拥抱就可以判定为抚摸动作。

不同情绪的用户抚摸情感机器人的方式会有所不同,如情绪低落的人抚摸得会相对慢一些,感情强度比较大的人抚摸得会重一些,我们采用BP神经网络来发现这种映射关系。因为stm32F103ZET6嵌入式芯片的晶振频率为72Mb,运算能力较低,可以满足在嵌入式芯片上用神经网络做实时情感分析,但是在嵌入式芯片上进行神经网络训练的计算速度会十分缓慢。解决思路是将嵌入式芯片收集的训练数据传给计算机,在计算机上进行神经网络的训练,得到各层神经网络的参数。我们将参数应用于嵌入式芯片上的神经网络,从而实现在嵌入式芯片上进行情感的实时分析,情感分析网络的形成步骤如表 1所示。

表1 情感分析网络的形成步骤
Tab.1 The formation steps of emotionalanalysis network

3.2.3 尾部驱动

本文采用 PWM 波来控制舵机运动, stm32芯片除了基本定时器,其他的都可以用来产生 PWM 波输出,最多可以产生 30 路PWM 波输出,它可以同时驱动多个电机。stm32芯片的PWM输出软件设计步骤为:初始化定时器对应的 GPIO,开启定时器时钟,内部时钟CK_INT=72Mb;设置分频数为720,经计算频率为100000Hz,设置计数器为5000个,则以100000Hz的频率记5000个数为一个 PWM 波周期,采用向上计数的模式,然后初始化定时器,并且使能计数器。

3.2.4 语音识别

语音识别通过LD3320 芯片实现[16],其实现流程如图 7 所示,其执行程序在原有程序的命令部分进行修改和补充即可。在LDChip.c文件的uint8 LD_AsrAddFixed函数中定义一个二维数组 sRecog[DATE_A] [DATE_B] ,用来存放关键词的拼音,如“xiaofeng”“changge”“yaoweiba”“bukaixin”。其中,“xiaofeng”是一级口令,“changge”“yaoweiba”“bukaixin”是二级口令,只有当麦克风识别到一级口令时,二级口令才会被识别,具体口令和反馈如表2所示。

图7 语音识别流程图
Fig.7 Speech recognition flow

表2 语音识别口令和反馈
Tab.2 Speech recognition password and feedback

3.3 虚拟机器人的实现

虚拟机器人与实物机器人可以实现随动功能,虚拟机器人的尾部摇摆状态可以与实物机器人实时同角度转动。实现方法是通过串口通信将实物机器人尾部的运动状态参数实时发送给上位机,上位机根据发来的参数和机器人3D图形展示尾部的摇摆状态,效果如图8所示。

图8 虚拟机器人效果图
Fig.8 Virtual robot rendering