开发背景:机器人能够感知人体行为,使其不再局限于工业、军事等领域,慢慢贴近人们的生活。在人类未来30年的工作和生活中必然扮演着重要的角色。
结构及功能:本项目是在Linux操作系统中,基于Kinect体感技术,将骨骼追踪算法应用于人体姿态识别,并控制人形机器人实时模仿人体动作,实现一种新的自然人机交互模式。
基于体感识别的人形机器人设计的主要流程为:人站在Kinect视距范围内做“投降姿势”,由OpenNI程序库驱动Kinect进行姿势校正,校正完成后,运行在EPCM-505C核心控制器上的识别程序,驱动Kinect进行数据采集,并实时绘制出人体骨骼框架。识别程序主要的功能是识别人体各关节,并通过滤波、空间向量运算、腿部姿态检测,计算出控制机器人所需的信息。通过无线模块进行控制命令传输,数据通信协议采用自行封装的格式,并在机器人控制器端提供简单的完整性校验。机器人控制器根据接收到的数据,采用复用PWM周期的方式,完成一个PWM周期对多路舵机的调速工作,保证了机器人动作的连贯性。(注:对舵机的控制,本文采用的是软件延时的方式予以完成,因为经过反汇编可知,在控制精度为1度的中断中,最多可以完成两路个舵机的调速,远远不能满足我们的需求。)并通过STC15F2K61S2实时监测现场环境参数,并把现场环境参数反馈到上位机来,当有危险情况发生时,上位机会通过界面和语音来报警。本文还提供了可以用无线遥控器控制的供电模块,在机器人发生严重错误的时候,可以分别对机器人的上肢和下肢进行断电和上电操作,尽可能减少机器人的损坏。
使用说明:人站在Kinect视距范围内做“投降姿势”进行校正,通过识别人体的动作实现机器人上半生实时模仿人的动作和控制下半身前进、后退、左转、右转、下蹲的动作。并使用STC15F2K61S2为主控,实时采集现场环境参数,并反馈到上位机来,出现危险信号时,上位机会通过界面和语音来报警。
平台选型
单片机开发板(以STC15F2K61S2芯片为控制核心)
设计说明
1.器件选型:
1.1 EPCM-505C开发平台:此平台主要用于驱动Kinect捕获人体深度图像,使用OpenNI从中识别人体关节并提取空间坐标,通过滤波、空间向量运算、腿部姿态检测,计算机器人舵机转角,并发送给机器人控制器。
1.2 机器人:我们选用的机器人模型如图所示:
机器人各项参数参照表2-1。
1.3 Kinect
设计说明
Kinect传感器由RGB彩色摄像机、红外线发射器和红外线CMOS摄像机组成。
Kinect有三大功能:侦测3D影像、人体骨架追踪和音频处理。本文需要使用的是侦测3D影像和对人体骨架追踪的功能。侦测3D影像,其原理是Kinect通过红外线发射器发出雷射光,通过红外线CMOS摄像机记录下空间中的每个散斑,结合原始散斑图案,通过晶片计算出具有3D深度的图像。骨骼追踪,是指在Kinect的追踪范围内,CMOS红外传感器寻找移动物体,该传感器通过黑白光谱的方式来感知环境:纯黑代表无穷远,纯白代表无穷近;黑白间的灰色地带对应物体到传感器的物理距离。
骨骼追踪步骤如下:
首先,收集视野范围内的每一点,并形成一幅代表周围环境的景深图像,传感器以每秒30帧的速度生成景深图像流,实时再现周围环境。
其次, Kinect对景深图像进行像素级评估,来辨别人体的不同部位,采用分割策略将人体从背景环境中区分出来,得到踢出追踪对象背景后的景深图像。
最后,Kinect会评估Exemplar输出的每一个可能的像素来确定关节点,根据追踪到的20个关节点来生成一幅骨架系统图。
1.4 串口无线模块
我们选用的是APC220-43模块。如图所示。
串口模块实物图
此无线模块的特点:
1.1200米传输距离(1200bps)
2.工作频率431-478MHz(1KHz步进)
3.高效的循环交织纠错编码
4.灵活的软件编程选项设置
5.超大的256bytes数据缓冲区
6.适合大数据量传输
7.内置看门狗,保证长期可靠运行
1.5 传感器模块
本项目选用DS18B20、人体红外热释电、煤气传感器、火焰传感器四种传感器,来监测现场环境参数,来实现对温度等安全隐患参数的监测。
2.上位机设计:
1.体感识别上位机系统初始化
运行在EPCM-505C核心控制器上的程序在进行人体骨骼识别前,需要对应用程序配置集、OpenNI、OpenGL、串口进行初始化。流程如图3-1所示:
2.骨骼识别流程
一个完整的识别流程主要包括深度图像的获取,通过OpenNI骨骼识别算法库,利用深度图像识别出人体关节点并提取空间坐标,通过滤波、空间向量计算、腿部姿势识别,为机器人控制器提供控制数据。骨骼识别流程如图3-2所示:
3.滤波算法:
由于Kinect传感器采集到的数据会有扰动,从而造成机器人控制的不稳定性,因此必须对识别出来的骨骼点进行滤波处理,以保证机器人动作稳定、连贯。
对于滤波算法的选择,要综合考虑运算速度、内存占用、准确性、抗随机干扰能力等技术指标。这就要求对采样数据进行分析,从而选取滤波效果最好的算法。
本文提出了一种改进型的限幅滤波算法,此滤波算法采用了动态规划的思想,保证每次滤波后的结果都是最优解,从而从整体上得出最优解。滤波算法的详细流程如图3-3:
3.上半身角度计算:
对人体关节角度的计算,有两种方案可供选择,一种是传统的解析几何方法,另一种是空间向量法。空间向量法不需要处理边界情况,对于所有情况使用的计算公式唯一;而传统的解析几何方法,需要处理垂直、平行等边界情况,有着实现复杂、计算量大、易出错、公式繁多等诸多缺陷。因此,本设计使用空间向量法完成关节角度的计算。
Kinect所使用的空间坐标系不同于常见的空间坐标系,其x轴与y轴的零点与传统空间坐标系相同,但其z轴坐标零点为Kinect传感器,正方向为Kinect指向的正前方。Kinect空间坐标系如图3-4所示:
由向量的可平移性质及方向性,可以推导出Kinect坐标系中任意两个不重合的坐标点A(x1,y1,z1),B(x2,y2,z2)经过变换,可转化到传统空间坐标系中,对其组成的向量AB,可以认为是从坐标轴零点引出。转化公式为:
(3-1)
根据上述性质,可以将人体关节角度计算简化为对空间向量夹角的计算。
4.腿部姿态识别:
通过识别人体腿部特定动作,支持机器人前进、后退、左转、右转、下蹲、站立,即可满足绝大多数情况下对机器人腿部动作的要求,并且有效的减少了用户的操作复杂度,让用户可以专注于业务细节。
腿部姿态详细检测流程如图3-9所示:
3.下位机设计:
3.1:硬件设计:
根据本文的设计需求,机器人控制器主要完成与上位机通信并进行控制信息校验,依据接收到的控制信息,控制机器人完成相应动作。由于机器人动作本身具有一定的局限性,所以需要对机器人相应关节舵机进行限幅,以保证机器人自身的安全。
机器人控制系统的整体设计如图4-1所示:
3.1.1:机器人控制器
机器人控制器采用了STC12C5A60S2单片机作为处理核心,并使用无线透传模块完成与上位机通信工作。机器人控制器原理图如图4-2所示:
3.1.2:供电模块
供电模块采用AMS1117-5稳压芯片,分别对机器人控制器和无线遥控模块供电。供电模块原理图如图4-3所示:
供电模块分别向机器人控制器、无线遥接收器、机器人手臂、机器人下肢进行供电,并通过相应由无线遥控器发送来的控制信号,控制机器人手臂及下肢的供电操作。
3.1.3: 现场信息采集模块:
本模块以STC15F2K61S2为主控,实时采集现场环境信息,并将其反馈到上位机来,对现场环境进行监控。
3.2:下位机软件设计:
3.2.1 通信协议格式
通信协议采用协议头+协议主体+协议尾三部分进行封装,其正确性校验首先是依赖串口对每一字节的自动校验,另一部分是对协议体长度进行求和校验。协议结构见如图4-4所示:
3.2.2 通讯协议三缓冲模型
由于对机器人进行控制时,需要读取缓冲区数据,这就要求保证当前被读取的缓冲区不能进行写入操作。若采用传统双缓冲区模型,需要在读取缓冲区数据时,禁用串口中断,这会导致性能下降并造成数据丢失。详细流程如图4-5所示:
3.2.3 复用PWM周期完成多路舵机的同时调速
为此,本文采用了复用PWM周期的方式,完成对多路舵机的同时调速工作。
首先,设定舵机的调速分组,手臂的六个舵机分为一组,腿部的十个舵机分为两组;
其次,在进行调速前,要对指定分组内的舵机角度进行降序排序,排序的同时要更新对应舵机的管脚掩码,并求出每一路舵机与其相邻较大舵机的差值,并依此作为PWM时间分片调整的依据(注:对于舵机需要保持前一次角度的情况,我们为其进行的调速设置为一个PWM周期的高电平);
最后,在进行调速时,首先记录舵机组中所需要时间最长的舵机,并用一个PWM周期减去它,计算出最后需要以低电平填充的时间,然后给指定舵机组的所有舵机施以高电平信号,并延时至所需高电平时间最小的舵机,利用掩码运算,将其对应的管脚置零,尔后继续延时至需求时间第二短舵机与其差值构成的时间片,此时第二路舵机的调速时间为与第一路舵机的差值加上第一路舵机的调速时间,其结果即为第二路舵机实际需要的调速时间,调速完成后,再次利用掩码计算,将其对应管脚置低电平,依次重复上述过程,直至舵机组内所有舵机调速完成,最后再利用先前计算出的PWM填充时间,进行延时操作,完成一次完整的PWM调速工作。舵机调速流程如图4-7所示:
3.2.3 现场环境监测
本项目通过使用DS18B20、人体红外热释电、煤气传感器、火焰传感器四种传感器,来监测现场环境参数。流程图如下所示:
作品特色
机器人能够感知人体行为,使其不再局限于工业、军事等领域,慢慢贴近人们的生活。在人类未来30年的工作和生活中必然扮演着重要的角色。本项目在Linux操作系统中,基于Kinect体感技术,将骨骼追踪算法应用于人体姿态识别,并控制人形机器人实时模仿人体动作,实现了一种新的自然人机交互模式。
上位机与下位机的通讯采用了自行设计的三缓冲模型,对不符合实际情况的数据及时抛弃。并采用滤波算法,消除kinect捕捉人体关节是产生的抖动,利用两组不同的舵机控制程序,分别来实现上半身的舵机和下半身舵机的运转,既保证了上半身手部动作的实时性,也保证了下半身腿部动作的稳定性。主要创新点和特色如下所示:
1.基于Kinect体感技术,将骨骼追踪算法应用于人体姿态识别,并控制人形机器人实时模仿人体动作,实现了一种新的自然人机交互模式。
2.利用自行设计的三缓冲的通讯协议,保证了数据传输的准确性。
3.利用自行设计的供电模块给机器人的供电,当出现为危险状况时,能及时控制给机器人上半身、下半身和控制