3/4解决了转向中AD采集太大的原因,是因为不能用循环不断累加全局变量,否则值会超量,目前浩哥以及能转向了,我比较没调,给不了队友任何建议,甚至他为何如此调以及他的程序我也不是很懂。所以接下来我必须要自己调,学会如何调,只能征用早上时间。
今晚把AD值都采集好了,用了滑动平均滤波和中位值平均滤波之后,归一化的值还是周期性大幅变动,看了凯哥程序全部用float类型,自己也改为float后还是如此,但没想到上车后转向环效果很好,不偏不倚,反应较快
5/4 把采集脉冲的全局变量从每5ms累加一次变成100ms采集一次,防止再出现全局变量累加超量的问题,发现效果不错,但实际上跑起来时还是会加速(只是比较慢),但加速不会那么快了。
现在左右轮死区改了(可以较好地跑直线),左轮摩擦大一些,改了后又更抖了,若非人为,基本不往前,老后退,,并且往前一段时间后因为直立环的原因又会往后退,究其原因是不能保持一个角度往前匀速。猜测原因。
(1)零点角度设置有问题:【1】从15.8->18.0,车不再往后跑,能较好地往前,但我猜测因为直立环和速度环没调好导致:保持倾角不变时能基本匀速,但猜测也许还是积分误差累加导致在地上跑时由于速度不断加直至过快往前倒,并且由于倒地速度更快而又直立起来继续往前,有一定概率能匀速往前跑,如之前何鑫那样【2】直立环特别软,并且恢复平衡较慢,需要大幅低频抖动几次才能平衡。综合猜测:由于直立环软,容易引起加速度环后倾角变大而加速跑
(2)直立环对速度环的影响:海南大学博客说中南也不可能让速度保持理想的匀速,而是用P控制,
6/4 回过头看卓晴调试视频找到了如何调试滤波参数的方法,这困扰了一整天,看来时间久了又忘了,现在就是人为干扰后会不停往前。
现在调到在平衡位置附近开电机能够比较稳定直立,也不抖,但是(1)左轮死区不够,(2)我的代码GRAVITY_ADJUST_TIME_CONSTANT正好是卓晴视频和文档的1/Tz,故当视频里Tz=4时意味着GRAVITY_ADJUST_TIME_CONSTANT=0.25,现在调节为GRAVITY_ADJUST_TIME_CONSTANT=1时存在高频抖动,D从0.05->0.1后几乎不抖动了,人为干预会前后跑,难以停住(卓晴好像也是如此),刚刚烧板子是因为突然车往前倒地,然后疯狂往前跑撞车导致的(也许是突然的加速导致电流过大而烧板子)。现在看来直立还是没调好,不加速度环而人为干预也会不停往前跑:(1)我认为与PWM限幅有关(2)PID(P不够大)和Tz还没调节好
任务:(1)看国二程序,再钻研卓晴视频(2)写好保护程序(3)对比浩哥程序
逐飞这两天发了直立车帖子,真是精品,我得改改我以往的学习方式,与程序无关或太高深的我总是走马观花,这样就是我经常对机械结构以及电路不懂的原因,知识面窄,但这本身是一种矛盾,人总是不容易看得远,因为心里没点逼数,故你需要记笔记。
机械结构方面:
轮胎:轮胎用软化剂处理,硬了摩擦力就小,胎缘用强力胶或502涂抹。另外建议新轮胎要用用软化剂,上一次软化剂后晾干,然后在赛道上用力摩擦,要均匀的摩擦表面,轮胎表面那层掉了后摩擦力就比较好了,摩擦后用水清洗一下,平时尽量用湿布保养着,不要让轮胎过于干燥,太干燥了轮胎就很滑。
电磁支架:电磁支架的长度,对于直立车而言,其转向非常灵敏,因此个人认为不需要太长的前瞻,而且前瞻太长也会导致小车容易甩尾,且伴随有前端电感震动幅度被放大。本次的样车前瞻也就在25CM左右,但是速度,从视频上看得出也不算太慢,出发点是保证其灵活性,所以认为支架不宜过长。
软件:该样车主要采用串级PID,内环为角速度,外环为角度,内环控制周期1ms,外环控制周期5ms,速度环控制周期50ms。角度融合采用互补滤波,大家也可使用卡尔曼滤波,不过相对来说计算量会大一点。串级PID可以大大的提高车模的稳定性,内环控制频率1Khz,想较于清华方案,控制频率提高了5倍
直立不能太软也不能太硬。软了小车抵抗外界影响的能力差,加入速度控制或转向控制后将会使小车出现较大摆动,太硬了也不行,会影响其他环的控制,所以其实说来直立车的控制就在于三个控制环的互相制约与平衡,此消彼长。
对于速度控制个人认为必然要对积分部分进行
串级PID:PWM=ANGLE_CONTROL_P*((CAR_ANGLE_SET-g_fCarAngle)+(CAR_SPEED_SETfDelta-g_fCarspeed)*SPEED_CONTROL_P)+g_fGyroscopeAngleSpeed*ANGLE_CONTROL_D. 其中CAR_SPEED_SETfDelta-g_fCarspeed部分也可以用一个常数代替(相当于控制在某一角度然后尽快到达该速度走)。
7/4 搞了好久的保护程序,浩哥一句话就解决了,重点在于把保护语句写在MotorOutput(),而不应该自己写函数。
8/4 经过一个多小时的仔细研究,只能用串级PID了,外环(直立环)一个P,内环(速度环)PID。按四轴的参考:先内环再外环(外环设置为0),外环一个P,越大越震荡(频率小,频幅大)。
积分分离方法:
差距太大时不积分
9/4 今天还是那个问题,但无论怎么给外环D,车都基本不抖,但是低频大幅摆动无法消除,外环P大了大幅摆动,小了慢速大幅摆动。
(1)把内环时间从5ms->1ms,基本没变化
(2)外环P改负了后方向是反的,说明原来没有问题
(3)外环D改负了也不行
(4)内环ANGLE_INNER_D*(Error-Error_Last)由负变正也没感觉
(5) 外环P给大了或小了都是低频大幅摆动,只是摆动频率不一样而已,D给小了不抖,给大了抖,但无法消除大幅摆动
(6)修改外环控制时间为从10ms——>5ms,改Tz,不行从内环调。都做了,内外环D即使都为0也抖,修改时间后也摆,只是摆动不如从前那么大幅度,Tz加到2后也不好了
(7)把内环微分由正改为负,发现在内外D不变时几乎不抖,但无论内外环D变小,都抖。代码有问题,内外环D增加反而不抖了,内环P增加稍微硬,也微微抖动,外环P增加更高频抖动
实在是不能调了,原理不懂,远离实际:在整定PID参数时,PID三个参数的大小都不是绝对的,而是相对的。也就是说,如果发现一个参数比较合适,就把这个参数固定死,不管别的参数怎么变化,永远不动前 面固定的参数。这是要不得的。
调节最好不要直接看车的现象,最好能看PID输出曲线和目标的对比
积分限幅:对累加的积分(还未乘积分常数)进行判断,超过时=最大值
今天目标:写好内外环代码,进行积分限幅和分离(先测数据才行),按飞控方式调节
11/4 今天研究国二程序发现:速度环并没有串级(东北电力大学),也是平均到100ms,不过SpeedControlOut=(Encoder_Least*(-V_P)+Encoder_Integral*(-V_I))-(((Encoder_Left+Encoder_Right)/2)-Movement+2900)*4;与传统PI控制略有不同
内环:g_fAngleControlOut=-ANGLE_INNER_P*(fValue-g_fGyroscopeAngleSpeed)+ANGLE_INNER_D*D_Error;(P与浩哥相反,且与东北电力好像也相反,但不如此则相反了,最后证明自己反了)
外环:fValue=(CAR_ANGLE_SET-g_fCarAngle)*ANGLE_OUTER_P-g_fGyroscopeAngleSpeed*ANGLE_OUTER_D;(P为负时大抖,应该反了,东北电力与我此时式子一样,用正的P证明是对的,但是直接给了100疯撞,先给了10,还可以,但是高频抖动。
按串级PID的调法,没有把内环P减小为一半,而是降低内环D从0.1-—》0.05,果然不高频抖动.
增加了外环P从10-——》15,又抖动(有点分不清高频抖动还是低频抖动,感觉是高频)但是比原来反应快(也就是硬),继续降低内环D从0.05---》0.025,和原来一样高频抖动
现在打算先增大外环D然后才是减小内环P,外环D从0——0.1,没有任何感觉,继续0.1---》0.3,同意抖,好像没有作用,打算改为负值,从0.3---》-0.1,抖动稍微减小,但依然存在,继续增大负值吗?还是降低内环D为负值呢?东北电力外环式子与我一下,但我居然类似高频抖动?
先增大外环负值,-0.1--》-0.3,居然方向都反了,看来东电是对的,就是正的。现在外环D改回0.1.
减小内环P从2---》1,看看硬度和抖度,不抖了,但极软,改回2
.继续降低内环D从0.025——》0.01,还是抖动,没什么感觉,我要的至少是这个硬度,不能再软了。
把内环D从0.01——》-0.03,还是高频抖动,改为0吧,还是没任何变化
(1)小总结:外环D:0.05~-0.03之间都没用,而且负值还会反方向,好像还是高频抖动的帮凶,内环D降低好像有点效果。接下来打算从 内环D 外环P 然后外环P调节
刚刚可能把内外环D给看错了,现在全部整定为0:居然还是高频抖动,猜测内环角速度应该加而不是减,国二就是如此,只是不知道国二的陀螺仪角速度,现在迷茫。。。。。。
浩哥说没D也抖,增D消抖,我先增加了内环D从0——》0.1,改为-0.1也没用,现在增到0.3,感觉抖动至少比-0.1好,改为0.6没什么感觉,改为1.2,跟0.6没太多变化,改为2.4,和0.6一样也没什么感觉,改为4.8依然如此,
说明内环D从0.3到4.8就是一样的,都是很抖
现在改为-0.5,好像和正的那些值一样,改为-1.5吧,好像现象也就那样,改为-3,这是最后的值了,
小总结:内环D从-3~4.8就是一路子的,没什么感觉,证明刚刚结论(1)没错,最终改回0.2,依然高频抖动,只是抖动没那么快了
接下来调节内环P:从2--》1.5,抖动和硬度都降了一半 ,从1.5——》1.8,硬度和抖动都增加30%
调节内环D:增加到0.5,抖动似乎减小20%,继续增加从0.5——》1,抖动似乎回到原来的感觉,最终先改为0。5
调节外环D:从0——》0.2,好像抖动还是增加了。
小总结:调内外环D基本都是增抖
调外环P:从15——》20,更硬了或者说反应更快了,但是反而更抖了,增大外环P到30,抖动得更加快了,但也更硬了
调内环P:从1.8——》15,低频大幅摆动,更加凶,从15——》1.5,硬度基本没怎么变,但抖动稍微减小(指的是人为干扰后和那么久以来的抖动基本一样,不人为干扰怎比较好),继续从1.5——》1.2,硬度其实稍微变小了15%,但是抖动却减小了40%,找到了点规律。从1.2——》0.9
小总结:从调节内环P中找到了规律,内环P0.3/减小,硬度减小20%,抖动减小40%,同时车一直没有出现昨天前天的干扰后大幅摆动,但是依然存在干扰后退
调节外环P:从30——》35,稍微更硬,但是一点不抖,说明抖是由于内环太大引起的,从35——》40,硬度增加得比较慢
调节内环P:从0.9——》1.0,微乎及微的抖,但是硬度好像也好一点点,最终选择0.97
调节外环:从40——》50,硬度好像增加了点,但抖动增加了20%
调节内环:从0.96——》0.9,还是抖
今晚总结:前期一直调内外环D,无论正负,都无法消除我那个所谓的高频抖动,最后找到内外环关系,增加外环P时得减小内环P才能消抖,但这也是种矛盾,增外环P加硬,减内环P消抖减硬,只是减的不如加的多
12/4 今天继续调外环P:增大外环P,车也会相应抖动,减小内环D效果不明显。增加内环P从60--》100,果然大抖,减小内环P从0.85——》0.5,确实减小了抖动但也软了,我一直想从D也减小抖动,内环D从0.5——》-0.5,好像变抖了,从-0.5——》-0.2,好像变好了一点,改为-0.05好像又变抖了,改为-1.0,好像抖动也没什么变化,但是灵敏度好一点,因为自己感觉不到变化,打算再改为-10,还是没太多感觉,最终改为-30,好像就是一种削弱硬度对抖动既不促进也不增加得东西,现在改为30,好像抖动微微变好但不明显,而硬度与-30相比没什么变化
外环D:增大外环D从0——》5,很明显对硬度无贡献但是增大抖度,改为-5,很明显方向反了,车大幅摆动起来
小结:内环D在-30~30都没什么改变,对硬度略微削弱,抖动基本无帮助,外环D必须为正,否则就是反方向,而且其值本身不宜过大,否则增加抖动。现在仿佛到了一条死路,内外环P相互促进硬度也相互增加抖动,要硬就抖,而内外环D对硬度基本无贡献,但会微微削弱抖动(当值合适时)
13/4 调了那么久的直立环发现还是浩哥原来的参数好用,为何自己花了三倍时间却调得不如他,太多猜测,总是给他定范围,比如外环P,其实也没有,不过现在原来参数还可以,今天看德增试车,结果没看到什么,然后晚上来得晚,一晚上啥代码也没写,就测了一下MPU6050数据,一开始测出180us(中断1ms)发现根本不够采集数据,把中断设为2ms时才发现是1.2ms才能采集完,原来每次中断会被同类中断打断,但是程序总体只要1.76ms
14/4 改中断时间为2.5ms,国二把内外环放在一起同时调用,而我和东电都是分开。现在把内外环1ms/5ms——>2.5ms/10ms,高频震荡。现在调参?但明明与参数无关,就是你程序里其他导致的。采集时间和滤波时间控制得够了。
做法:(1)改硬件IIC(2)调参数(3)测时间,可时间够了为何抖,内外环平滑滤波(4)内环从1变成2.5理应不该如此(5)该外环时间从内环的4倍到8倍,干扰时依然抖但是不动他时更稳了,
16/4 今天是个标志性的日子,不仅车模大改装而且轮胎也打磨和用软化剂处理了,现在用卓晴的直立环和速度环处理特别稳,说明原来就是机械结构的问题。不过原来速度环果然有问题,困扰了有三周之久的加速而不匀速问题,原来采集的脉冲值转换为速度后一直是-36.0导致速度环一直高速不变,原来是5ms采集一次脉冲进行累加出现值溢出
19/4 所谓的速度环值不变是因为采集之后立马赋0,程序没有问题,变量类型也没有问题,而是速度环的P太小,导致给速度而不能跑。昨天出现的转向环不寻线而疯转是因为程序漏了一个"(",自己却一直以为是变量出了问题。
今天归一化了一下发现还是没有归好,但比下午好多了,现在坡上不去是因为电池原因不属于自己问题,最大的问题是急弯票,非弧形弯也略微票,我最大的愿望是补偿这两部分,参考了东北电力还是没什么感觉,因为我不能把他的速度控制生搬硬套,现在解决方案为:(1)增加中间电感(不过对他的改善线性区域的作用没什么明显感觉)。结果:给了中间后过弯效果被削减了,容易出线,中间电感作用是为了改善车模倾角抖动时偏差斜率的大变,但我车稳不存在这现象,故没用。
20/4 智能车论坛:(1)方向控制不要分段,增加调参的困难,主要集中在控制策略和算法(2)电感是一字而不是十字(3) 偏差=(sqrt(x1)-sqrt(x2))/(x1+x2)。 单调性也跟楼主的差不多(不过电磁真正的难度并不在这里。真正影响方向环的因素是角度!!!!! 而不是位移)。(4)
大好,我们用的也是开根号的算法。但有个问题,在电感值都很小的时候,开根号算法算出来的偏差波动较大。请问大佬是怎么解决的?还有大佬说的虚拟斜电感,我们是根据中间电感算的偏差值和竖直电感算的偏差值根据各自电感的和以及中间电感来融合的,不知道这样好么?我个人感觉根据电感和来融合容易出问题,但还没想到好的办法
22/4 今天转向环个人感觉够硬,但速度环控制不住,高速下还是会冲出赛道,个人觉得转向环差不多了,重要的是把速度控制好,今天加速太快了,也与平衡角度给的低有关。现在解决方法:(1)速度输出限幅,测量所能到的速度(2)解决蓝牙调参和数据接收(3)转向环再调一下偏差微分值,给大试试(高速跑时左右抖动,应该是过冲),这一块感觉难调,暂时不太想
25/4 这三天来一直在解决速度环,期间不断参考湖北工程学院和东北电力的速度控制方案,最后注意到浩哥说速度有正负,都是因为一直在想“速度到底是接近目标速度还是远离呢”,最后发现编码器有判断方向的IO口才知道自己对理论掌握不足。现在解决速度环了,但三环整合的问题让我一直调参(先是转向,然后转向过急弯通过增大偏差微分解决了。同时还增大了转向P才解决,但是同时出现直道上左右摆动问题,通过调节转向陀螺仪D,发现该值大了高频抖动,小了大幅抖动,最后把值稳定在1.5~2,同时把直立环从53——>130,过急弯效果不错,还是直道大幅摆动,感觉是过冲导致,在认为摆动时确实有略微过冲,但调转向环的微分都不太有效果,现在对转向环三个参数稍微有感觉,而直立环软了过坡道就容易倒说明我程序的综合能力还是很差。
接下来60%写环岛,20%学算法来解决过弯 摆动 提速问题,10%调参。
27/4 昨天一天几乎没收获,想了两个多小时算法,1小时调参数,最后代码没写参数也没调,我认为是要用数据说话而不是空想。今天要环岛,三电感不行肯定是自己只会硬调而不会看数据,一直沉迷于车的表象。
我转向环已经很硬了,但依然出去,巡线稳不了,转向环过冲,进而碰路肩倒地