《电子技术应用》

基于Kinect的家庭助理机器人系统设计与实现

2017年电子技术应用第3期 作者:党宏社,侯金良,张 超
2017/3/28 13:02:00

党宏社,侯金良,张  超

(陕西科技大学 电气与信息工程学院,陕西 西安710021)


    摘  要: 为了使独自在家的小孩、行动不便的老人和病人得到更好的照顾,设计了基于Kinect的家庭助理机器人系统。系统采用单服务器多客户端模型,Kinect和智能手机作为客户端连接到服务器。设计制作了助理机器人,其头部为网络摄像头,臂部为舵机结构,腿部为轮式结构。提出了基于Kinect的改进动作识别算法,实现了机器人的体感控制,可帮助老人和病人抓取物体。设计了手机APP,在外的家人可远程监视室内情况,与家中的老人和病人进行视频通话。

    关键词: Kinect;机器人;动作识别算法;APP

    中图分类号: TP242.6

    文献标识码: A

    DOI:10.16157/j.issn.0258-7998.2017.03.017


    中文引用格式: 党宏社,侯金良,张超. 基于Kinect的家庭助理机器人系统设计与实现[J].电子技术应用,2017,43(3):70-72,76.

    英文引用格式: Dang Hongshe,Hou Jinliang,Zhang Chao. Design and implementation of home assistant robot system based on Kinect[J].Application of Electronic Technique,2017,43(3):70-72,76.

0 引言

    老龄化社会提前到来,“空巢家庭”日趋增多,越来越多的老年人“照顾缺位”。子女在外上班,不能陪伴父母,一些身体虚弱、生活不能自理的老人不能得到很好的照顾。老人独自在家时若发生一些意外事故,因无法快速地发送求救信号,从而不能得到救助而造成严重后果。家人工作繁忙,一些生病或因残疾导致行动、生活不便的人,不能独自去拿水杯、药品等。家长出门孩子独自留在家中,孩子由于调皮贪玩会跑到阳台等危险区域,因无实时的监管导致意外。现代年轻人工作压力和生活压力加重,上班一族整天为工作奔波,常常会疏忽家里的琐事,忘记关灯、关空调等;家里出现煤气泄漏、水管漏水等危险情况,未能及时处理而导致事故的发生;家里有盗贼进入时,不能及时报警而导致贵重财物被盗。

    为了解决上述问题,设计了基于Kinect的家庭助理机器人系统。可通过Kinect体感控制机器人移动到指定地点并抓取物体,也可用手机APP远程控制机器人,实时地监视室内情况。

1 系统硬件设计

    系统采用基于Java的单服务器多客户端模型,Kinect和智能手机分别作为客户端连接到运行在PC上的服务器[1]。Kinect通过USB连接到电脑,利用串口通信将采集到的数据实时发送到服务器。智能手机通过WiFi连接到服务器,手机APP将控制信号发送到服务器。服务器对客户端发来的数据进行实时采集、解析,并将控制信号发送给机器人。系统整体结构如图1所示。

ck1-t1.gif

    机器人硬件组成如图2所示。机器人头部为网络摄像头IP Camera,主要功能有:远程视频监视、远程视频通话、智能报警。机器人臂部为数字舵机结构,共8个自由度,机械臂末端为夹爪结构。机械臂可模拟人的双臂运动,可通过夹爪来抓取物体。机器人的腿部为轮式结构,使其在室内更快捷、灵活地移动。

ck1-t2.gif

    机器人的主控芯片采用树莓派,树莓派(Raspberry Pi)是只有信用卡大小的卡片式电脑。它配备一枚1.24 GHz的4核ARM架构Cortex-A53处理器,SD卡作为储存媒体,主板周围有4个USB接口和一个网口[2],利用USB接口可直接与Arduino相连。树莓派内置无线WiFi模块,可与服务器进行无线通信。树莓派PWM输出能力有限,利用2片Arduino共同产生8路PWM控制机械臂的8个舵机[3]。Arduino是一款便捷灵活、方便上手的开源电子原型平台,它搭载Atmel ATmega328处理器,有14路数字输入输出端口。一片Arduino可同时产生6路PWM信号,并且Arduino开发软件提供标准的串口通信协议,可直接与树莓派通信。树莓派通过USB与Arduino相连,通过串口通信将每个舵机控制信号发给Arduino。数字舵机根据PWM信号转动,实现0°~180°的精确控制。此外,机器人上装有烟雾和温湿度传感器,可实时监测家中环境,发生煤气泄漏或火灾时可自动报警。

    Kinect通过USB与服务器相连,完成人体骨骼数据的采集。采用Kinect for Windows,其工作原理是通过传感器上一个可见光RGB摄像头和2个红外摄像头,使传感器能够采集彩色影像和3D深度图像[4]。采集图像时,Kinect传感器通过红外激光点阵反馈图像信息到2个红外摄像头中,对操作者的X、Y、Z坐标进行3D扫描定位。此外,通过可见光RGB摄像头捕捉VGA级别的图像[5],可进行人物的身份识别。Kinect数据通过USB线缆传输到PC上,PC上的Kinect数据采集库对传感器传输而来的3种不同的数据资料进行串联,将彩色图像和3D深度图像融合成为一个数据流,最后将数据流输出[6]。本次设计利用数据流中的20个关键点的三维坐标,对人体动作进行识别。

2 系统软件设计

2.1 Kinect动作识别算法

    基于轮廓和特征匹配的目标跟踪算法,例如文献[7]中的人体动作识别算法,虽然准确性良好,但其算法过于复杂,模板匹配运算量太大,需要大量设备进行并行处理,需要比较高端的处理器。基于滤波预测跟踪算法,例如文献[8]中提出的利用卡尔曼滤波算法实现人体动作识别,虽然消除了数据抖动,但其算法的鲁棒性不好,对光照、背景变化太敏感。本文提出了一种改进的Kinect动作识别算法,将人体关节分上、下半身来处理,既保证了手臂控制机器人的实时性,又保证了双腿控制机器人的准确性。

2.1.1 坐标获取

    Kinect是微软公司于2011年推出的一款体感外设,主要由红外发射器、RGB摄像头、红外深度摄像头组成。它具有实时的全身骨骼跟踪、运动捕捉以及麦克风输入的功能,并能够识别一系列人体动作[9]。本文算法利用Kinect骨骼追踪技术获取操作者20个关键点的三维坐标,并能对这些点的位置进行实时追踪。图3为人体关键点的示意图。

ck1-t3.gif

    由于直接获取的坐标为深度图像坐标,所以将其换算为实际坐标。(ximage,yimage,zimage)到(xworld,yworld,zworld)的变换公式[10]

ck1-gs1.gif

2.1.2 特征提取

    在Kinect不标定的情况下识别人体动作,且操作者所在位置可能随时会发生变化,因此算法对鲁棒性要求很高。本文算法提取的特征是骨骼关键点坐标的相对位置,即提取关键点坐标向量所成的角度特征。Kinect每秒钟获取30帧图像[11],即关键点的坐标每秒刷新30次,再加上人体的抖动,采集到的关键点坐标会有波动。采用加权递推平均滤波方法对坐标进行滤波。把连续N个采样值看成一个队列,队列的长度固定为N,每次采样到新的数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。然后针对不同时刻采用不同的权值,最后把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。公式如下:

ck1-gs2-4.gif

    角度θij就是当前人体肘部的角度特征。以此类推,可求出人体所有关节的角度特征。提取的角度特征是一个相对的特征且鲁棒性好,只与关键点相对位置有关,与光照、背景、操作者以及操作者的位置都无关。

2.1.3 特征匹配

    机器人的机械臂是由操作者的双臂体感控制的,而所提取的角度特征恰好是每个关节点的相对角度,所以可直接将角度特征输出控制舵机的转动。对于下半身,则要通过特征匹配的方法更加准确地识别操作者的动作。由于Kinect采用Processing进行开发,用Java语言编程,所以将计算好的动作模板保存到TXT文本中。本设计中下半身需要识别的动作包括:前进一档、前进二档、前进三档、后退一档、后退二档、后退三档、停止、机器人夹爪的张开与闭合。将下半身骨骼数据的角度特征与动作模板角度特征进行比较,可得到匹配的百分比,从而实现人体动作的识别。

2.2 机器人软件编程

    机器人的软件部分主要完成的任务为:接收服务器发来的控制信号并根据信号控制舵机和电机。机器人的控制芯片为树莓派,树莓派的操作系统是开源的Linux系统,采用Python语言进行编程。首先利用Socket无线通信把树莓派作为客户端连接到服务器,开启客户端并将其连接到服务器的IP地址和端口号,接收服务器数据。然后根据通信协议解析数据,最后利用Firmata协议将控制舵机和电机数据发给Arduino。Arduino根据接收到的数据,控制对应引脚产生不同占空比的PWM信号来控制舵机和电机的转动。树莓派接收烟雾传感器和温湿度传感器的反馈值,与设定阈值比较决定是否报警。

    本设计利用安卓开发了手机APP[12],可使在外的家人通过机器人实时查看家中情况,及时发现家中紧急情况。图4为手机APP界面,点击连接按钮,手机APP会自动登录服务器。左边是实时视频监控界面,可实现360°旋转监视、拍照、录像等功能,还可通过对讲功能与家里的老人和病人进行视频通话;右边是机器人控制界面,通过前后、左右按钮控制机器人的运动,从而实现了与传统固定摄像头监视不同的室内移动视频监视功能。

ck1-t4.gif

3 功能实现

    Processing程序对Kinect深度数据进行采集,利用上文动作识别算法对数据进行处理,把控制信号传给机器人。操作者可以用双臂体感控制机械臂,并且实时性很好;可以用腿部的前后移动体感控制机器人的前后移动,并且可以调速;可以利用双腿的分开程度控制机械夹爪的开合。实验表明,本算法的动作识别准确率较高,而且光照、背景、操作者和操作者位置的变化对算法影响较小。测试结果如图5和图6所示。系统可实现机器人的体感控制,帮助家里的老人和病人抓取物品。

ck1-t5.gif

ck1-t6.gif

4 结束语

    设计制作了基于Kinect的家庭助理机器人系统,可通过机器人的体感控制帮助在家无人照顾的老人和病人抓取物体。在外的家人可通过手机App远程监视室内情况并可视频通话,使老人和病人得到更好的照顾。通过实验测试,该系统工作正常,可实现以上各项功能。

参考文献

[1] 马响.基于Java语言在Web开发的知识探讨[J].信息技术与信息化,2015,13(15):169-171.

[2] 苏祥林,陈文艺,闫洒洒.基于树莓派的物联网开放平台[J].电子科技,2015,28(9):35-37.

[3] 崔阳,张维华.一种基于Arduino的智能家居控制系统[J].计算机技术与应用,2014,40(4):123-125.

[4] PANSARE J R,BANSAL M.A system to recognize dynamic hand gestures using hidden markov model to control windows applications[J].International Journal of Computer Applications,2013,62(15):169-171.

[5] SU C J,CHIANG C Y.Kinect-enabled home-based rehabilitation system using dynamic time warping and fuzzy logic[J].Applied Soft Computing,2014(22):652-666.

[6] FABRIZIO P,SERGIO B.An open source framework for hand pose and gesture recognition using kinect[J].Visual Computer,2014(30):1107-1122.

[7] 朱国刚,曹林.基于Kinect传感器骨骼信息的人体动作识别[J].计算机仿真,2014,31(12):329-333.

[8] 王梅,卢熙昌.基于人体动作识别的服务机器人手臂运动控制[J].工业控制计算机,2015,28(9):59-62.

[9] 战荫伟,于芝枝.基于Kinect角度测量的姿势识别算法[J].传感器与微系统,2014,33(7):129-132.

[10] 陈翰雄,黄雅云,刘宇,等.基于Kinect的空中手势跟踪识别的研究与实现[J].电视技术,2015,39(21):91-94.

[11] 蔡菁,程雷,王红霞.基于Kinect的疲劳驾驶综合监测系统研究[J].计算机工程与科学,2015,37(12):2380-2385.

[12] 薛亮,张继飞.基于IOS的智能家居安防系统移动端设计[J].计算机技术与自动化,2016,35(2):89-92.

继续阅读>>