陈金怡,罗圣钦,李洪均,2
(1.南通大学信息科学技术学院,南通 226019;2.南京大学计算机软件新技术国家重点实验室,南京 210093)
人机交互是实现人与机器人能力结合的一项关键技术[1]。现存的机械臂控制系统主要是通过专业人员输入操作指令来控制机械臂,这极大限制了其他非专业人员对机械臂的操作和使用。因为骨骼可以代表人体关键点的位置和结构,所以基于骨骼的动作识别是有效的[2]。因此建立一个体感交互式机械臂控制系统,让非专业人员可以通过自身的肢体动作控制机械臂,具有非常现实的意义。近年来国内外一些研究人员在体感交互方面展开了研究,利用机器视觉获得目标物体的三维坐标,由机械臂控制器根据坐标信息控制机械臂,其中用于获取目标物体三维信息的采集设备以微软开发的Kinect 最为普遍[3⁃7]。辛义忠等[8]通过将Kinect 采集的关节点数据转换成距离特征向量,并选用模板匹配的方法实现人体动作识别;文献[9]利用Kinect 采集到的骨骼数据实现人体动作姿势识别,在满足实时性的同时也提高了人体动作识别准确率;邵阳等[10]利用Kinect 采集骨骼关节点的三维坐标,用向量表示相邻坐标,以向量变化代替骨骼节点的运动变化,可评价6 种上肢动作;张志佳等[11]通过Kinect 采集深度信息,用于典型零部件识别。
基于Kinect 的体感交互系统离不开骨骼追踪功能[12⁃16]。如Zhu 等[17]用Kinect 收集人体骨骼数据,为动作识别提供了大量的信息,提出了基于骨骼的动作识别的长方体模型;胡星晨等[18]利用Kinect 的骨骼追踪功能获取人体主要关节点的坐标,然后计算出关节角,最后通过无线传输方式将关节角发送给机器人控制器,从而控制机器人做出和人相同的动作;Seifallahi 等[19]提出了一种利用Kinect 摄像头记录的骨架数据来检测阿尔茨海默病;Avola 等[20]利用Kinect 生成的数据集提出了一种基于二维骨架和双分支叠层循环神经网络的长短期记忆动作识别方法;周彤彤等[21]利用骨骼追踪技术捕捉到人体关节点的变化,运用空间向量法计算出人体关节转动角度,将转动角度转换成控制指令发送到机械臂控制器,实现控制机械臂的效果;Mokari 等[22]提出了一种新的动作识别方法,利用时域3D 骨骼Kinect 数据进行动作识别。通过Kinect 可快速获得骨骼节点坐标信息,但骨骼追踪技术往往会受到干扰,称为骨骼噪声,导致体感交互系统的识别精度不高。如林海波等[23]设计了基于Kinect 的人机交互系统,该系统通过Kinect 获得人体骨骼数据并计算骨骼节点的转动角度,然后将转动角度转换成控制指令传送给机械臂,尽管能够控制机械臂转动,但会出现无法识别转动角度的问题,识别率为94.1%。为了实现人机体感交互效果并提高识别精度,本文提出了基于限幅加权骨骼节点滤波的体感交互技术。在不同的时间节点采集并计算出关节转动角度,通过最优化问题求出各时间序列下转动角度所对应的权值,将权值加入到最终转动角度的计算当中,能有效减少骨骼噪声的影响。同时使最终的转动角度保持在稳定范围内,避免了“跳跃式”转动角度的存在,提高了体感交互系统的稳定性,识别率为96.3%。
Kinect 是一款可交互式传感器,包含多种摄像头和一个麦克风部件,如图l 所示。1 号摄像头是能够获取640×480 分辨率图像的RGB 彩色摄像头;2 号摄像头是通过从投射红外脉冲到反射回来所需要的时间来计算物体与传感器之间距离的3D 深度摄像头;3 号摄像头是红外摄像头,通过向粗糙物体上投射红外光谱,光谱扭曲后形成的反射斑点被摄像头读取;4 号麦克风部件可以辨别使用者语音方位,也可以采集使用者的语音数据。
Kinect 采用黑白光谱的方法检测周围场景,近景用浅色甚至白色表示,远景用深色表示,灰色图像的深浅代表了传感器距离物体的远近,传感器有效测量范围里的场景都被转换成一幅景深图像流,人体的骨骼信息正是在此基础上提取。在CMOS 红外传感器的帮助下,Kinect 传感器具有骨骼追踪能力[24],所捕捉的每一帧数据都是由20 个人体关节点构成的,如图2 所示。骨骼追踪的具体过程为:Kinect 红外发射器主动投射经调制的近红外光线,红外光线照到视野范围内的物体上会发生反射,红外相机接收反射回来的红外光线,采用时间片技术[25]测量深度,通过计算光线发射和反射时间差,算出被拍摄物体的景深距离,由此得出物体的深度数据并生成一幅景深图像流,然后由这些深度数据提取各个关节点,生成一幅骨架结构图像。图3 展示了普通彩色图像经过Kinect 处理后得到的骨骼信息图。
图2 人体骨架结构图Fig.2 Human skeleton structure diagram
图3 彩色图像与骨骼图像Fig.3 Color image and skeleton image
Kinect v1可以追踪人体20个骨骼点[26],而本系统使用的Kinect v2 可以追踪25 个骨骼点,但不同的操作者在采集人体骨骼节点信息过程中与Kinect 相对位置不同,再加上操作者的体型大小不一,骨骼节点对应的位置也会有偏差,如果直接计算会造成很大的误差,对后续的体感交互会造成影响,因此需要对采集到的三维骨骼数据进行中心化和归一化处理。通过观察发现,在操作者运动过程中人体肩中心节点和脊椎中心节点之间的相对位移最小,如图2 红色连线所示,故选取这两点之间的长度作为标准长度,对骨骼框架中所有节点之间的距离进行归一化处理,减少误差。
定义水平向右为x轴正方向,垂直向下为y轴正方向,面向镜头的为z轴正方向。根据对机械臂舵机控制的需求,选取图2 中的右肩、右肘、右腕以及右手4 个骨骼节点,建立三维坐标系,将4 个骨骼节点的信息映射到三维坐标系中,并定义右肩、右肘、右腕以及右手的坐标分别为(x1,y1,z1)、(x2,y2,z2)、(x3,y3,z3)和(x4,y4,z4),如图4 所示。
图4 三维空间下关节点坐标示意图Fig.4 Schematic diagram of joint point coordi⁃nates in three⁃dimensional space
2.2.1 肩关节的转动角度α
若要获得肩关节的转动角度,可以利用右肩和右肘这两个关节点的三维坐标(x,y,z)计算出来,这两个骨骼节点在空间中构成一条直线设为l1,转动角度α如图5 所示。因此空间直线l1的方程为
图5 转动角度α 示意图Fig.5 Schematic diagram of rotation angle α
由于肩关节和肘关节在同一直线上,当肩关节上下转动时z坐标保持不变,故只考虑xoy平面。此时式(1)可重述为
当肩关节前后运动时,y坐标保持不变,故只考虑xoz平面。此时式(1)可重述为
2.2.2 肘关节的转动角度β
要想获得肘关节的转动角度β,需要利用右肩、右肘、右腕这3 个关节点的三维坐标(x,y,z)。定义右肘与右腕这两个关节点构成的空间直线为l2,转动角度β为直线l1与直线l2的夹角,如图6 所示。因此空间直线l2的方程为
图6 转动角度β 示意图Fig.6 Schematic diagram of rotation angle β
由于肘关节和腕关节在同一直线上,当肘关节上下转动时z坐标保持不变,故只考虑xoy平面。此时式(6)可重述为
因此肘关节的转动角度β计算公式为
当肩关节前后运动时y坐标保持不变,故只考虑xoz平面。此时式(6)可重述为
因此肘关节的转动角度β计算公式为
2.2.3 腕关节的转动角度γ
腕关节的转动角度γ需要利用右肘、右腕、右手这3 个关节点的三维坐标(x,y,z),定义右腕和右手这两个关节点构成的空间直线为l3,转动角度γ为直线l2与直线l3的夹角,如图7 所示,因此空间直线l3的方程为
图7 转动角度γ 示意图Fig.7 Schematic diagram of rotation angle γ
由于腕关节和手关节在同一直线上,当腕关节上下转动时z坐标保持不变,故只考虑xoy平面。此时式(11)可重述为
因此肘关节的转动角度γ计算公式为
当肩关节前后运动时y坐标保持不变,故只考虑xoz平面。此时式(11)可重述为
因此肘关节的转动角度β计算公式为
式中:θi和wi(i=1,2,…,N)分别为第i个时间序列下的转动角度和转动角度所对应的权值。针对权值wi可通过式(17)的最优化问题求出各时间序列下转动角度所对应的权值。
步骤1将权值wi代入式(17)并通过式(18)进行判定。
如果式(18)成立,则停止迭代,否则进行下一步。
步骤2将式(17)对每个wi求偏导,并得到每个wi对应的梯度,如式(19)所示。
步骤3目标是使得不等式(18)成立,所以按梯度负方向来更新每个wi,如式(20)所示。
重复步骤1~3 至式(18)成立或m次迭代完成。
将得到的对应权值带入式(16)得到最终的关节点转动角度。通过对不同时间序列所对应的转动角度作加权处理可知,对于噪声引起的突然的奇异值,-θ不会有太大的改变,而奇异值对应的权值会降低奇异值的影响,使最终的转动角度θval保持在稳定范围内,从而在减少骨骼噪声影响的同时避免了“跳跃式”转动角度的干扰。
基于骨骼节点信息的体感交互式系统如图8 所示,该系统主要分为3 个部分:骨骼节点转动角度的采集与计算过程、控制信号的转换过程以及机械臂的控制过程。
图8 体感交互式系统示意图Fig.8 Schematic diagram of somatosensory interactive system
通过Kinect 获得右肩、右肘、右腕以及右手4 个骨骼节点坐标信息,之后按照2.2 节中转动角度计算方法求出肩、肘、腕3 个关节点的转动角度,并利用限幅加权滤波算法对转动角度滤波处理,减少骨骼噪声的影响。
在控制信息的转换过程中将转动角度转换成脉宽可调的方波信号,然后通过蓝牙串口将控制指令发送给K60 单片机,串口通信波特率设为115 200 bps,其中方波脉冲信号的周期为10 ms,频率100 Hz,其中PWM 控制字的命令格式为:第1 位起始位值为0;第2~9 位为数据位,每两位表示一个舵机角度;第10 位停止位值为1,如图9 所示。
图9 控制命令格式Fig.9 Format of control command
在机械臂的控制过程中,使用由6 个S3010 伺服舵机组装而成的机械臂[27],供电电压为6 V,输出扭矩为7.6 N·m,适用于那些需要角度不断变化并且可以保持的控制系统。K60 单片机采用中断查询的方式从串口中接收数据并控制六自由度机械臂的相应舵机转动,由PWM 信号的脉宽决定机械臂转动的角度,利用占空比的变化就可以控制舵机的转动角度。指定机械臂的3 号、4 号和5 号舵机分别代表手臂的腕关节、肘关节和肩关节,各舵机参数和所对应的功能如表1 所示。
表1 所示为各舵机所接收的脉冲宽度,其中最小值表示一个周期内高电平的最少持续时间,最大值表示一个周期内高电平的最多持续时间,单位为ms;另外表1 指定了机械臂各舵机所对应的手臂关节点以及对应的动作,通过控制3~5 号舵机可分别实现手臂的腕关节、肘关节、肩关节上下/前后转动。
表1 舵机参数及对应的动作Table 1 Steering gear parameters and correspond⁃ing actions
体感交互实现流程如下:
(1)Kinect 采集操作者手臂的右肩、右肘、右腕和右手4 个关节点三维坐标信息分别为(x1,y1,z1)、(x2,y2,z2)、(x3,y3,z3)和(x4,y4,z4);
(2)利用式(3,8,13)分别求出肩关节转动角度α、肘关节转动角度β和腕关节转动角度γ;
(3)将计算得到的各关节转动角度,采用2.3 节所述的限幅加权滤波算法进行滤波处理,根据式(18~20)的迭代算法求出wi,并利用式(16)求得最终的转动角度;
(4)将最终的转动角度转换成PWM 控制字的命令格式,通过蓝牙串口发送给K60 单片机;
(5)K60 采用中断查询方式接收控制指令,控制机械臂相应舵机,完成机械臂转动。
实验使用KinectV2 传感器、六自由度机械臂、K60、蓝牙串口等硬件设备,软件开发语言为C#,实验环境为Windows10+VS2015+Kinect for Windows SDK。为了验证本文体感交互式系统的有效性,并说明所提限幅加权滤波算法的去噪效果,做了以下两组实验。
本实验共有5 个人进行了测试,每人做了以下几组动作测试:肩关节上下转动;肩关节前后转动;肘关节上下转动;肘关节前后转动;腕关节上下转动;腕关节前后转动,如图10 所示。每个动作的转动角度又分为10°、20°、30°、40°四种情况进行测试,每种情况各测试25 次,即每人每个动作每个转动角度测试5 次,因此共计进行600次实验,实验结果如表2 所示。
图1 Kinect 示意图Fig.1 Schematic diagram of Kinect
表2 未加滤波算法的体感交互实验结果统计表Table 2 Statistical analysis of somatosensory interaction experiment results without filtering algorithm
图10 各关节动作示意图Fig.10 Schematic diagram of each joint movement
由表2 的统计数据可知,以肩关节转动测试为例,5 个测试者共做了200次肩关节转动测试,其中机械臂成功随手臂运动的次数为183 次,识别精度为91.5%,肘关节和腕关节转动测试的识别精度分别为91%和85%。通过对比发现,肩关节转动测试的识别精度高于肘关节转动测试的识别精度,而腕关节转动测试的识别精度较肩关节和肘关节都低。一方面因为肩关节的转动角度α由肩、肘两关节的连线l1与垂线的夹角所确定,肩肘两点之间的距离较长,可识别度较高,同理肘关节的转动角度β是由肩、肘两关节的连线l1与肘、腕两关节的连线l2的夹角所确定,肩肘之间与肘腕之间的距离较长,而腕、手两关节之间的连线l3距离短,可识别度相对较低;另一方面Kinect在采集骨骼节点信息时会受到骨骼噪声的影响,由3 个关节转动测试的识别精度可以发现,骨骼噪声对腕关节的影响最大。另外通过对比不同角度下各关节转动测试的失败情况容易发现,测试失败主要集中在10°这种小角度情况,而在30°和40°这些较大角度情况下失败次数较少,主要因为当手臂各关节转动角度较小时,动作幅度不大,不利于Kinect追踪人体骨骼节点,在采集骨骼节点信息时会受到骨骼噪声干扰,从而影响了机械臂随动。
针对骨骼噪声的影响问题,本文提出了限幅加权滤波算法处理所采集并计算得到的转动角度,并在体感交互式控制系统中加入了限幅加权滤波处理环节。为了验证所提出的限幅加权滤波算法能够有效减少骨骼噪声的影响,在相同实验条件和测试环境下又做一组实验,实验结果如表3 所示。
表3 带有滤波算法的体感交互实验结果统计表Table 3 Statistical analysis of somatosensory interaction experiment results with filtering algorithm
通过对比表3 中肩关节、肘关节以及腕关节3 个转动角度测试结果,同样可以发现肩关节的转动测试识别精度高于肘关节转动测试识别精度,而腕关节转动测试识别精度较肩关节和肘关节都低。由表3 的统计结果可知,各关节转动测试失败次数最多的依然是测试角度为10°这样的小角度,而测试角度为30°和40°时,各关节转动测试的成功次数最多。通过对比表2、3 不同关节转动的识别率可知,表2 中3 个关节转动的识别率分别为91.5%、91%、85%,而表3 中3 个关节转动角度的识别率分别为97.5%、97%、94.5%,说明限幅加权滤波算法能够有效减少Kinect 采集各个关节点时的噪声影响;另外通过对比表2、3 不同转动角度的识别率可知,表2 中10°、20°、30°、40°情况下识别率分别为70.7%、91.3%、96%、98.7%,而表3 中10°、20°、30°、40°情况下识别率分别为91.3%、96.7%、98%、99.3%。一方面可以说明当关节转动角度大时,骨骼噪声影响较小,而对于10°这样的小角度,最易受到骨骼噪声影响,另一方面说明限幅加权滤波算法能有效减少小角度下的骨骼噪声,提高小角度下的识别率。所提出的限幅加权滤波算法能够有效减少骨骼噪声影响的原因在于对不同时间序列所对应的转动角度加权处理,使转动角度保持在稳定范围内,不仅有效减少了骨骼噪声的影响,而且避免了“跳跃式”转动角度的干扰,从而能够提高体感交互式系统的识别精度。
本文利用Kinect 骨骼追踪技术,采集人体的骨骼节点信息并采用空间向量映射方法计算出各关节点的转动角度;提出了限幅加权滤波算法,各关节转动角度进行滤波处理,有效减少了骨骼噪声的影响;然后将转动角度转化为对应的控制指令,K60 单片机采用中断查询方式接收控制指令,控制机械臂的3 号、4 号以及5 号舵机,分别实现了对应的腕关节、肘关节以及肩关节上下/前后转动。下一步将建立一个操控人体多关节的体感交互式系统,并进一步提高识别精度。