抛砖引玉--消除零飘单车分享
扫描二维码
随时随地手机看文章
01 前 言
各位同学,各位车友大家好,我们是西华大学单车组消除零飘队,很高兴能和大家分享我们队伍备战第十七届全国大学生智能汽车竞赛平衡单车组的备赛过程,首先还是要感谢我的两个队友从始至终的坚持和指导老师的大力支持,如果没有他们的坚持我是不可能坚持下来的。
我们组由两个大二和一个大一组成,在备赛过程中我们一致认为平衡单车组备赛难度大,不易上手,因此此次将从介绍动量轮平衡单车原理开始,然后介绍硬件设计思路包括无刷驱动板的设计,最后介绍串级PID的原理和其参数整定以及图像处理元素我们的一些小思路,希望能够起到抛砖引玉的效果,帮助更多刚刚开始做车的车友。开源链接将会放到文章末尾。
▲ 图1.1 国赛前车模成品02 原理简介
分析动量轮保持平衡原理时,我们假设电单车受到非本我力矩导致单车的平衡状态发生了改变,与设想的运动状态出现不同时,ICM20602六轴陀螺仪会检测此时单车角度,与设想角度进行求差,动量轮系统则会根据主控传递过来的误差时时调整转速,进而产生控制力矩来平衡非本我力矩对姿态的影响,实现动量轮对电单车的姿态控制。
通过对单车的模型进行简化为一阶倒立摆模型我们可以得到以下结论。
- 1:是整车的质量;
- 2:是动量轮的质量;
- R:是动量轮的半径;
- L:是杆长。
当整个系统向顺时针方向倾斜 θ 角时,惯性轮以 的角加速度顺时针加速能使整个系统静止或绕原点 O 匀速旋转。所以,如果让整个系统由倾斜状态恢复平衡,则惯性轮角加速度必须大于上述公式。此时整个系统将以角加速度
加速向竖直平衡位置运动,从而实现平衡。
03 硬件设计
根据上一部分对原理的介绍,我们可以知道为了更好的平衡单车,我们希望动量轮整体质量占整个车身质量的比重越大越好,在无法改变动量轮质量的前提下,减少车身质量成了一个很好的选择,同样受限于单车的大小,我们希望单车硬件的大小能尽可能的小和轻,因此在还没有考虑使用无刷的时候,我们设计出了主控一体板,该主驱一体板供电可以从5.5V-36V。
▲ 图3.1 系统电源总设计框图稳压部分我们使用了TPS5430DDAR,该芯片输入电压范围广,稳压电压可调,输出电压纹波小,输出电流最大可到3A,可以为后续的LDO稳压器件提供小的电压差以减少LDO稳压器件的发热。电源总体设计图和PCB正反面3D视图如下图所示。
▲ 图3.2 一体板正面3D视图▲ 图3.3 一体板反面3D视图对于无刷驱动板。我们使用了英飞凌的TC264的作为主控单元,使用IR2181作为预驱芯片,国产EG2181可以代替,在选用MOS管的时候考虑到无刷电机正反转时会产生较大的电流,为了避免MOS被击穿,我们选用的国产的HYG006N04LS1TA TOLL,该MOS管耗散功率高达428W可以很好地满足较大功率无刷电机的使用,PCB 3D视图如图2.3所示。
▲ 图3.4 无刷驱动板PCB3D视图04 串激PID
串级控制系统是改善控制质量的有效方法之一,在过程控制中得到了广泛的应用。所谓串级控制,就是采用两个(或两个以上)控制器串联工作,外环控制器的输出作为内环控制器的设定值,由内环控制器的输出去操纵控制阀,从而对外环被控量具有更好的控制效果。这样的控制系统被称为串级系统。
PID串级控制就是串级控制中的两个(或两个以上)控制器均为PID控制器。在这里我也解释一下为什么要用串级PID。打一个很简单的比喻,拿倒车入库来说明,我们需要控制的对象是位置,但是我们操控的车的速度,当车离车库较远时我们希望车跑快一点,当车离车库进一点的时候我们希望车跑慢一点。所以控制思路是这样的,现获取当先位置和目标位置做期望速度差获得位置外环,位置外环的输出为内环速度环的输入,这样子我们可以使车平稳的到达车库。
同样的我们对于单车直立环也是这样的思路,我们实际希望控制的单车的角度,但是控制角度需要控制角速度,在此基础上在引入速度正反馈来加快整个过程的响应,图3.1为平衡环串级PID的流程图。
▲ 图4.1 平衡环串激PID控制流程图图中,最外环是速度环,其次是角度内环,最后是角速度内环。速度环的输出通过程序设置为0,目的是为了让动量轮的输出相对于动量轮的速度形成正反馈,这样当平衡车有倾倒趋势时,动量轮电机会输出更大的动能,使恢复力加强,让小车保持平衡。角度环和角速度环对于角度都是负反馈,这样可以使小车尽可能地稳定在设定平衡角附近。同时,为了保证内环更好地响应,我们让内环执行5次后,与之相应地的外环执行一次。
对串级PID的调试,我们可以对各个环的控制器依次调试。
首先是角速度内环,我们希望它可以抑制角速度,所以在单独调节角速度环时,我们可以随便给个P量,然后左右晃动小车,此时应该会有阻尼感,动量轮在角速度环的作用下,想要抑制我们的晃动,如果我们并没有感受到阻尼作用,而是有加速的感觉,那么就说明此时角速度环的方向是反的,我们可以给输出加个负号,让输出反向即可。
然后是角度环,我们希望它能根据角度的偏移,而固定输出一个转速,但是它的方向同样应该抑制角度的偏移,单独调试角度环时,我们可以给一个较大的P量,然后让小车由垂直状态稍微倾斜,也能感受到阻尼感,那么就说明方向正确。
最后是速度环,我们希望速度环不是抑制速度的增加,而是让速度更快,这样就可以让动量轮输出更多的角动量以达到平衡,速度环方向的测试方法也很简单,首先把输出限幅,然后给一个较大的P量,我们快速的波动一下飞轮,此时因为有了初速度,在速度环的作用下,飞轮应该越转越快。
初步调节以后,我们可以在通过相应的PID参数进一步调试增加系统的稳定性。在对于角速度内环,我们采用的PI控制,不使用D控制器是因为它会引入角速度的高频振荡。I参数可以抑制角速度的漂移,如果小车稳定是,动量轮依然有朝大体上朝一边转动的现象,可以尝试增加I参数改善;对于角度环,我们采用PD控制,不使用I控制器是因为多重I控制器是不必要的,而且会使系统响应延迟。D参数可以起到加速响应和预测响应的效果,如果小车在平衡位置不断地振荡,可以适当增加D参数,也可以同时适当地减小P参数,提高小车地稳定性。对于速度外环,我们采用单P控制,需要注意的是,P参数过大会造成系统超调,这时需要适当减小P参数。
在调试过程中,我们可以通过无线串口发送数据给上位机实时显示,进而达到更好的调试效果。
05 摄像头处理
对于三叉的处理,刚开始我们的思路和网上的思路大差不差,也是寻找左右拐点和中拐点,这个思路本身并没有很大的问题,但是对于单车可能不那么适用,尤其是在单车速度较快时(0.7m/s)以上的时候,在途进十字的时候以及出十字的时候,但是整车的倾斜角度较大,造成图像倾斜,在此时图像非常像三叉。
对于此种情况,我们提出了新的解决办法,在识别左右拐点后,引入图像每行的白点数和图像的宽度加以判断,在直道上我们会采集整个赛道的宽度并储存到数组中,需要使用的调用即可,三叉的整个图像宽度变化是先减少,再增大,利用这个思路,我们可以增加三叉的限制条件,以减小误判的可能。
在判断的基础上,很多思路都是补出左右边线,然后根据左右边线来找中线,我们的思路是单边巡线,在判断到三叉后,通过左边线加上赛道宽度的一半或者右边线减去赛道宽度的一半来补出中线,补线的时间可以是编码器积分也可以是定时(推荐编码器积分)。
对于环岛我们刚开始是使用纯摄像来判断,但是为了更加稳定的判断,我的建议是加上一个中电感来判断,通过摄像头来判断左右环岛,使用摄像头路过环岛的时候,我们会发现有抖动,在此时我们建议写一个函数,在左右两边某一边丢线过多时,我们使用另一边加减赛道宽度来补出赛道的中线,这样子就可以让小车比直的通过环岛,也方便电感的辅助判断,判断到左右环岛后,通过切换扫线方式来切入环岛,环岛内通过陀螺仪积分来判断出环岛,出环岛后切换扫线模式,让小车走直道,许多小车在小环岛的时候可能会内切赛道,我们建议在进入环岛时适当减小偏差来让小车更加平稳。
最后我们也给出为什么不使用纯电磁的原因,首先无刷电机对于电感影响较大,其次电感对于三叉的判断不太准确换场地后尤其明显,最后电磁会使单车的结构更加复杂。
06 总 结
感谢父母的支持,感谢队友的支持,感谢指导老师的帮助,感谢实验室伙伴帮助,希望智能车能越来越好,引入更加新颖的元素,促进智能车竞赛的发展。最后我想附上一张截图,很有意思的等式:
跑步跑的行 = 能熬夜能熬夜 =车调的好可以得出:
跑步跑的好 = 车车调的好