关于PID算法的一些调参经验总结
前言:
该文为经验学,经验学并不为理论。
不涉及理论,并仅分析过程中遇到的各种问题,以及问题的解决方法。
目录
一、PID算法理解
PID(proportion integration differentiation)其实就是指比例,积分,微分控制,其中Kp为比例系数,Ti为积分时间常量,Td为积分时间常量。相信来看这篇文章的朋友都不是来看PID算法理解的,但想了想,还是在这里贴出一篇写的十分不错的关于PID算法理解的博客:https://blog.csdn.net/qq_25352981/article/details/81007075?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162315522816780357292756%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162315522816780357292756&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-81007075.pc_search_result_before_js&utm_term=PID&spm=1018.2226.3001.4187方便那些完全没有入门调参经验的朋友进行参考
二、怎么去调?
(调参顺序KP->KD->KI)
这听起来像是个憨批问题,因为KP,KI,PD三个值就跟魔法数字似的,调的好就是调的好了,有时候差个0.1又相差特别大拿这个图为例,就我们其实现实中想要进行PID的粗调,是不可能这样的调参顺序的一般就是KI,KD置零之后先调节KP那么重点来了,怎么样去判断KP,KI,KD三个值有没有调好呢,我假设你PID的算法没有问题,硬件也没问题,那你必然能看到现象,那现象便是粗调唯一的依据
三、粗调KP
我们这里就拿这幅图中的原本的目标值1,作为我们预设的目标值,观察这幅图,我们发现,在KI和KD不变的情况下KP从0到5的过程中(假设这个KP等于5时便是我们所需要调的KP的最佳值),曲线是从不能达到目标值的状态到一定周期内必定达得到目标值,简而言之就是:调好的KP,在一些比较常见的现象中表现为:如水温的保持中表现为温度不断上下浮动,且浮动的频率一定,最大值与最小值相差较小,又如在平衡车的调节中会导致平衡车一点点偏角就导致舵机打角程度十分巨大,跑起来就是左右左右不断晃动,但又勉强能跑。
四、粗调KD
既然你都看到这了,我就假设你KP已经粗调完成了好吧那么就到了KD的调节环节了,KD这东西,比KP更加魔法,KP的参值可以十分明显的从硬件的运作中看出来,但KD是真的只能让水去加热,车去跑了其中要注意的就是KD的值要远小于KP,因为这动图调节了KP->KI->KD进行的调参,所以表现出调好的KP和调好的KD相差不大的样子我就把现象撂在这,当KP调好,KI为零,KD调节过大时,水温会在达到目标值后猛地上升一下,然后回降一些,平衡车则会在你倾斜车身后猛地打死舵机,然后回过来一点当你KD调好,那是什么情况?那就厉害了,水温可以保持一定温度挺久,平衡车可以跑得动了,对,跑得动了,现象很简单
这里放出我调节平衡车时的一个参数设置,给大家一个KP和KD应该相差多少的参考
五、粗调KI
诶,说实话,你水温控制能稳定了,平衡车能跑了,你还调它干嘛?话粗理不粗的,我都觉得其实PD调节就十分足够,KI置零和放0.0001区别不大,简单地说就是,KI不理,再见
六、目标值调节
这个很重要,就以我调节平衡车的PID为例
该车的车身,大家都可以看到是后轮驱动,电机装在左边,导致了平衡车的重心偏左,这在调节参数中表现出了,倒地总是左边倒,跑起来了也是往左拐好啊,后来没办法只能去调它的舵机中值和目标值那个-2和2.5便是人为增设,分别就是使起跑时舵机能摆得更正一点还有就是平衡车开跑了就让它输出的舵机PWM向右,以达成消除电机导致的重心偏移
总结:
虽然是粗调,但说实话胜在一个快和不存在复杂的看波操作,但还是很需要调节者耐心地去调节