APP下载

基于kinect体感控制机器人设计与实现

2018-07-23桂林电子科技大学谭花花

电子世界 2018年13期
关键词:体感子程序舵机

桂林电子科技大学 谭花花

引言

在人类迅速进步的现在,计算机所表现出来的形态越来越繁多,所具备的功能也越来越强大。随着现在摄像头技术的不断进步,计算算法越发的强大。目前体感交互式技术也得到了广泛应用。本文根据实际应用需求设计了一种采用kinect体感设备通过摄像头和红外发射器捕捉人体的动作信息通过PC机操控的机器人。

1.本项目总体设计方案

基于Kinect的体感控制机器人系统主要如下几个部分组成。第一部分为Kinect对人体图像的捕捉以及捕捉后的算法处理,第二部分为将捕捉处理的数据通过电脑串口发送到无线模块的主机,第三部分是无线模块从机接收到主机发过来的数据传输到MCU上,MCU通过获得的数据表现为驱动电机后机器人的运动状态。系统整体设计框图如图1.1所示。

图1 .1 系统整体设计框图动作

2.kinect体感控制机器人的硬件电路设计

微控制器:MCU采用STM32RBT6它是ST公司推出的一款控制器,采用了Cortex-M3的内核,使用目前主流ARM V7-M的架构,拥有低功耗、低成本、高性能三大特点。

电源:电源供电电路的设计需要综合每一个芯片或模块的工作电压,本系统硬件主要有三个需要考虑,主控制器STM32RBT6、ESP8266模块和舵机。STM32RBT6输入电源电压范围2.0 - 3.6V,ESP8266的输入电源电压范围为3.0 - 3.6V,舵机的输入电源电压范围为3.5 - 6.0V。且ESP8266与舵机的工作电流相对较大,所以采用5V电压,选择采用2节18650电池作为供电方案。两节18650电池串联电压为7.4V,通过稳压芯片LM1117-5V将7.4V直接稳压到5V。在电源的正极加入二极管对电源保护,得到5V电平衙再次通过稳压芯片LM1117-3.3V将5V直接稳压到3.3V从而得到3.3V的供电电源。

舵机驱动电路:舵机是一种通过直流脉冲来驱动旋转的一种装置,舵机主要是由五个部分组成,即外壳、电路板、驱动马达、减速器与位置检测元件。其工作原理是由接收机发出讯号给舵机,经由电路板上的 IC驱动无核心马达开始转动,透过减速齿轮将动舵机力传至摆臂,同时由位置检测器送回讯号,判断是否已经到达定位。位置检测器其实就是可变电阻,当舵机转动时电阻值也会随之改变,即由检测电阻值便可知转动的角度。舵机的驱动电路可采用L298模块和若干个光耦结合进行驱动。

WIFI通信驱动电路:本系统中选择了ESP8266模块作为无线通信方案。ESP8266专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用于各种低功耗应用场景。本模块在系统中主要是对数据进行无线通信,将PC端采集的手势动作发送给单片机设备端。

3.Kinect 传感器的工作原理

Kinect是由微软公司开发的一款姿态传感输入设备,作为Xbox360 外接的3D体感摄影机,利用它特有的功能让用户摆脱传统输入设备的束缚,通过自己的肢体控制终端。Kinect 传感器由四个扬声器,两个麦克风阵列,一个高速 Flash,一个USB2.0 总线接口,三个摄像头。该传感器工作的原理如图 3.1 所示。

图3 .1 Kinect传感器工作原理图

由上图可知彩色摄像头用来采集 RGB 图像,通过增量直方图算法计算增量直方图,并通过粒子滤波算法计算权值,最后实现相对应的目标追踪。Kinect 传感器的驱动能够产出 RGB图像流和深度图像流与采集到的 RGB 图像与深度图像的像素点完全对应起来,通过 Kinect 传感器可以实现对影像资料的辨识通过采集得到基本的影像资料。

骨骼图像原理:获取骨骼图像之前,需要从深度图像中将人体从背景环境中分离出来。首先会分析接近传感器的区域,其次是通过逐点扫描接近传感器区域的深度图像的像素,来形成判断:是否属于人体的部位。该过程需要使用CPU的图形视觉技术,其应用到了影像边缘处理、噪声阈值收集消除、人体特征点的目标归类。

4.系统的软件设计

本系统的软件可分为两个部分,即上位机软件部分和下位机从机软件部分。上位机软件部分主要的功能又分两部分,一部分是获取到Kinect设备上人体当前做出的一个动作信息;另一部分是将人体的动作信息处理后,将数据通过电脑的串口将数据传输到WIFI模块的主机端。下位机从机部分的软件程序是获取到WIFI从机模块的信息然后,驱动舵机做出相应的转动,实现人体动作和舵机动作的一个对应,从而完成人机交互实现,其软件控制更适合广泛的硬件配置,进而提高实际应用的普及力度和市场需求。

图4 .1

手势识别算法设计∶在Kinect应用程序中手势识别部分的算法是整个系统应用的核心,好的程序结构可以是的程序具有健壮性、可维护性以及模块化。因此在手势识别算法设计中,采用了模块化程序设计的思想和相应划分,从而将这部分的软件设计内容分为初始化子程序、平滑处理子程序、最近用户获取子程序、手势识别子程序、模拟鼠标子程序等模块。初始化子程序用于对Kinect设备初始化和注册数据流事件;平滑处理子程序,用于减少用户快速运动过程中偶尔发生的关节点跳跃;最近用户获取子程序,用于在多用户存在时查找离Kinect最近的、被跟踪的骨骼,有利于相应运动的捕捉,方便程序后续的处理及过渡的连贯性;手势识别子程序,用于计算判断用户当前的动作是否是约定的姿势;模拟鼠标子程序,用于将手的骨骼跟踪坐标点映射为鼠标的屏幕坐标,同时根据约定的手势来触发鼠标的点击事件。手势识别算法的流程图如图4.1手势识别算法的流程图所示。

5.功能调试

对于手势识别算法的调试主要是对深度图像获取部分进行调试,为了方便调试通常会为现有的程序工程添加Kinect自带的Microsoft.Kinect.Toolkit.Controls库,这个库里包含较多的控件可以直接调用。KinectUserViewer控件显示是用户在Kinect识别范围中的深度图像数据,Kinect是否追踪到用户,是根据能否看到相应的影像。

上位机串口通信部分的程序调试,为了方便上位机串口通信的测试,在调试过程中使用“虚拟串口软件”将一个COM进行虚拟成两个虚拟COM1和COM3。打开手势识别软件和“串口调试助手”,将之前通过虚拟串口软件虚拟出来的两个串口COM1和COM3,分别作为手势识别软件和“串口调试助手”所连接的端口,因为在滑动过程中将会有大量的数据通过串口进行发送,所以将串口的波特率设置为115200,检测位为无,数据位为8位,停止位为1位。调试完成后机器人能实际跟随手势力运动。

测试者 机器人第一次右手垂直向下88度第二次左手垂直向上90度左手垂直向下90度右手垂直向上90度右手垂直向下90度右手垂直向下93度第三次左手垂直向上95度左手垂直向下95度右手垂直向上88度左手垂直向上90度左手垂直向下90度右手垂直向上90度右手垂直向下90度右手下摆左右42度第四次左手垂直向上93度左手垂直向下93度右手垂直向上92度左手上摆左右45度左手下摆左右45度右手上摆左右45度右手下摆左右45度左手上摆左右50度左手下摆左右48度右手上摆左右48度左手上摆左右45度左手下摆左右45度右手上摆左右45度右手下摆左右45度左手上摆左右48度左手下摆左右49度右手上摆左右42度右手下摆左右40度

6.结语

本文设计实现了体感控制系统对人体手势的识别,使用者可以通过做出的人体手势,由体感传感器提取其动作的深度图像,PC端进一步进行算法处理获得控制动作,再与单片机进行通信,将处理结束获得的动作传递给单片机,单片机实现对操作对象的控制,同时支持个性化体感操作,提供全新的用户体验。

猜你喜欢

体感子程序舵机
体感交互技术在脑卒中康复中的应用
人体体感感知机械手设计与实现
含齿隙弹载舵机的全局反步模糊自适应控制
基于dsPIC单片机的飞艇舵机控制实现
非触控式的体感机械臂交互控制系统研究
基于高速同步485总线通信的多通道舵机控制器设计
体感语境下的交互行为设计
浅谈子程序在数控车编程中的应用
基于云模型的舵机同步控制
子程序在数控车加工槽中的应用探索