基于NAO平台的自闭症儿童陪护机器人设计与实现
2020-12-10汪家豪李元金赵根源
王 杨,汪家豪,李元金,杨 斌,赵根源
(滁州学院 计算机与信息工程学院,安徽 滁州 239000)
全球现有自闭症患者6700万人,儿童占40%[1]。据中国卫生产业相关文献可知,优质的护理服务可以让自闭症儿童焦虑抑郁状态减轻,舒适度及安全感提高,从而缩短康复时间。但由于我国经验丰富的治疗师人数缺乏,导致治疗师长时间劳累工作、儿童康复周期较长[2]。如何减轻治疗师的压力同时又能给自闭症儿童营造愉悦的治疗环境,进而增强治疗效果是亟待解决的问题[3]。
基于此问题,本文借助NAO平台设计出一款自闭症儿童陪护机器人,能将人工智能技术有效融入医疗工作中。该自闭症儿童陪护机器人是使用大数据技术将编写语言到数据库,应用到机器人内部,也是未来陪护型机器人的发展方向之一[4-6]。这种陪护机器人拥有智能语音聊天和娱乐两大重要功能,其能够识别某一固定特征目标,与机器人的陪护运动控制系统以及后端数据库相结合,在一定的条件下追踪该目标并与其沟通交流[7-10]。这种语音交互型机器人具备了一定的识别、感知、处理、决策和动作能力,能够智能地完成任务。
1 NAO机器人平台简介
NAO作为双足智能机器人,身高58公分,NAO本体配备有多款软、硬件模块,外形具备高度的拟人化特征[11-12]。NAO身上可运动的“人体”关节使得其拥有25个自由度,甚至其双手都具备抓握能力,动作灵活。另外机器人还搭配了多种传感器及其他硬件设备,例如超声波传感器、摄像头、扬声器等,集成度较高的硬件设备使得NAO机器人能够满足本次设计对机器人外形的需求,NAO机器人的外形设计图如图1所示。
NAO脚上的压力传感器用于判断它是否与地面接触。根据脚底接触改变内存的数值,脚部接触指令盒会决定输出信号。如果脚底没有保持跟地面接触的话,对应的保护程序会启动从而进一步保护机器人的安全。使用者将脚部接触指令盒输出信号作为NAO是否跌倒的依据之一。
图1 NAO机器人外形设计图
2 程序设计与场地分析
2.1 程序设计平台介绍
Choregraphe 基于图形的编程工具,实现对NAO的二次开发,以指令盒数据库为基础,通过连线的方式即可完成编程。操作过程中可以调整机器人的姿势、文件传输、编写指令盒及调节机器人音量等。
NAOqi是 NAO的编程结构,拥有并行、资源管理、同步和事件等功能,NAO功能模块之间能够互相交流,从而满足二次开发中的需求。在Pycharm中调用NAOqi库,之后在Pycharm里面编译机器人的代码,代码最后需要加上当前连接中机器人的IP地址以及端口号,方可正常向机器人发送指令运行,界面如图2所示。
图2 Pycharm编程开发图
2.2 实地场地分析
本文设计的陪护机器人工作场地以滁州市第二人民医院为案例:工作环境包含病房、医护站、看护室及走廊这四个主要场景,如图3所示。
总体需求为协助医护人员陪护患者的治疗过程,以减轻医护人员的负担及缓解患者病情为目标,因此自闭症儿童陪护型机器人的设计应用对象不仅是患者,也包含医护人员。于是,我们将二者的需求进行收集整理得到:
患者日常的休息位于病房,应当设计安排机器人看护患者的正常起居;
医护人员于医护站进行办公,机器人能够对日常工作进行提醒、协助医护人员为访客作导览及自身调整充电;
患者的部分治疗、饮食及闲余集中在看护室,机器人需要协助医护人员提醒患者按时吃饭吃药,通过语音交互安抚患者的情绪,通过舞蹈音乐等为患者带来乐趣;
走廊和看护室等需要医护人员实时工作,他们可以通过机器人视频监控观察,利用监测器远程实现近距离监护;
为了方便功能的实现以及管理维护,应规划并设计好陪护机器人的工作任务;机器人应具备区域性,合理规划主线任务、支线任务及处理特殊情况的功能。
图3 场地结构图
3 功能设计与实现
3.1 功能需求介绍
基于NAO平台的自闭症儿童陪护机器人是在简单对话基础上增加微表情识别功能,需要考虑以下几个问题:
机器人与自闭症儿童的交互与娱乐内容互动的情况。(智能交互)
机器人的微表情识别系统应能准确快速的识别出目标的情绪状态。(人脸识别)
在识别目标后,机器人能以一定的速度和距离对目标进行实时跟随。在对目标进行跟随运动时,若出现障碍物,应及时避障并重新规划路径,再次跟随目标。(智能规避障碍)
若目标无法取得所需物品,通过机器人将物品进行传递。(协助拿取物品)
机器人通过视频监控,观察注意力集中的持续时间和面部的瞬间性表情变化,传输到后台进行数据收集与分析。(视频监控)
整体模块流程图如图4所示。
图4 整体流程图
3.2 人脸识别模块
基于NAO平台的智能语音交互型机器人可以通过摄像头捕捉到被测者面部的瞬间性表情,利用图像处理技术从图片中提取到人像特征点,再利用生物统计学的原理进行分析并建立数学模型,将已建成的人脸特征模板与被测者的人的面像进行特征分析比对,根据分析的结果来确定识别每个人面部信息的身份。
除此之外,基于独立探索的微表情分析算法分析捕捉到的面部表情,了解被测者当前情绪,根据自闭症儿童面部肌肉的运动变化推断出病人现有的情绪,主动与被测者进行相应的语音的交互,运行更加适合该对象的功能,提供真正意义上的一对一服务,核心代码如下:
def load_database():
h5file = h5py.File('people_infor.h5' 'r')
for name in h5file.keys():
people_source[name] = h5file[name] if h5py != None: people_infor = os.path.split(image)
people_name = None
if len(people_infor) == 2: people_name=os.path.splitext(people_infor[1])[0]
else:
people_name=os.path.splitext(people_infor[0])[0] data_h5[people_name] = emb[0,:]
3.3 智能避障模块
智能避障模块是NAO机器人的关键技术之一。当用户给出行走指令后,机器人首先向前行进,当机器人胸前的声呐传感器探测到障碍物时,规划出无碰撞的有效路径,同时满足最短时间和最短路程的要求。
用声呐测距模块测出前方有无障碍物,若测出有障碍物则应当暂停自动导航并进入避障模块,利用云平台控制模块旋转声呐测距模块确定左右障碍物的距离,朝无障碍物方向进行转向,左右同时有障碍物时自动后退重新测距选定方向前行。确定左右及前方无障碍物时恢复自动导航,核心代码如下:
motionProxy = ALProxy(“ALMotion”, robotIP, PORT)
postureProxy = ALProxy(“ALRobotPosture”, robotIP, PORT)
motionProxy.wakeUp()
postureProxy.goToPosture(“StandInit”, 0.5) sonarProxy.subscribe(“myApplication”)
while 1:
left = memoryProxy.getData(“Device/SubDeviceList/USLeftSensor/Value”)
Right = memoryProxy.getData(“Device/SubDeviceList/US/Right/Sensor/Value”)
3.4 智能语音交互模块
NAO机器人本身自带的语音识别装置,识别精度不高,无法适用于嘈杂的环境。本团队调用百度API,通过使用百度大脑的UNIT语音定制平台创建专属技能,对机器人的对话算法进行优化,实现联网搜索问题答案、定制对话、联想问答等功能。修改系统内置语音模块,通过开源语音交互引擎实现机器人对中文的高识别精度,更改机器人音色,核心代码如下:
def use_cloud(file):
with open(file, “rb”) as f:
speech = base64.b64encode(f.read()).
decode('utf8') size = os.path.getsize(file) headers = { 'Content-Type' : 'application/json'} url = “https://vop.baidu.com/server_api”
definit(self):
GeneratedClass.init(self, False)
3.5 物品抓取模块
基于NAO平台的自闭症儿童陪护机器人可以协助拿取物品,解决了行动不便等问题。为了提高物体定位的准确度和抓取的成功率,采用Bumblebee2双目相机机构构建伺服控制系统。
当陪护机器人处于正常工作状态时,在接收到无线终端或触发下达物品抓取任务口令后,可以实现识别特定物品上的已知标志,从而判断该物体类别及合适的抓取动作并执行相应的支线任务。例如完成抓取药品任务后前往看护站或病房区域,协助医护人员利用视频监督患者按量服用药品。物品抓取流程,核心代码如下:
def userArmArticular2(motionProxy): Arm2 = [70.5,25.0,-63.5,-59.6,-39.3,1]
Arm2 = [x * motion.TO_RAD for x in Arm2] pFractionMaxSpeed=0.1 motionProxy.angleInterpolationWithSpeed(JointNames, Arm2, pFractionMaxSpeed) motionProxy.openHand('LHand') motionProxy.closeHand('LHand')
userArmArticular3(motionProxy) userArmArticular4(motionProxy)
3.6 视频监控模块
陪护机器人到达指定工作区域进行监护时,机器人预置的高清摄像头及视觉软件结合无尽行走模块,可为医护人员提供近距离的视频监控,医护人员无需走动通过终端即可对异常情况进行巡护观察。通过视频监控,观察注意力集中的持续时间和面部的瞬间性表情的变化,传输到后台进行数据收集与分析。当自闭症儿童出现异常时,触发视频功能观察当前片段或之前片段儿童的状态,及时了解问题并解决问题。
另外医护人员可自主调节视频分辨率及色彩等参数,也可决定是否拍照或录像保存到本地。视频监控流程,核心代码如下:
self._imgData=self._videoProxy.getImageRemote(self._imgClient) cv.SetData(self._img, self._imgData[6]) cv.ShowImage(“Camera_OpenCV”, self._img) except KeyboardInterrupt:
break
if cv.WaitKey(10) == 27:
break
cv.DestroyAllWindows()
self._unregisterImageClient()
4 测试
为判断当前陪护机器人功能实现的完整性及可靠性,我们将待测试的陪护机器人带入真实环境下进行测试。测试过程中机器人以区域划分,完成不同的工作任务,观察各个功能模块能否在真实的环境下正常运行。完整测试中进一步改进一些问题,例如语音交互误触发、行走存在偏差、标志识别误差等,用户体验良好,得到了使用者的一致好评,测试如图5所示。
图5 陪护机器人测试图
5 结束语
本文设计了一款面向自闭症儿童的陪护型机器人,主要作用是为了减轻医护人员的工作负担,以及促进患者病情的好转。设计遵循需求分析、功能设计、软硬件学习、程序开发及实景测试等流程,探索了机器人在协助医护人员看护自闭症儿童的可行性,是智能机器人在医疗领域的一次大胆尝试,最终实现了智能交互、人脸识别、娱乐互动及视频监控等功能模块。
本文首先针对医护人员及自闭症儿童的需求展开功能设计,结合医院实际环境将机器人依照区域划分各自的工作任务;最后对机器人功能依次展开了模拟场景下单独模块测试和实际环境下完整应用测试,智能避障模块的实现,是在平衡的移动状态下运用超声波传感器探测障碍物并绕走,失衡的状态下结合压力传感器、陀螺仪及跌倒和恢复管理器自我保护、自我站立;语音交互模块的实现,是通过麦克风或扬声器实现语音输入或输出,实现关键字匹配语音交互数据库后做出回应:行为动作或问答。视频监控模块的实现,是在陪护机器人到达指定工作区域进行监护时,机器人预置的高清摄像头及视觉软件结合无尽行走模块,可为医护人员提供近距离的视频监控,医护人员无需走动通过终端即可对异常情况进行巡护观察,但同时该陪护机器人对标识识别及物品抓取的精准度及成功率上仍需要进一步作优化。