十六届车赛直立车经验分享

十六届双车接力组青鲤一队
退役选手直立车软件部分经验分享
内部使用 个人看法 错误难免 敬请谅解

前言

直立车其实入门不算难,但要调好确实不容易。但实验室的直立车向来很牛,前人尤其是功哥的见解精到,让我们少走了不少弯路。本文分享十六届调直立车的经验,就调车的入门技巧,调车过程中的思路方法和注意的问题尽可能详实的写下来。具体程序代码不在文中展现。
关于直立车的入门介绍可以看下网上这篇《直立车控制我之处见》,从原理到算法介绍的很详细,通俗易懂。
链接: https://wenku.baidu.com/view/003b5031dc36a32d7375a417866fb84ae45cc3c4.html?qq-pf-to=pcqq.group

直立车原理看这篇讲的很透彻,但比较深奥《电磁组直立行车参考设计方案2.0》
链接: https://wenku.baidu.com/view/b4f20a745acfa1c7aa00cccd.html

在制作智能车过程中,需要继承和创新,并且利用好网上的资源。百度,CSDN,智能车官网技术报告,智能车QQ群,卓大微信公众号,逐飞、龙邱公众号,这几个地方可以找到几乎所有的资料和问题,前期博采众长,后期厚积薄发。
注:不要将思维局限于本文和文中的其他资料,任何方案都需要实验验证,以下资料仅供参考。实验室重在继承,更重在创新,要有打破常规的想法并敢于试验!

第0步 准备

直立车结构

今年直立车只跑电磁,其他学校也有用摄像头跑的,但结构大多跟纯电磁的不一样,他们的摄像头结构我称之为屁股朝前跑。当然如果车身不限长用屁股跑朝前跑应该更稳。我们选用屁股朝后的结构,是因为这样在限制车模总长时,能获得更长的前瞻长度,便于寻迹。这种结构为了平衡重心要尽量把器件零件放在车轴之后。非必要不要加配重,如果没有机械零位尽量改结构而不是加配重平衡,因为重量越大惯性越大,对直立车的控制越笨重。
电磁跑的优点是好调但速度上限低,摄像头跑的特点是不好调对光照要求高,但上限也高,对于三轮、四轮、全向来说是如此,结构好的直立车上限也比电磁高。支持创新。
在这里插入图片描述

直立车立得稳不稳看结构,在此强调直立车的结构一定要从前期就谨慎设计,三分算法七分结构一点都不夸张,车搭得好跟程序写的好一样重要,《我之初见》这篇文章里也多次强调结构的重要性。
再说关于硬件,软件不是硬件给什么就写什么,而是软件需要什么硬件就给什么,而且要看得长远,早做打算。比如软件需要的按键、拨码开关和屏幕,后期菜单调试会轻松很多;双电感和三电感怎么选;设计电量测量电路等等,都是根据需求来提要求。

串级PID控制

我们的直立车控制部分主要分为直立环和转向环两大部分,其中直立环分别为内环y轴角速度环、次内环角度环、外环速度环三级串级,转向环分别为内环z轴角速度环、外环电磁转向环二级串级。另外还有一些其他闭环比如转角闭环、编码器闭环等用以解决特殊元素。
在这里插入图片描述

这里说一下串级控制,即外环的输出计入内环的输入,或者说外环的输出控制内环的期望,能够很好的提高系统的抗干扰能力,且参数容易整定。而并级控制是两个控制环节互不影响的,比如电机被速度环和转向环分别控制,三轮车的速度环和转向环就是并级关系。
PID是对期望进行追随或者消除与期望偏差的控制,但期望应该因环境的改变而不同,所以串级外环就是形成内环的动态期望,对期望本身进行PID控制,车身的鲁棒性就会好很多,二级串级和三级串级就是引入这个概念。——以上两段引自功哥。
关于PID的介绍。这篇文章讲的很详细:
链接: https://blog.csdn.net/name_longming/article/details/115093338

https://blog.csdn.net/name_longming/article/details/115093338
好奇为什么角速度环是最内环而角度环是次内环,纠结不清的同学可以看这篇:
链接: https://blog.csdn.net/sinat_16643223/article/details/107537519

直立原理概述

直立车最特殊的就是直立,详细原理可以看《我之初见》,分析的很透彻。
先说直立状态。直立车有个很重要的常量是机械零位角度,手扶起车使车能刚好立住,此时陀螺仪输出的角度值就是机械零位角度,这个角度由车的结构决定,比如我们的车是30度作右。车放于地上,电机正转,车会往前冲俯仰角会变大;电机反转,车会往后倒俯仰角会变小。如果是实验室传统直立车结构,开始时俯仰角为0左右,那车要立起来便要令电机正转往前冲,直到电机给车身带来的力使俯仰角到达机械零位角度比如30度,然后若超过30度令电机反转,不断正反转使维持到30度,这样车就立起来了。实际上为了立得更稳,直立还多串了一个角速度环。
再说能立着跑。当期望角度==机械零位角度,直立车只会立在原地;当期望角度<平衡角度,车往前冲;期望角度>平衡角度,车往后倒。因此想让车立起来且往前冲,就需要让期望角度小于平衡角度。
直立环的最外环——速度环的输出,就是通过控制期望角度来控制速度。可以简单的理解为:期望角度=平衡角度+速度环输出。直立运行时速度环使期望角度前移,致使角度环控制后角速度期望前移,角速度达到期望后,因为输出的累积,使车身维持预期角度,就会有重力的水平分量出现,角速度输出就是为了平衡这个分力,输出的实际是力,但以车轮旋转的形式体现,所以就有了速度的体现。
最后直立环的输出加上转向环的输出,作为PWM作用于电机,就完成了控制。

在这里插入图片描述

综上,直立车模运动控制可以分为以下三个基本任务:

  1. 控制车模平衡:通过控制两个电机正反转让车维持平衡状态。
  2. 控制车模速度:通过调节车模的倾角实现车模速度控制,实际上还演变成通过电机的转速来实现速度控制。
  3. 控制车模方向:通过控制两个电机之间的转动差速实现车模转向控制。

第1步 控制车模平衡

陀螺仪

直立车最重要的传感器是陀螺仪。陀螺仪不管是ICM还是MPU,精度都能达到要求。旋转陀螺仪时,返回相应轴的角速度参考量,对角速度积分就是角度,反映旋转的真实角度。
摆动加速度计时,对应轴的重力加速度分量改变,利用反三角函数即可求出角度的变化。注意这个“加速度”并不稳定,由于车模本身的摆动所产生的加速度会产生很大的干扰信号,叠加在重力测量信号上使输出信号无法准确反映车模的倾角,同理车运动的加速度也不稳定,几乎不能用来衡量车真正的加速度。下面介绍角度融合的链接中有它的介绍。
用陀螺仪直接返回的角速度值会有角速度漂移常量,即车静置时会输出非0的角速度值,实际用的时候需要把这个漂移常量减掉。可以在每次开机未启动时采集得到漂移量把它减掉,也可以一次算好后面直接用,但最好过一段时间就纠正一下这个系数,会缓慢变化。因为我想让直立车开机不等待直接起步,所以我选择后者。

角度融合

角速度积分得到的角度会随时间慢慢漂移且只反映变化量,但很稳;加速度取反三角函数得到的角度不稳,但能反映真实角度。直立车整个过程都要用到角度这个变量,单纯角速度积分带来的漂移偏差不可忽视,所以需要用角度融合,将两者得出的角度进行滤波融合,取长补短,就能得到比较可靠的角度。
角度融合滤波的方法比较常用的有:互补滤波、二阶互补滤波、卡尔曼滤波、清华滤波、四元数滤波。陀螺仪和融合算法的介绍可以看这篇。文章中提到的融合算法大概知道即可。
链接: https://www.arduino.cn/thread-18392-1-1.html

我们的车用的功哥给的四元数滤波,很稳。初学直立建议先用互补滤波找感觉,互补滤波即看角速度和加速度哪一个权重大,结合上位机看融合之后的图像,调到曲线平稳且跟随真实值。

在这里插入图片描述(互补滤波控制过程)

互补滤波的调试过程可以看这个视频
链接: https://www.bilibili.com/video/BV1Y541177rD

不管是互补滤波还是四元数滤波,拿到后都需要重新调参,车不一样参数也不一样。
车刚开始启动时要注意,如果用融合算法得到角度值,会有从值比较小的角速度积分,逐渐过渡到真实值的过程,持续时间大概在0.3s到1s,因此刚启动的这段时间用融合角度不合适,而只用加速度取反三角函数得到的角度更真实。
若只是暂时利用角度处理别的东西,比如用来计算入环岛360度角度,入三叉60度角度,用角速度积分足够了。计算周期为2ms的积分系数大概是0.01248,慢跑跟剧烈晃动的跑积分出来的角度值有小偏差,因此不要太过信赖这个角度。

机械零位

融合之后得到角度,第一步就是找车的机械零位,让车保持自然平衡,接上屏幕看角度最方便。我认为前期调好零位,调车后期不必太过关心这个零位会不会变,因为后期是看速度而不是看立在原地的效果,再改动零位的话可能参数就要重调了。

平衡环

单纯立起来保持平衡只用到角速度环和角度环。前面的原理分析似乎只是角度环在发挥作用,事实上只用角度环确实可以立(二级串级),但加了角速度环更稳(三级串级)。
暂不引入速度环(忽略括号里的+speed_out),分析角度环和y轴角速度环串级控制:

直立次内环 角度环

类型:	位置式 P、D
周期:	2ms
输入:	Y轴角度Angle
期望:	机械零位AngleZero(+SpeedOut)
输出:	PitchOut
特殊处理:	输出限幅滤波

直立内环 Y轴角速度环

类型:	增量式 P、I、(D)
周期:	10ms
输入:	Y轴角速度GyroY
期望:	角度环输出PitchOut
输出:	GyroPwm
特殊处理:	输出限幅滤波

可以看出,外环的输出是内环的输入(也就是期望),内环周期最短,外环周期最长。
内环最终输出PWM,试想如果内环周期长,外环周期短会怎么样?

第2步 控制车模速度

编码器

编码器是反应车速的传感器,也可以用来测量车走过的距离。
编码器齿轮与电机齿轮关联,在电机转动的时候,编码器就会输出脉冲,单片机收到脉冲,根据轴转速不同时,在单位时间内收到的脉冲总量是不一样的,速度就表现在这里了。然后作为速度环的实际值与目标设定值做PID以实现控速作用。通常所说的512线、1024线指的是编码器选择一圈所得到的脉冲数。因此这个单位时间不一样,采集的速度也不一样,所以速度检测的周期放好位置就不要动了。我们的直立车的速度检测周期是10ms。

速度处理

速度环的输入一般是两个轮的编码器返回值相加取平均,所以动力输出也是两个轮一起控制。注意编码器返回值的符号,一般是一个取正一个取反,才能让左右轮速度同号,所以先空转试验,正负号写对再让速度环参与其他环的控制,否则可能正反馈导致越转越快。编码器返回的速度一般要做滤波处理,但低通滤波的历史权重不要给太大,避免太滞后。
直立车有个明显的毛病是翘轮严重,因为最终输出的直立环是同时作用于两个电机的,这就导致过弯时内侧轮起飞疯转,严重的话车会原地翘轮旋转,直到丢线或翻车。因此在输入级增加疯转处理措施很有必要。处理方法《我之初见》里有提到,在此简单列一下:1.速度限幅;2.速度变化率限幅;3.低通滤波;4.推测实际速度。第四个推测实际速度可以研究一下怎么写,我们的直立车经常翘轮疯转可能原因就是在这里没有做细节处理。

编码器的其他用途

根据脉冲量、周期、实际走过的长度,可以算出真实的速度m/s。具体方法为将编码器的脉冲值累加而不清零,测量车前进1m有多少个脉冲,设为X;通过编码器反应的速度值设为Y;周期为T,则保持当前速度1s内的脉冲数为Y/T。换算为m/s的公式则为(Y/T)/X。
同样根据X可测算赛道真实长度米,但跑起来编码器的值与理论值并不一致,与真实值相比大概差20%~10%,仅做参考。
用编码器在赛道相同位置上计距离(不考虑真实长度只看数值本身),值还比较稳定,大概误差5%左右,可以用作对赛道元素的特殊处理,比如计算出环距离,入三岔路距离,起跑距离等。

速度环

第一步让车立起来之后,在角度环里加上速度环的输出(括号里的部分),就形成了完整的直立环。这样速度环的作用就是改变期望角度,通过压低角度使车获得速度,速度环便有了调速的作用。
实际上采用速度闭环而不用开环的根本作用是防止小车受扰动(上下坡,转向等)突然加减速,以及减小电池电压对电机输出的影响,否则电池电压一变,参数就得重新调。
速度环的输出计入角度环的输入,或者说速度环输出控制角度环期望。随着速度逐渐接近期望,速度环增量输出的绝对值减小,期望角度减小。当速度达到期望速度时,因为增量式I的作用,虽然速度环的偏差减小为0时,但输出动力依然存在,然后系统趋于稳态。
若没有I的作用,车达到期望速度时偏差为0,因此输出也为0,失去动力车会减速,而不是逐渐达到期望速度进入稳态。当维持车速的动力与因为偏差而存在的输相等时,系统达到“假稳态”,此时车速与期望速度的距离就叫做稳态误差。
速度环一直是直立车最纠结的地方。加I会导致加减速滞后,且系统很难退出积分饱和,不加I又会导致稳态误差。我们的直立车用的是位置式,且I是不完全积分,因此导致了速度环有很大的稳态误差。速度始终跟随不上期望速度,但可以强行把期望速度拉高到一个不可能达到的速度来提速,大致平稳。

直立外环 速度环

类型:	位置式 P、I、(D)
周期:	100ms
输入:	编码器计数值SpeedNow
期望:	设定速度SpeedSet
输出:	SpeedOut
特殊处理:	输入低通滤波、输出限幅滤波、(不完全积分)

不完全积分指每次只积分偏差的前20项,这样能够尽可能避免控制的超调与积分饱和。
Ps:位置式速度和不完全积分出自功哥的大胆创新,确实解决了直立车“点头”和过冲的问题,但稳态误差导致调的是“假速度”,且可能使控制力度不够,速度环的作用并没有很好的体现。至于更好的速度环处理期待实验室后浪的继续创新。
速度环与平衡环构成完整的直立环,整体控制流程图如下。
在这里插入图片描述

起跑加速

起跑时由于有一个姿态调整过程,速度会很慢,因此起跑的一米内速度环给一个较大的固定输出可以让车更快进入状态。有利有弊。

第3步 控制车模方向

电感

赛道中心的漆包线,通电所激发的电场和磁场根据一定的规律在空间传播,其周围感应磁场的分布是一系列同心圆,圆上的磁场强度是相同的,且随着半径的增加而减小。10mH的工字电感和6.8nF的电容相并联,便可以捕捉磁信号转换成电信号,通过运放交给ADC采集,其数值就可以反映电感与漆包线的距离。安装对称的一对电感在前瞻左右,将左右电感采集值的差除以其和值,即差比和,它的大小和正负就可以反映车偏离中心线的程度。
电感安装的位置不同对磁场的感应强度也不同。横电感对直道敏感,斜八电感和竖电感对弯道敏感,建议配合使用。横电感在普通赛道起最主要的寻迹作用;斜八电感用来进环,同时辅助普通赛道寻迹;竖电感主要用来识别元素,三岔路主靠竖电感识别。注意电感位置对检测的影响非常大,建议调好之后就打胶封死。我们的斜八电感呈45度放置,但有的车友认为偏30度放置也有不错的效果。

调运放滑变

调运放的滑变需要谨慎。1.选择比较长的直道,将车放中间路段。2.看车屁股中心和前瞻投影中心对准电磁线,确保车绝对端正水平。3.前部垫一个固定高度的物体放在合适的位置支起小车,保证高度近似为车跑起来的高度。4.慢慢拧滑变,将两侧滑变值拧到ADC采集值为标准值。5.车掉头180度,重新上述操作,为的是排除两边赛道不对称造成的干扰。如果两侧电感差值较大,则缩小差值,继续掉头180度观察调节,直到正放和掉头放的差值近似且最小为止。
每次换新赛道之前记得把之前拧滑变时的电感值记好,与地面的高度也要记好。这个高度电感值一般调到1100~1800,具体调到多少合适,我们的车是看环岛入口处横电感有短暂的4095出现,这个值就差不多。

ADC采集处理

因为运放电路、供电电路、赛道电源信号等稳定性原因,ADC采集的值并不稳定,需要进行滤波处理。ADC用12位精度,对采集回来的原始值进行冒泡排序,然后掐头去尾加权平均,加低通滤波或者滑动平均滤波。
采集的数据建议不要放局部变量,如果变量太多可能会爆栈。

电磁转向外环

转向外环 电磁转向环

类型:	位置式 P、D
周期:	10ms
输入:	(拟合的)电感差比和
期望:	0
输出:	TurnOut
特殊处理:	输入拟合函数、分段PID、动态参数、输出限幅滤波

有的代码会把电磁环放在主函数while(1)循环里,这样控制可以认为是连续的,但我主函数里加了屏幕,串口,还有其他处理程序,为了方便调试和检测等原因,所有的控制程序我都放在定时器里,测试过与放在while里的控制并无差异。
D用的是 当前偏差-上上次的偏差,更有利于控制。
分段PID是指不同路段用不同的电感模型和不同的参数。动态参数指给的PD并不是固定的,而是随着偏差的改变而改变,也是为了更好的适用转向,除此之外再加上动态D,弯道越急偏差越大D越大。
差比和的模型比较经典,但不一定是最好的,实际上单用经典PID、差比和,上限并不高。根号下差比和、差比和差等都是他人用过的输入模型,各有优劣。
有人指出经典差比和的缺陷,并提出一种根号下模型:
链接: https://www.xianjichina.com/news/details_142876.html

未经实验,不要盲目使用。这里只是给了一个思路,文中其他的控制方法也要辩证的看待。
我用的横电感和斜八电感的加权平均, 同时在经典差比和的基础上进行三次方拟合(参考我之初见),起到了比较明显的效果:转向确实稳定不少。但也不要盲目照抄,建议做对比试验之后再决定用什么类型的。

拟合曲线

输入拟合我们是用三次方的拟合函数,对偏差进行处理,使差比和较小时偏差变化率小,差比和大时偏差变化率大。直道差比和小而弯道差比和大,因此这样直道是近似稳态,控制量小更平稳,弯道也有足够的控制力度。
可以先用excel模拟输入和输出的离散量,根据希望得到的结果生成大致的函数,再用 win10自带的计算器里的绘图进行手动调整,最终拟合不错的曲线。这里的曲线我用我之初见的就不错,没有改动。三岔路角闭环的曲线也是根据这个思路拟合改动的,有很大改善。

在这里插入图片描述

转向内环 Z轴角速度环

转向内环 Z轴角速度环

类型:	位置式 P、D
周期:	2ms
输入:	Z轴角速度GyroZ
期望:	TurnOut
输出:	TurnPwm
特殊处理:	输出限幅滤波、输出低通滤波

电磁环的输出作为角速度环的期望,间接控制转向。
最后的输出左右电机PWM一个加上、一个减去转向环的输出,两个同时加上直立环的输出,就可以寻迹了。
实际上单独用电磁转向环也能有效的转向,加了Z轴角速度环可以给转向一个比较大的扭转力,更稳定。但后期调参比较折磨人,转向环四个参都需要好好调整。
转向内环的输出低通滤波系数需要给大点,因为角速度不稳定需要平滑处理。我尝试过0.5倍的历史权重,没感觉明显的滞后,但消抖很多。

第4步 元素检测与处理

环岛

识别环岛不难,横电感和大于某个值就可以。十字路口可能会误判,但其附近电感差值比较大,可以借此排除。但环岛处理过程并不容易。
处理环岛的大致思路是分段PID。用横电感是进不了环的,斜八电感就能很好的入环,可能还需要加一点竖电感的权重才能更顺滑。因此检测到环岛之后,开始入环,差比和改成斜八电感,参数换成入环参数,同时陀螺仪角速度开始积分。等转到60度左右时,进入环中,差比和换成横电感和斜八电感的融合;到300度左右时,准备出环,差比和换成正常普通赛道的形式。编码器开始计算距离。差不多出环半米之后,转向环恢复到正常赛道。出环时把D给的很大可以让车不容易重复进环,可能会有一点效果。整个进环过程只是在外环电磁环中处理。
如果入环不顺利,就把竖电感的权重加大。
如果出环不顺利,就减速入环,我的方法是在入环时限制速度环的输出值为一个较小的定值,出环时恢复,因为直立的加减速很滞后,所以需要提前控制。还有种方法是角度闭环保持角度,与转向环并级控制,能尽可能避免再次入环。效果一般。

三岔路

三岔路的检测最不容易。最显著的特征为在路口前竖电感值会有一个峰值,因此竖电感大于某个值再结合其他检测方法就可以。检测条件不宜限制的太死,鲁棒性不佳。条件多而不紧最合适。注意坡道和十字可能会误判,通过一定办法排除,参见坡道。
如果电感位置变化,前瞻歪了,或者运放的滑变调过,很可能就进不去三岔路,也说明鲁棒性需要进步,检测条件太死。
检测到之后一整套转向环切换到转角环,输出直接作用于电机PWM。

特殊环 转角环

类型:	位置式 P、D
周期:	2ms
输入:	Y轴积分角度
期望:	60
输出:	TurnPwm
特殊处理:	输入拟合函数

注意这里的输入是积分角度,而不是姿态角度。从开始(当前角度作为0度),到积分60度,切换回正常的转向串级环。
输入拟合参考转向外环电磁环作用类似,函数参数可结合图像和实验效果更改。
因为三岔路是单电磁线,进入三岔路之后电磁环原来的参数很可能稳定,所以进三岔路最好用另外一套电磁环参数。

坡道

过坡其实转向环稳的很容易,但速度太慢肯定过不去。注意下坡之后如果是急转弯容易翻车,可以通过加强转向环、提前减速的办法通过,对其他急转弯路段也是同理。实际上过坡难也是速度环不行,因为我们的速度环存在稳态误差,改速度环参数使其匀速是比较困难的。
如果坡道比较陡很容易误判成三岔路,我的解决办法是对竖电感一定时间内采集的AD值作线性回归,求斜率值。如果是三岔路口,斜率的峰值会在检测之后出现,坡道则在误检测之前出现,所以如果出现峰值,跳过一段距离再重新检测三岔路就好了。用线性回归求的斜率值很好用,也可以用作很多检测。

十字路口

十字对电磁车影响不大,只要用横电感寻迹绝对平稳通过,如果过不去把横电感权重加大,也可能是电感歪了,也可能是入环失败导致寻迹依然是斜八电感。

停车

停车时不像触发保护一样直接PWM给0,因为失去动力时,直立车更可能由于惯性冲出赛道。
更合理的做法是停车时直立环给0,车自然倒地,但保持转向环控制继续寻迹,1s后待车自然停下再完全熄火。

检测总结

检测元素的方法有很多,1是相同电感的和,2是相同电感的差,3是所有电感之积。这三个都为静态电感的检测,4是电感斜率值,为动态电感值检测,5是万能的编码器计距离。如果有容易误判的元素,可以用编码器计距离跳过容易误判的点,也可以用在误判之前的点的特征值来跳过。

不管以后会新加什么创新元素,都需要用创新的检测和控制方法去应对。必要时打破常规,尝试前无古人的新方法。

第5步 调试与提高

菜单调参

我认为写一个菜单是很有必要的,用起来很爽很方便,尤其是到了调车后期,没有算法改动只是改参数数值,用菜单调参,省去了跑来跑去、接线、编译、下载的时间。
写菜单硬件上至少需要一个五向开关,有条件最好再额外加一个按键,指示灯可选。

说一下我写的菜单功能仅做参考:
1、 状态值显示。ADC电感信号、电量、电机温度、俯仰角、陀螺仪零漂系数、标志位状态、调试时间、接力次数等。
2、 参数查看和修改。包括PID,目标值等参数直接用按键进行加减调整。
3、 模式设置。单直立模式、单转向模式、无保护模式、角度调试模式、静音模式、发送接收模式等。
4、 Flash读取和写入。设置好的参数保存在flash中,下次开机可以读取到。Flash的写入偶有卡顿是正常情况,注意因为写入是先擦除再写入,所以卡住之后参数会丢失。
菜单怎么写智者见智,可以参考这个大佬写的菜单:
链接

无线模块与上位机

无线模块可以用逐飞的无线串口,也可以用蓝牙,WiFi,nrf等。上位机力荐vofa,观察图像很好用。至于用有线调试就很有局限性了。
用无线模块把观测变量如速度,电感值,PID输出等发送到上位机,方便根据图像修改程序。比如图像特点,抖动程度,检测条件,标志位记录,错误、误判发生的原因,输出限幅滤波的取值,都需要用无线传输。

保护与异常处理

我们的直立车的保护有:丢线保护,碰撞保护,堵转保护,翻车保护,疯转保护。
丢线保护:小车冲出电磁赛道后是很难重新回到赛道的,如果不紧急处理很有可能撞墙造成车毁人亡。处理措施为检测电磁小于一定值判为丢线,让小车进入保护停住。其他保护可以没有,但丢线保护一定要有。
碰撞保护:为了让小车撞墙或者车祸后及时止损,检测到车加速度异常,进入保护。这只是思路,实际程序里需要有足够的判断条件。
堵转保护:堵转保护与碰撞保护类似,是用速度值与PWM输出值之比确定的,一般来说其比值稳定,如果过小说明堵转。堵转保护是对车撞墙的另一种保险措施。其实更常见的是我经常忘记打开驱动开关,按发车键就会立即触发堵转保护触发报警。
疯转保护:一般用于卡路肩,无丢线也无碰撞的情况。速度与PWM输出的比值一定时间内变大且无波动,且航向角长时间无明显变化触发保护。
翻车保护:车过弯道太快经常翻车但没有触发丢线就会翻车疯转,检测到翻滚角异常触发翻车保护。

第6步 赛前准备

赛前不调车!
这是因为比赛之前的参数往往是不稳定的,比赛时更有可能出现意外。再者比赛前的调车强度是最高的,高强度调试更有可能出现硬件问题,明天就要比赛今天来不及修。所以要求赛前之前要狠调车,赛前至少前一天晚不调车。
临近比赛,前瞻一定要保护好避免碰撞,参数调一套最快的一套最稳的,考虑各种意外事故比如不能进环等,做出最不得已的备案。记得参数一定要在合适电量时调,不然就变隔夜车,第二天跑不了。
不管什么时候,做好程序备份都是很有必要的,最好每天备份,一天多次备份。

一些个人看法

关于位置式PID与增量式PID的选择

至于位置式增量式如何选择,常用的速度环转向环角速度环等可以参考祖传经验(我没做过试验,不确定祖传的是不是最合适的,网上也没有找到具体的依据,在此仅理论分析优点缺点,可以自己尝试改变)。
位置式与增量式在算法上的区别在于一个直接输出控制量,一个输出控制量的增量。
位置式对系统影响较大,反应迅速,一般直接对应执行机构的位置比如阀门开度。使用位置式要特别注意对I的处理。I是消除稳态误差的,但因为当控制量已经达到最大时,误差仍然在积分作用下继续累积,一旦误差开始反向变化,则系统需要较长时间从饱和区退出。用增量式则可以消除这个问题。
增量式由于只是计算增量,对系统影响较小,反应较位置式平缓。一般应用在速度环控制。直立的速度环与三轮、四轮用增量式不同,用的是位置式。功哥的说法是直立车的速度与姿态位置有关所以用位置式。增量式我也尝试过能正常跑,但没有比较出二者优劣,因为参数需要重新调整。
下面的链接或许能稍微解惑。PID作用及增量位置式比较:
链接: https://blog.csdn.net/qq1205512384/article/details/72614871

PID参数

P参数:加快调节速度,使之更快到达期望位置。缺点是P值增大的时候,曲线震荡幅度增大,频率加快,增大超调量。
D参数:给系统额外的阻尼,和超前控制作用,减少超调量,减小P带来的震荡,使系统的变化更小,更贴近设定值。但太大系统容易受到干扰,可能带来高频抖动,当受到干扰时,值越大曲线系统越不稳定,或者僵硬。
I参数:减少稳态误差,使曲线达到期望目标。缺点是增加调节时间,增大超调量。

参数真正的作用只能通过实验调试得出,因此理论作用只做参考。更详细的参考本文第0步关于PID介绍的链接,或者上文关于增量式位置式的链接。

总结:我认为参数摸索期应该大胆对于不同的系统可以根据系统的特征使用不同的参数组合,PD,PI,PID。例如速度控制使用PI控制,转向控制使用PD控制。这些只是经验,可能与实际不符,需要根据实际情况选择和根据实际试错。
给参数,打破常规的给,没出现副作用就往上加,最终目的是找到参数实际作用和作用区间。改参数必须控制变量,不能一次改很多参数。因为系统存在随机性,可能相同参数这次能跑下次就不能跑了,所以一定要多做几次重复实验。另外电池电压一定要时刻注意,保持健康值,过低一定要及时充电不然参数白给。比如7.6V和8.4V跑起来是有很明显差异的。

PID周期

PID执行一次的时间间隔暂且称为某环周期。
变化频率越高,惯性越大的控制对象,周期应相应缩短,以实现更好地控制,系统的抗干扰能力也会得到增强。但周期太小,积分和微分的调节作用会削弱,因为采样时间过短,前后两次采样的误差反应不出来。另外电路中的储能元件也会影响周期作用。

滤波

滤波在程序中应用很多,平均滤波,限幅滤波,低通滤波,滑动滤波,互补滤波……在输入级或输出级使用合适的滤波可以较大程度提高系统稳定性。但滤波也可能导致控制的滞后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值