基于手势识别的小车运动控制系统设计
手势是人类社会长期存在的重要肢体语言。它具有简单、直接、高效、清晰,内容丰富的特点,手势识别是指跟踪人类手势并识别其表示含义的整个过程。静态手势识别实现运动控制的研究目的是在不直接触摸设备的情况下使用的手势的位置信息识别作为输入[1],并将命令映射到输出。
本文引用地址://www.cazqn.com/article/202302/443617.htm本文设计的基于手势识别的小车运动控制系统,用户佩戴传感器装置,传感器将人与机器进行连接,传感器通过对数据进行采集,得到角度等相关数据信息,然后将信息传递给单片机,单片机内部对传感器传输过来的数据进行分析处理,最终得到用户指令并实现运动控制。与语音识别、触摸屏识别、键盘和鼠标等其他人机交互技术相比,人机距离限制小,语言独立等优点。在应用层面,手势识别小车的发展可以使人机交互更加精确、稳定,范围更广,有利于推广应用。
1 系统总体方案设计
该系统的总体结构分为两部分:手部控制端和小车运动端,由五大模块构成:单片机最小系统、传感器模块、无线通信模块、显示模块和电机驱动模块。软件设计主要包括:手部控制程序设计和小车运动程序设计。系统总体方案设计框图如图1 所示。
图1 系统总体方案设计框图
手部端传感器采集不同手势的各轴的角度数据,传感器将数据返回给单片机最小系统,由单片机对数据信息进行滤波处理,辨别指令信息,并且通过无线通信模块传输给小车端。小车端传感器采集车体姿态的各轴的角度数据,传感器将数据传输回单片机的同时无线通信模块接收手部控制端的指令信息,单片机将两部分信息对比处理,对误差运用经典PID 算法处理,并将处理结果反馈给电机驱动模块,调整小车左右电机PWM,目的是使小车按照手势指令行驶并且行驶稳定,显示模块显示小车行驶的目标角度和实际角度。
2 硬件电路设计
2.1 单片机最小系统
本设计中在手部控制端和小车运动端均采用Arduino Nano 作为主控芯片, 其处理器核心是ATmega328(Nano3.0),同时具有14 路数字输入/ 输出口,8 路模拟输入[2],ATmega328 具有32 个引脚,由于引脚数量有限,所以很多功能都共同使用一个引脚,具体功能可以通过软件编程实现。这款单片机便捷灵活、方便上手,具有丰富的接口,适用于本系统。Arduino Nano电路原理图如图2所示。
图2 Arduino Nano电路原理图
2.2 姿态角度传感器
本设计中采用姿态角度传感器JY61采集手势指令信息和小车姿态信息, 处理器以高精度陀螺仪MPU6050为核心, 读取MPU6050的测量数据, 通过串口输出[3]JY61模块工作电压3.3 V/5 V,测量数据包括三维角度、三维加速度和三维角速度数据,其角度数据在X 轴和Z 轴的测量范围是±180 °,Y 轴的测量范围是±90 °,动态测量精度为0.1 °,静态测量精度为0.05 ° 。
2.3 蓝牙模块
本设计中采用蓝牙模块HC05实现手部控制端和小车运动端的数据通讯。HC05 是一款主从一体式串口蓝牙模块,使用方便快捷,配对后只需要当成固定波特率的串口一样使用即可,因此只要是以“固定波特率,8 位数据位,无奇偶校检”通信格式的串口设备都可以直接取代原来的有线串口而不需要修改程序。HC05 蓝牙模块电路原理图3 如图所示。
图3 HC05蓝牙模块电路原理图
2.4 显示模块
本设计中使用LCD1602 显示屏显示目标角度(手部控制姿态)和当前角度(小车运动姿态),可以实时地观测小车行进中的角度变化。本设计中采用LCD1602的IIC 驱动方式,通过IIC 适配器板实现IIC 接口,只采用两个IO 端口用于驱动LCD1602,适配器板的SDA、SCL 分别连接到开发板A4 和A5。LCD1602 电路原理如图4 所示。
图4 LCD1602电路原理图
2.5 电机驱动模块
本设计中使用L298N 电机驱动模块控制小车电机的正反转和行驶速度。L298N 电机驱动模块拥有发热小,无需散热片、体积小、省电,温度下降后自动恢复的优点。电机A 输出口对应IN1 和IN2 控制1 个电机的旋转,电机B 输出口对应IN3 和IN4 控制另1 个电机的转动,其操作简单,稳定性好,能满足直流电机大电流的驱动条件[4]。
3 软件设计
3.1 手部控制程序设计
手部控制程序主要实现内容如下:上电后系统初始化,进入循环程序,对X、Y、Z 轴基准角度进行数据校准。传感器采集当前X、Y、Z 轴角度,将当前角度与基准角度相减所得偏差角度作为手势指令,采集数据后进行手势识别,通过Z 轴角度判断0°、45°、90°、−45°、−90°五种转弯状态,通过 X 轴角度判断前进、后退、停止3 种行进状态,滤波处理后,发送至小车运动端;若未读到低开始信号则表示手势指令无效,小车静止。
手部控制程序流程图如图5 所示。进行手势检测时,将姿态角度传感器JY61 佩戴在用户右手中指上方,杜邦线所在一侧贴着食指。在前进、停止、后退指令中定义掌心向下指尖向前为停止,掌心向前指尖向上为前进,掌心向后指尖向下为后退。在0° 、45°、90°、−45°、−90°指令中定义掌心向下指尖向前为0° 转弯,掌心向下指尖向左为90° 转弯,掌心向下指尖向右为 −90°转弯。
图5 手部控制程序流程
根据不同手势姿态其各轴角度不同,进行数据处理做出判断后发送至小车端,最终小车依照手势指令实现前进、后退、转弯、停止等行驶状态。角度数据内容如表1 所示。
表1 角度数据
各轴角度计算公式如下:
确定转弯状:确定 0°、 45°、 90°、 −45°、−90°转弯状态的手势指令信息,需要对 Z 轴角度进行判断。不同人所给出的手势指令不同,以及演示手势指令存在一定角度误差,所以判断条件都在一定区间范围内。转弯状态手势指令信息表如表2 所示。
表2 转弯状态手势指令信息表
确定前进、停止、后退状态:确定前进、后退、停止行驶状态的手势指令信息,需要对X轴角度进行判断。行驶状态手势指令信息表如表3 所示。
表3 行驶状态手势指令信息表
3.2 小车运动程序设计
小车运动程序主要实现内容:上电后系统初始化,进入循环程序,行进过程中设定小车左右电机的PWM均为80,采用位置式PID 算法减小扰动和误差,将PID运算结果PID_out 加在右侧电机PWM,实现小车沿直线行驶和准确转弯。若蓝牙模块未接收到字符“0”,则手势指令无效,小车静止。小车运动端程序流程图如图6 所示。
图6 小车运动端程序流程
在本设计中,基于手势识别的小车运动控制系统要实现沿直线行驶和准确转弯,首选简单高效的PID 控制算法,以保证控制系统快速到达并稳定于目标值[5]。PID控制算法公式为:
本设计中小车沿直线行驶时先给左右电机相同的PWM,在行进过程中由于误差和扰动肯定会走偏,此时传感器采集各轴角度,采用位置式PID 算法控制的目的就是使小车转到目标角度并沿目标角度走直线,控制方法是将PID 运算结果PID_out 加在右侧电机PWM。小车运动状态控制策略如表4 所示。
表4 小车运动状态控制策略
4 系统测试
经过硬件和软件的联合调试,基于手势识别的小车运动控制系统实现了以下功能:手部控制端可以识别不同的手势指令,手部端与小车端能进行数据传输、小车接收手势指令后可以实现前进、后退、停止、转弯等不同行驶状态,显示屏可以显示目标角度和实际角度。测试结果表明,基于手势识别的小车运动控制系统可以准确、稳定地运行,证明了该系统的可行性和识别算法的有效性。系统调试结果如图7 所示。
图7 系统调试结果
5 结束语
随着科技的进步与社会的发展,人类生活趋于智能化,智能识别技术与智能机器人一定是未来研究的热门课题,基于手势识别的小车运动控制系统将手势识别技术与移步机器人结合为一体,高效地实现了人与小车的交互控制,同时因其智能、安全、工作效率高等特点,有效节约了人力资源,可以在很多场合中得到应用。身处于疫情时期,采用无接触模式实现手势控制小车帮助人们安全、高效地完成一些工作,具有一定的实际意义,做到了真正方便人们的生活,具有广阔的市场前景与实用意义。
参考文献:
[1] 孙亚星,黄帅铭,王宇鹏,等.基于电容传感器的手势识别系统设计[J].自动化仪表,2020,41(2):10-19.
[2] 倪文彬,毛耀,陆广华.基于Arduino的体感机械手设计[J].机床与液压,2017,45(23):5-9.
[3] 张金山.四足步行机器人的3-5R并联腿机构设计与步态规划[D].济南:山东大学,2019.
[4] 杨小博,胡强,苏玉香.基于STC12C5A60S2的循迹避障智能小车的设计[J].福建电脑,2017,33(11):19-20.
[5] 候帅.多自由度机器人搬运平台调平控制系统研究[D].西安:长安大学,2017.
(本文来源于威廉希尔 官网app 杂志2023年2月期)
评论