基于Kinect体感技术的遥控飞机系统的设计与实现
2016-04-29陈帅桑海伟胡兴玲李红霞陈桃
陈帅 桑海伟 胡兴玲 李红霞 陈桃
摘 要:随着体感技术的发展,人机交互的方式变得更为先进和多样化。通过人体肢体语言去控制机械或者游戏机已经变成可能。而通过Kinect外设,可以解除人们受键盘,手柄等传统遥控方式的限制。文中通过Kinect骨骼跟踪标准应用程序接口API来设定特殊的肢体动作作为触发事件向控制器发出指令,达到控制的目的。本设计通过对人体手势的识别,并用Arduino单片机作为控制媒介,从而达到了对遥控飞机运动轨迹的控制目的。
关键词:Arduino单片机;体感技术;遥控飞机;Kinect
中图分类号:TB21 文献标识码:A 文章编号:2095-1302(2016)04-00-03
0 引 言
作为一个新兴的研究领域,人体行为识别研究受到了越来越多研究者的关注。通过对传感器采集到的数据进行加工、处理和分析,从而使PC机应用程序系统能够识别个体动作、个体之间以及个体与环境之间的交互是人体动作识别的研究目的。基于Kinect的人体体感遥控是新型人机交互研究中一种重要的交互方式。因此,基于Kinect的人体体感遥控是人机交互发展的趋势之一。
基于Kinect的人体体感遥控作为一种新的控制方式,该方式不仅深受遥控飞机爱好者的喜爱,控制方法简单易学,而且充满乐趣,受外界影响因素较少。因此开发一套基于Kinect体感技术的遥控飞机系统具有非常重要的意义与价值。
1 系统结构和工作原理
1.1 系统结构框图
本系统可以分为三个模块,包括由Kinect体感器和PC机应用程序构成的人体手势识别数据采集模块,Arduino UNO 单片机核心处理模块,遥控飞机遥控器和X9313数字电位器组成的遥控模块。其系统框图如图1所示。
1.2 工作原理
基于Kinect体感技术的遥控飞机系统由核心控制模块、遥控控制模块和体感器数据采集模块组成。本系统采用Arduino单片机作为核心处理模块和其它模块相互通信,最终实现控制遥控飞机飞行轨迹的目的。
本系统首选通过Kinect体感器采集人体骨骼运动的信息,发送给PC机应用程序处理数据。Arduino单片机核心控制模块通过串口和PC机通信获取数据,核心控制模块发送指令到遥控控制模块,进而控制遥控飞机的运行轨迹。
本系统利用体感器采集到的左手骨骼信息作为控制遥控飞机的油门大小,采集到的右手骨骼信息作为控制遥控飞机的方向。其系统流程图如图2所示。
2 硬件电路设计
基于Kinect体感技术的遥控飞机系统的核心处理模块为Arduino UNO单片机开发板,遥控器控制模块由X9313数字电位器和遥控飞机遥控器组成,数据采集模块为Kinect体感器。所述遥控控制模块通过电路与核心控制模块连接通信,体感采集数据模块通过电脑与核心控制模块连接通信。
2.1 核心处理模块
ArduinoUNO的主要作用是与电脑进行通信,通过USB接口与电脑连接,获取电脑处理后的数据信息,进而进行指令判断,最后通过改变高低电平调节数字电位器的大小,进而控制遥控飞机的运行轨迹。
Arduino UNO是Arduino USB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16 MHz晶体振荡器,一个USB口,一个电源插座,ICSP header和一个复位按钮。核心处理模块的结构示意图如图3所示。
2.2 遥控控制模块
遥控控制模块是控制飞机运行轨迹的主要控制部分,它由遥控飞机遥控器与X9313数字电位器组装而成,通过接收Arduino单片机的端口高低电平的数值,进而改变数字电位器的阻值大小以进行速度和飞行方向的控制。
拆除遥控器的模拟电位器,用X9313数字电位器的阻值触点代替模拟电位器的触点,数字电位器的控制端口由Arduino核心处理模块控制。图4所示为X9313数字电位器的引脚图。
简单介绍数字电位器X9313的工作原理:Vcc 是高电平接入端, Vss是负极接入端。 3号引脚RH/VH、6号引脚RL/VL和5号引脚RW/VW相当于滑动变阻器的三个抽头,其中5号引脚是活动抽头,介于3号与6号引脚之间进行运动。X9313WP型号的电位器阻值为10 kΩ,数字电位器为32阶,意思就是将10 kΩ分成31份,大约每份330 Ω。X9313结构框图如图5所示。
图5中的引脚,引脚,引脚为三个控制端,为片选端,当为低电平时,X9313被选中,此时才能接收和的信号,其中在一个脉冲的下降沿使计数器的数值增减1,如果为高电平,则滑动端向VH端滑动,VW与VH之间电阻值减少一个台阶,也就是330 Ω,反之如果UN为低电平,则滑动端向VL端滑动。但是要注意,滑动端VW不会一直滑动下去,也不会滑动到边缘然后再循环滑动回来,如果想储存滑动后的电阻值,那么就让变为高电平,变为高电平,这样就可将计数器的值储存。,,在接单片机之前最好串联10 kΩ电阻,在RH与RL两端分别按如图所示的接线连接电容,这样会明显降低噪声,稳定性大大增强。
2.3 数据采集模块
数据采集模块由Kinect体感器和PC机两部分组成,主要作用为通过Kinect体感器对人体手势的运动轨迹进行识别,继而转换成三维数据传输给PC机,通过数据转换程序把三维数据转换为命令数据。通过串口发送给Arduino单片机,进行遥控飞机运行轨迹控制。
遥控直升机在三维空间飞行,因此还应为其添加上下飞行(油门)的动作,而前后动作就由左手来完成,以左手的摆动幅度来控制飞机的油门大小。在Kinect中,油门的大小采用变量get_angle控制,以左手腕部,左侧肩部,左侧臀部三点形成三角形,三角形肩部位置的角度为get_angle,利用get_angle的大小映射(map函数)油门大小。
人体在Kinect中可以用enableMirror()函数来激活镜面关系,也就是说左右手的位置可以在Kinect中调换。由左手控制飞机油门,右手控制飞机的方向,这样飞机就可以遵从人体姿态达到飞行目的。总体来说,飞行器的身体姿态方面采用的综合控制方法如图6所示。
本系统采用的数据采集模块是微软公司Kinect for Windows的第一代产品。Kinect的关键部件及说明如下:
(1)麦克风阵列:声音从4个麦克风采集,同时过滤背景噪声,可定位声源。
(2)红外投影机:主动投射近红外光谱,照射到粗糙物体或穿透毛玻璃后,光谱发生扭曲,从而形成随机的反射斑点(称为散斑),进而被红外摄像头读取。
(3)红外摄像头:分析红外光谱,创建可视范围内的人体、物体的深度图像。
(4)仰角控制马达:可编程控制仰角的马达,用于获取最佳视角。
(5)USB线缆:支持USB 2.0接口,用于传输彩色视频流、深度流、音频流等。必须使用外部电源,传感器才能充分发挥其功能(Kinect的功率达到了12 W,而普通USB一般是2.5 W)。
(6)彩色摄像头:用于拍摄视角范围内的彩色视频图像。
4 结 语
本系统是一种基于Kinect的体感技术遥控飞机,采用Arduino作为核心处理模块,运用微软公司成熟可靠的体感器设备作为人体骨骼数据的采集模块,可以增强数据的可靠性和可处理性。通过改变数字电位器的大小来控制飞机的运行轨迹,对体感技术研究具有深远的意义。
参考文献
[1]余涛.Kinect应用开发实战:用最自然的方式与机器对话[M].北京:机械工业出版社,2012.
[2]吴国斌,李斌,阎骥洲.Kinect人机交互开发实践[M].北京:人民邮电出版社,2013.
[3]王森.Kinect体感程序设计入门[M].北京:科学出版社,2012.
[4]Enrique Ramos Melgar.学Arduino玩转Kinect制作项目[M].北京:人民邮电出版社,2014.
[5]曹林.人脸识别与人体动作识别技术及应用[M].北京:电子工业出版社,2015.
[6]Michael McRoberts.Arduino从基础到实践[M].北京:电子工业出版社,2013.
[7]杨昆云.Arduino权威指南[M].北京:人民邮电出版社,2015.
[8]陈吕洲.Arduino程序设计基础[M].北京:北京航空航天大学出版社,2014.
[9]赵志.Arduino开发实战指南[M].北京:机械工业出版社,2015.
[10]孙骏荣.Arduino互动设计入门[M].北京:科学出版社,2015.