基于Kinect体感识别的自衡车交互系统
2019-08-15李佳怡刘东旭
李佳怡,刘东旭
(吉林化工学院 信息与控制工程学院,吉林 吉林 132000)
0 引 言
随着科技的不断发展,人机交互技术逐步由传统的键盘鼠标的接触式控制转向基于动作识别的体感交互模式[1-2]。而动作识别的研究意义则在于能够使计算机直接“看懂”人做的各种动作,即可以识别出人的肢体动作语言,并按预定规则转换成控制指令,从而控制对象[3]。这种新模式的代表设备就是Kinect 3D体感摄影头。Kinect 3D体感摄像头是美国微软公司的一款体感外设,利用软件可以调节摄像头的上下角度,通过身体动作或者语音就能够直接完成操作,使其具有更好的视场[4-5]。
利用Kinect 3D摄像头作为主要传感器,计算机通过采集的数据分析骨骼图像本身,判断包含的信息,由此获取人体姿态信息[6]。传统的体感识别方法有基于嵌入式传感器和基于计算机视觉的两种方法。前者优点是响应速度快、精度高,缺点是需要用户佩戴特定装置,行动受限;而基于计算机视觉的方法,用户不需要佩戴任何东西,而用专用的深度摄像头则可以直接得到深度图像,使用范围更加广泛、方便[7-9]。
本文基于Prime Sense公司的新型景深成像原理以及通过深度图像区域特征值和随机森林算法获得骨骼坐标信息,并使用微软Kinect和Visual Studio 2012 Kinect SDK平台进行识别骨骼,设计完成人体上身动作姿势库[10],并将身体动作与控制命令相结合,使用蓝牙通信完成对下位机自衡车的控制。将体感识别与自衡车结合的交互系统对机器人在复杂环境中导航定位、科学勘探等工作领域有着重要意义[11-12]。
1 系统整体设计
系统的图像采集模块选用Microsoft Kinect体感摄像头;被控对象为两轮自衡车;PC机与自平衡车之间以蓝牙方式进行通信,两者将IP设置在同一段建立TCP连接,完成数据包的双向传输。系统总体框图如图1所示。
图1 系统总体框图
开发平台为Visual Studio 2012 Kinect SDK,在该版本中可选择C++或者C#作为开发语言对Kinect获取深度图像及骨骼模型数据进行算法识别,识别出的肢体动作与所设置的动作库进行比较,自衡车执行对应控制命令。
2 系统软件设计
2.1 体感识别
体感(人体姿态)识别主要通过Kinect 摄像头获取深度图像,Kinect有3个镜头,中间的是RGB摄像头,采集彩色图像;左右两边的摄像头分别是红外射线发射器和红外CMOS摄像头,红外射线发射器发出红外光覆盖整个待测区域。红外CMOS摄像头接收发射光线得到景深图像,识别出人体骨骼关节点,并提取骨骼关节点的空间坐标[13-14],通过空间向量计算关节点之间的距离与角度,将计算结果与预先定义的人体姿态库进行比对,并将人体姿态动作转换为控制命令,通过蓝牙传输模块与自衡车建立连接,完成数据的交换,从而实现人体姿态的识别[15],人体姿态识别流程图如图2所示。
2.2 空间向量法计算关节角度
人体的姿态结构单元为人体的关节,每个关节活动时都有不同的方向和角度,判断人体姿态信息需要获取关节点的位置信息,计算各关节活动的角度。Kinect使用的空间坐标系的x、y轴的零点与传统空间坐标系相同,z轴的坐标零点为Kinect摄像头,正方向为Kinect指向的正方向。坐标系下P1(x1,y1,z1)和P2(x2,y2,z2)是两个不同坐标点,组成的向量为
图2 人体姿态识别流程图
P1P2=(x2-x1,y2-y1,z2-z1)
(1)
若第3点P3(x3,y3,z3)不在P1P2所在直线上,则P1P2P3所组成的夹角可表示为
(2)
因此,可将所获取关节点的角度计算转化为向量夹角的计算。人体骨骼关节图像如图3所示,由于左上肢与右上肢关节角度计算相同,以左侧为例计算左上肢各关节角度。
图3 人体骨骼关节图像
2.2.1 手部握拳、张合与V字手动作
由于Kinect摄像头只能采集到骨骼信息,无法精确到手指状态,因此对手部的握拳与张合状态通过计算指间D到掌根节点的C距离;而V字手的判断则通过计算∠ECD,计算公式为
|CD|=
(3)
(4)
2.2.2 手臂平伸与直角上伸动作
手臂平伸与手臂直角上伸的判断可计算左肘关节角度,构造左手肘关节点的空间夹角两边所在的一组向量,左肘关节角度计算公式为
(5)
2.2.3 肘部绕上臂旋转角度
左肘关节绕上臂旋转时所产生的角度,可看作两个相交平面FAB与ABC的夹角,即图中平面S1与S2的夹角。两个非共线向量所在平面的法向量为
(6)
所以,计算平面FAB的法向量为
(AFyABz-AFzABy)i-(AFxABz-AFzABx)j+
(AFxABy-AFyABx)k
(7)
计算平面ABC的法向量为
(BAyBCz-BAzBCy)i-(BAxBCz-BAzBCx)j+
(BAxBCy-BAyBCx)k
(8)
因此,左肘关节旋转角度可表示为
(9)
2.2.4 肩关节角度
肩关节的角度为上臂与双肩所在直线组成的平面和双肩所在直线与脊柱所组成的平面之间的夹角,图中可看作平面FAB与GFA的夹角,即图中平面S1与S3的夹角。计算平面FAB的法向量为
(AFyABz-AFzABy)i-(AFxABz-AFzABx)j+
(AFxABy-AFyABx)k
(10)
计算平面GFA的法向量为
(FAyFGz-FAzFGy)i-(FAxFGz-FAzFGx)j+
(FAxFGy-FAyFGx)k
(11)
因此,肩关节角度计算公式为
(12)
3 系统调试
3.1 自衡车静态调试
自衡车控制系统主要由单片机(MCU)模块、姿态传感器模块、编码器、电机驱动模块、稳压模块、显示模块及蓝牙模块组成。自衡车通过姿态传感器监控车体俯仰角和其角度的变化率,利用微控制器(MCU)得出数据和指令,控制电动机产生不同的扭转力来实现车体平衡。采用MPU6050六轴传感器采集角速度和角加速度,利用卡尔曼滤波法融合陀螺仪和加速度计的数据,补偿陀螺仪的累计误差和加速度计的动态误差,使姿态近似值得到优化。最终应用PID控制算法,利用脉冲宽度调制技术调节电动机的转矩,使车体自衡并能够直立行走。
3.2 人体姿态匹配与系统联调
人体的身体姿态可以表达很多的含义,从构成部件来看,可分为头部、四肢和躯干;从运动上来看,可分为特定动作和整体位移。为了实现对自衡车的控制,需要对人体姿态进行合理的规划和定义。基于体感识别控制自衡车其实是将日常人体习惯动作进行简化、定义,使自衡车能够“看懂”用户的身体动作的含义,进而对用户的动作做出相应的反应。动作的定义应该符合明确性、习惯性与易操作性的原则。根据设计要求,对5种姿态进行了定义,可控制车体实现前进、后退、停止、左转、右转的动作,动作定义与识别结果统计如表1所示。其中,双臂上伸、V字手控制小车后退,后退动作人体姿态获取如图4所示。
图4 后退动作人体姿态获取
表1 动作定义与识别结果统计
系统联机后,分别对不同人员进行动作识别测试,体感识别结果满足人机交互控制要求。其中,人体向右打舵动作控制自衡车实现右转,右转姿态获取及自衡车动作图如图5所示。
图5 右转姿态获取及自衡车动作图
4 结 语
本研究设计了一款基于体感识别的自衡车交互控制系统,使用微软Kinect摄像头和Visual Studio 2012 Kinect平台来实现。由于Kinect摄像头采集到的图像是人体的骨骼图像信息,动作识别的结果不受人体外形的影响,因此,实验过程邀请了不同性别,不同高矮胖瘦的人员进行测试,动作识别的结果良好。研究结果表明:在有效识别距离为1~5 m范围内,动作正确识别率高达96%以上,具有较高的识别成功率,能够正确地控制自衡车实现前进、后退、停止、左转及右转的相应动作。所以,基于Kinect摄像头进行体感识别可以有效的完成对自衡车的控制,具有良好的可操控性。能够满足复杂环境的人机交互控制的需求,对无人环境下机器人进行勘探、科考以及救援都有着实际意义。