1. 引言
随着科技的不断进步和创新,平衡小车作为一种新型代步工具得到了越来越广泛的应用。然而,现有的平衡小车控制系统仍然存在一些不足之处。现有的两轮平衡小车控制系统在控制精度方面存在一定的问题,主要表现为平衡小车在高速行驶或转弯时容易出现晃动或失去平衡的情况。这主要是由于现有控制系统采用的传感器的精度和控制算法的限制所导致的。如何提高传感器的精度和优化控制算法,以及保持系统一个稳定的系统,将是未来研究的重点之一 [1] 。主要是由于控制算法的复杂度和计算能力的限制导致现有的两轮平衡小车控制系统响应速度较慢,不能很好地适应高速行驶或急转弯等情况 [2] 而且现有的两轮平衡小车控制系统功能单一,结构上不稳定,因此小车的自稳定是一项重大挑战 [3] 。本文采用了STM32F4ZGT6主控芯片和PID控制算法,实现了平衡小车的高精度控制,应用了ATK-PAJ7620U2手势识别传感器和MG513直流减速电机,可以快速响应用户手势和指令,实现更快速的平衡小车运动,通过结合手势识别传感器和MPU6050内置DMP所处理的数据,实现了平衡小车的向前、向后、顺时针移动、逆时针移动等多种动作,提高了平衡小车的实用性和趣味性。
2. 整体设计与基本原理
2.1. 整体设计
系统整体框架如图1所示,整个系统有三个部分组成:外部底座结构,硬件系统和软件系统。外部底座结构设计如图2所示,由两个编码电机带动车轮转动。
此外,主控芯片选择STM32F4ZGT6,搭载ATK-PAJ7620U2手势识别传感器通过IIC通信方式与主控芯片进行通信,向主控芯片发送手势识别结果,并通过OLED显示屏显示手势识别的结果。编码电机选用带有霍尔传感器的MG513直流减速电机,通过主控芯片的内置时钟TIM2和TIM4采集霍尔传感器回传的数值,进行状态分析。通过判别手势方向,结合MPU6050内置DMP所处理的数据,再通过PID控制实现平衡小车的向前,向后,顺时针移动,逆时针移动等动作。
电源部分则是选择竞赛常用航模锂电池。容量2200 mah,3个电池包,标称电压11.1 V,满电压约12.8 V,放电倍率25 C,即理论最大输出电流能达到55 A [4] 。同时通过LM2596得到5 V供电电压,同时选用AMS1117-3.3 V作为二级降压电路的降压芯片。其稳压误差在1.5%以内可得到噪音低、纹波小的3.3 V供电电压。
整体结构上采用亚克力板作为小车的结构材料,选用铜质,内孔直径为3 mm的六棱柱作为PCB主控板的固定材料。直流电机使用角钢与核心钢板连接,整体的设计是一个上中下结构(图3),电机在下,控制系统在中部,手势识别传感器在上部,三者通过导线连接。
1. 霍尔传感器型编码电机 2. 亚克力板 3. 车轮
Figure 2. Schematic diagram of the base structure
图2. 底座结构示意图
Figure 3. Schematic diagram of the structural plan
图3. 结构平面示意图
2.2. 基本原理
2.2.1. 平衡小车直立理论实现
直流减速电机转轴输出的力矩将为小车提供平衡所需的阻尼力。其原理是,当系统运行时,姿态传感器会捕捉到小车的倾角变化,当小车MCU通过姿态传感器判断小车出现倾倒时,MCU会向电机发送控制信号,使小车有一个与倾倒方向相同的加速度。根据牛顿第二定律,在短时间内可以将小车整体假设为处于静止状态,从而得到受力图4。
Figure 4. Force analysis diagram of the trolley
图4. 小车受力分析图
从图4中可以看到,当
时,小车车身会受到一个反向斜向上的恢复力,使其倾角变小,当
时,小车倾角保持不变。为了使小车姿态恢复更稳定,添加一个模拟阻尼力
,整理分析得加速度
(1)
其中:
为车倾斜角;
为角速度;
,
为比例系数;
决定了车是否能够稳定到垂直平衡位置,
决定了车回到垂直位置的阻尼系数。
设小车重心距离小车车轮重心
,小车质量
,车倾角为
,小车加速度
,则可求得原系统的传递函数为
(2)
得该系统两个极点
(3)
由于有一个极点在s平面的右半平面,系统为开环系统时,小车不稳定。引入比例,反馈环节,设计得到图5所示的反馈控制结构框图。
根据控制述理论知识可知,其改进系统的闭环传递函数为
(4)
此时若要满足系统稳定性要求,根据劳斯–赫尔维茨判据可知,
,
。又由于小车的姿态检测和反馈控制时间非常短暂,直流电机从静止到恒定速度过程会有一个加速度a,故在反馈控制过程中,小车处于加速状态,其加速度与电机参数,电压参数有关。
Figure 5. Feedback control structure diagram
图5. 反馈控制结构图
对比例系数
,
分别取值为10,g取9.8,对上述计算结果进行验证,对反馈控制使用Matlab进行仿真测试并绘制Bode图和Nyquist图,结果如图6和图7所示,符合上述推理。
2.2.2. 电机转速检测
选用带有霍尔传感器的MG513直流减速电机,主控芯片通过检测霍尔编码器输出的脉冲,通过程序换算为电机的转速,如图8所示,编码器为AB相输出,不仅可测速,还可辨别转向。只给编码器电源5V供电,在电机转动时编码随电机同步转动即可通过AB相输出存在相位差的方波信号。编码器自带上拉电阻,所以无需外部上拉,可直接连接单片机IO进行读取,这样就可判断电机实时转速和转动方向 [5] 。实时采集到的数据有电机的转速,从而计算出小车车轮的速度。依据小车自平衡功能要求,小车底部并排的两个车轮是保持车体直立前后移动的控制目标,而小车轮胎的转动受电机控制,因此从控制思维看,受控对象是小车车体,车体底部两个电机转动速度作为控制输入量 [6] ,结合PID控制算法从而实现小车平衡。
Figure 8. Hall sensor velocimetry waveform
图8. 霍尔传感器测速波形图
2.2.3. MPU6050姿态检测
使用MPU6050姿态传感器(图9)检测出空间直角坐标系三轴的角度以及角加速度等姿态初始数据。MPU6050是一种集成了3轴陀螺仪和3轴加速度计的运动传感器。它的工作原理是通过检测运动和重力加速度来测量物体的方向和运动。陀螺仪可以检测物体的旋转运动,而加速度计则可以检测物体的线性运动和重力加速度。通过结合陀螺仪和加速度计的数据,MPU6050可以提供物体的姿态和运动信息 [7] 。
Figure 9. Schematic diagram of the three axes of the attitude sensor
图9. 姿态传感器三轴示意图
MPU6050模块由ARM主控制器进行初始化配置,主机先将命令写入相关寄存器,从机采集的数据将存入寄存器,主机通过读取寄存器的值来获取姿态测量的原始数据 [8] 。芯片集成了DMP数字动态处理器(实现平衡小车姿体平衡),从陀螺仪、加速度计及外接传感器接收并处理数据,处理结果可从DMP寄存器读出或通过FIFO缓冲 [9] ,分别采集X、Y、Z方向的电压值,将其测量的模拟量转换成数字量输出,最后通过IIC总线传送到STM32,但此时得到的值并不是实际的角度和角速度值,还需经过一定的比例关系进行转换,才能得到实际的角度和角速度值 [10] ,从而得到平衡机器人的倾角,平衡小车的倾角变化量,也能得到倾角变化率,即角加速度。
2.2.4. 手势识别
本设计中选择的手势识别方式的基本原理是飞行时间测距法(TOF),通过集成的多个发光LED作为信号源,同时得到多个飞行时间,以特定的算法来获得物体在检测空间中的运动轨迹。手势识别传感器选择ATK-PAJ7620U2。
其工作原理是:PAJ7620内部自带LED驱动器、传感器感应阵列、目标信息提取阵列和手势识别阵列等,工作时通过内部LED驱动器驱动红外LED,向外发射红外线信号,当传感器阵列在有效的距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据获取,获取的数据存在寄存器中,同时手势识别阵列对原始数据进行识别信息处理,将结果存到寄存器中 [11] ,通过使能通用定时器TIM5,在固定一段时间内触发一次定时器中断,来读取手势模块寄存器中的手势识别结果。
本系统共设定了四种模式:向前“Go”,向后“Back”,向左“Left”,向右“Right”。手势识别模块对动作分别也对应向前、向后、向左、向右的四种手势做出判别。传感器阵列检测到物体时,目标检测模块对检测到的物体读取相应的数据,该数据保存在寄存器中,同时手势识别模块也会对数据进行处理并把数据存储到寄存器中,用户可通过IIC把寄存器内需要的数据读取出来,即可得到手势数据 [12] 。针对获得的数据匹配相应的控制指令,控制系统根据这些指令再进行运动控制,从而实现平衡小车的向前、向后、向左、向右运动。
3. 系统软件设计和测试
3.1. 整体结构
平衡小车的实物整体装配结构如图10所示,整体是一个上中下三层结构,手势识别模块在最上层,使得更好地捕捉手势姿态,主控部分和驱动部分使用铜柱在小车上层,电源部分放置在小车中部,编码电机放置在下层,合理地利用空间,整体结构紧凑。
1. 手势识别模块;2. 姿态检测传感器;3. 驱动板;4. OLED;5. STM32F4主控板;6. 电源;7. 霍尔传感器编码电机
Figure 10. The finished upper, middle and lower structure balance trolley
图10. 完成后的上中下结构平衡小车
主程序联合各个模块整体流程图如图11所示。平衡小车上电运行,首先对STM32内部的各定时器和GPIO引脚等进行初始化,通过MPU6050和电机对自身姿态进行判断,若手势识别模块检测到手势将识别到的结果发回主控进行处理,主控板处理手势识别的结果来改变小车的运动方向,在小车运动的过程中通过霍尔传感器采集并传输回的数据再判断小车是否倒下,若小车未倒下,则继续保持原运动状态;若小车倒下,则停止运行并回到初始化进程。
3.2. 手势识别测试
通过平衡机器人上安装的OLED显示屏,来查看PAJ7620手势识别模块是否成功唤醒并初始化。如图12所示,若初始化成功,则会显示“GestureReady”字样。若成功检测出向前,向后,顺逆时针转动的手势指令,则会在“GestureReady”上方显示相应识别结果。向前“Go”,向后“Back”,向左“Left”,向右“Right”。
3.3. 不同环境场景测试
本设计采用的是基于“光飞时间”的手势识别模块,自带发光LED,但其在不同光环境下的灵敏度是否有差别,还需要进一步的测试。通过OLED将手势识别结果显示出来。选择不同的场景测试环境,
(a) 识别到向左的手势 (b) 识别到向右的手势 (c) 识别到向前的手势 (d) 识别到向后的手势
Figure 12. Gesture recognition test results
图12. 手势识别测试结果
测试环境将包括,晴天室外,阴天室外,夜晚室内暖光灯近照,阴天室内,黑暗环境四种。对每种环境进行前后左右各超过400实验,得出实验结果如表1所示。从表中可以看到,环境场景光线越强,其准确率越低,在无光环境中测试准确率最高,其准确率在96%以上。因此可以发现,其手势传感器受光照影响较大,需要自带补光或采取其它有效措施,使得其在室外能够有效的进行识别和完成一些有意义的任务。
Table 1. Test results for different environmental scenarios
表1. 不同环境场景测试结果
3.4. 讨论
在测试时发现有时手势检测不灵敏,故从结构,程序,外部环境上,分析存在的问题。
结构上,手势识别模块直接由杜邦线支撑,导致模块位置出现旋转,弯曲。正确的模块安装应该传感器面朝上。
程序上,由于使用TIM5作为手势检测的中断输出,TIM5的中断间隔过长,导致手势检测在连续挥动手势时不太灵敏。故而减少中断发生间隔时间,使得手势检测状态刷新频率增加,来提高灵敏度。
通过分析表格各项对比发现,在无光环境下,手势识别正确率达到了96%以上的正确率,而阴天时,室内室外的正确率差别不大,而在晴天时阳光直射下,手势识别正确率低,在室内光照直射与阴天室内室外的识别正确率差别不大。
4. 结语
本文通过研发制作基于手势识别技术的二轮平衡小车,并经过软件和硬件方面的设计和制造,通过前后左右的测试,取得了较为理想的结果。可以发现,采用非接触式方法便能够控制平衡机器人的运动状态,因此这种人机交互方法还带有一定的意义和实用性。通过这种人机交互方法还能够拓展娱乐型的智能机器人,服务型机器人与人的交互,使机器人更加的智能化。
基金项目
江西省教育厅科学基金项目资助(GJJ200833)。
NOTES
*通讯作者。