伍建军,姚志博,李嘉豪,李光昌,鞠 庆
(江西理工大学 机电工程学院,赣州 341000)
当下流行的手势识别是通过将不同的手势动作转化为相应的数据信号,并与预设模板进行匹配,根据匹配结果完成手势识别。手势是人与人之间信息交流的重要方式,也是人与机器交互的重要发展组成部[1]。手势识别信息的采集可以通过摄像头或传感器,采集到的数据经过PC端视觉技术或相关算法的处理,识别不同手势并反馈对应的手势识别结果[2]。文献[3]以Arduino为主控制器,结合弯曲、加速度传感器对手指弯曲和手掌的移动信息进行采集,可识别手势并控制电脑端光标的点击与移动。文献[4]利用红外线传感器和环境光传感器对手部动作进行无接触式的手势识别。文献[5]运用卷积神经网络,将YOLO算法应用到了手势识别中,在背景色相近和光线较暗的场景下获得了良好的表现。基于视觉或传感器的手势识别涉及了先进感知技术与PC端视觉处理相关技术,是当下热点的研究领域。然而,由于手势识别技术通用性不足,难移植及手势语义的复杂性,手势识别技术在真正实现人机交互方面还有很多问题需要挑战。计算机视觉技术在分割、提取动态移动手势时,受照相机拍摄质量及光照影响巨大,效果不佳。而使用PAJ7620传感器的手势识别系统在处理动态移动手势及暗光时刻的表现都要优于计算机视觉,并且经过实验验证具有良好可靠性、实时性、准确性,可以满足常规的使用要求。
本手势识别控制系统以STM32F103ZET6为主控制器,采用PAJ7620手势识别传感器对手势信息进行获取,手势传感器获取的的数据,通过I2C总线与STM32主控芯片进行通讯,主控芯片根据预设指令控制移动机器人进行移动,并将数据通过无线传输模块NRF24L01传输给PC端,对移动机器人进行远距离手势控制。上位机软件界面实时显示手势及控制命令执行情况,下位机软件界面通过OLED屏幕实时显示手势传感器采集到的数据。系统总体设计框架如图1所示。
图1 系统总体设计框架
采用STM32F103ZET6作为主控芯片。芯片是专为微系统设计的控制芯片,负责手势传感器的操作控制和无线数据传输。芯片通过模拟I2C引脚对手势识别模块进行初始化配置。在手势传感器产生中断后,芯片读取传感器芯片对应地址的数据得到不同的手势信息,同时,主控芯片通过串口连接无线模块,将数据传输给PC端,将对应检测到的手势实时显示在PC端。系统硬件设计框架如图2所示。
图2 系统硬件设计框架
2.2.1 手势识别的概述
手势识别模块体积小巧,光学式数组传感器集成在了芯片内部,是一款高性能的手势识别传感器模块。可以识别左、右、上、下、手部挥动及距离接近的操作。在顺时针旋转及逆时针旋转手势动作方面识别率不高,识别旋转手势时需要手势规范操作,但在经常使用的手势如:左、右、上、下挥手方面识别率足以支持在嵌入式设备上的开发。模块外观如图3所示。
图3 手势识别传感器
2.2.2 工作原理
手势识别传感器模块功能框图如图4所示。
图4 PAJ7620手势识别传感器功能框图
图4中,SDA和SCL是连接STM32主控芯片的I2C接口,主控芯片通过I2C接口来读取手势识别传感器数据。框图中,手势识别传感器芯片中自带LED驱动器模块、传感器感应阵列模块、特征获取模块和手势识别模块。工作时通过内部LED驱动器,驱动红外LED向外发射红外线信号,当物体在传感器阵列的有效探测距离内被检测到时,特征获取模块会对进入检测区域的物体进行特征信息的采集,采集的信息会储存在寄存器中,同时手势识别模块将对采集到的信息进行识别处理,最后将判别的手势储存到寄存器指定地址当中,操作人员通过I2C接口对模块采集的信息和反馈的手势进行处理。
红外接收器LED阵列分布如图5所示,红外接收器位于红外LED的正中心,四周为红外LED。最常用的左、右、前、后挥手操作可通过传感器检测到。
图5 红外接收器LED阵列分布图
2.2.3 识别算法
手势接近检测原理:由实验数据可知,只有在接近类手势中,传感器检测到的亮度变化幅度最大。根据数据分析得出接近类手势的阈值。当亮度变化幅度大于接近类手势的阈值。则判断为接近类。手势识别芯片获取到的原始数据将转化为距离数据。根据距离数据来判断手部的实时距离变化,在距离数据变化的定时判别手部的位置。根据检测到原始物体的体积大小及亮度数据的大小判断手势是靠近还是离开。
手势移动检测原理:当没有手势进入到红外LED上方时,没有任何信号输入到红外接收器,当有手势进入到红外LED上方时,红外接收器接收到反射回来的LED发出的光信号,进而接收到不同强度的光信号,经过ADC的转换将不同强度的光信号转换为了电信号,随后将原始数据储存进指定的寄存器地址。以红外LED D1为例,手部越靠近LED D1,红外接收器采集到的光亮度越强,即输出的电信号越强。同理,手部越远离光源,即输出的电信号越弱。
当检测到有手势在靠近或者离开时,首先判断探测到手部的是四个方向红外LED中的哪一个,同时将判断手部是正在靠近或是离开。例如:当左边的红外LED检测到手部时,将判断检测结果是手部向右“挥动”、手部“靠近”、手部“离开”中的哪一个。此时手势控制芯片进入检测等待延时,在规定的阈值范围内如果检测到了靠近的手部,则反馈的手势结果为“靠近”。否则,在规定的阈值范围内如果没有检测到靠近或者离开的的手部,则反馈的手势结果为手部向右“挥动”。其余手势向“左”、“上”、“下”挥动三种手势都是如像右“挥动”手势一样的检测思路。手势识别检测流程如图6所示。
图6 手势识别检测流程
移动机器人根据无线传感器传输来的命令执行相应的移动及转向动作。手势传感器识别相应的手势并处理,由主控芯片通过无线传输模块发送给PC端在软件中显示运行状态,并实时控制移动机器人的移动。无线传输模块采用NRF24L01模块,无线传输模块是手势传感器与PC端,PC端与移动机器人进行数据交互的核心部件。一体化带USB串口的硬件结构负责PC端的数据通信。手势识别PC端软件实时显示手势操作的模块连接方式如图7所示。
图7 手势识别模块接入图
除手势命令控制移动机器人进行移动,还可由PC端软件发送命令来控制移动。PC端与移动机器人连接方式与图7相似,仅由手势传感器模块替换为机器人模块。NRF24L01无线传输模块负责接收PC端软件的命令及数据传输,机器人搭载的无线传感器模块将接收对应的控制命令传输给STM32主控芯片。主控芯片控制电机执行移动或转向操作。
软件设计分为PC端上位机的软件设计、移动机器人端软件设计两个部分。
STM32F103ZET6主控芯片读取手势传感器采集到的信息,经过处理后,通过OLED屏幕显示实时的操作手势,当检测到手势为向右移动则在OLED屏幕上显示“手势向右”,并显示移动机器人的实时“左转”、“右转”、“前进”、“后退”等控制情况。移动机器人转向及加减速情况通过OLED屏幕来显示如图8所示。
图8 OLED屏幕显示
PC端软件采用QT/C++技术进行编写。软件界面由QT编写,C++作为编程语言。PC端采用2.4G无线协议同移动机器人进行信息交互。为保证数据传输速度,采用多线程。PC端软件界面分为一条主程序和一条子程序。软件界面主线程负责刷新软件界面和实时捕获对于软件界面的操作,同时将捕获的操作命令发给子模块进行处理。PC软件端界面及工作流程如图9所示。
图9 PC端软件界面、软件工作流程
前轮转向,操作灵敏。后轮驱动,动力输出强劲。后轴通过电机的转动带动移动机器人前行。前轮通过电机、齿轮、齿条调整前轮的姿态从而改变移动机器人的转动方向。轮式车辆四种常规的转向方式:独立转向、铰接转向、差速转向、阿克曼转向。阿克曼转向通过连杆结构协调两侧车轮的转向。大部分轮式车辆都是采用阿克曼转向方式转弯。下面的运动学分析基于阿克曼转向模型来建立[6]。阿克曼、自行车模型转向分析如图10所示。
图10 阿克曼、自行车模型转向示意图
通过三角关系的求解,可以得到左前轮和右前轮的转角的求解公式为:
其中,L是轴距,R是转向半径,B是中心距,我们可以将双轨车辆模型简化为一个单轨的自行车模型,自行车模型转角的相互关系为:
图11中:φ为车体的横摆角(航向角),δf为前轮偏角,vr为车辆后轴中心速度,vf为车辆前轴中心速度。阿克曼转向因为前轮转角会受到最大前轮转角的约束,在采用阿克曼转向的车辆的固有特性上,得到运动学模型为:
图11 运动学模型
在坐标系OXY下面Xr.Yr代表车辆后轴位置,Xf,Yf代表车辆前轴位置,联立前后轴的运动约束及后轴的速度公式,可以得到后轴中心X,Y方向的速度,R为后轮的转向半径,M为车辆后轴的中心,P为瞬心,N为前轴的轴心,此处假设转向过程中的车辆的质心侧偏角保持不变,即在车辆转弯的每一瞬时,车辆的转动半径与道路的曲率半径相同。
联立前后轴的运动约束方程及后轴的侧向速度为零的约束,最终得到车辆的横摆角速度的关系,车辆的运动学模型为如式(9)所示:
根据移动机器人在平整路面的适应性,移动机器人采取前轮转向,后轮驱动的方案设计。实验验证在STM32主控芯片控制电机驱动的移动机器人上进行。采用成熟的电机齿轮控制转向,结构简单,减少了移动端的部署的难度。移动机器人本体由转向电机、驱动电机、锂电池、减震弹簧、转向拉杆、轮胎、车架等组成。采用复合材料,结构简单,容易维修。
移动机器人转向结构的设计如图12(a)所示,移动机器人在检测到手部向左、向前、向右手势动作后作出车轮向左、向前、向右转动的状态如图12(b)、图12(c)、图12(d)。
图12 转向结构及转向图
为验证本设计的精确及可靠性,对几种常见的手势控制操作方式进行验证。测试中,对每个手势动作重复测试200次,采集到1200个实验样本,手势控制移动机器人转向、启停识别精度结果如表1所示,综合识别率96.33%。
表1 手势控制移动机器人转向、启停识别精度表
阐述了手势识别传感器原理及在控制移动机器人进行转向、移动方面的具体应用。本系统经过实验测试表明,可根据检测到的手势操作命令可靠的完成从检测手势、显示运行状态、移动机器人移动及转向等操作。实现了基于手势传感器的移动机器人的研究,该系统具有操作灵敏,反馈实时、可靠性高等特点。相对基于计算机视觉的手势识别在暗光环境下识别率提高显著,在人机交互方面具有广阔的应用前景。随后的研究可考虑将传感器与视觉结合起来,提高手势识别的精度及识别种类。