前两天自己凹了一个双旋翼横列式无人机的模型,最近一直在调试PID,对着webots的波形图总在考虑如何得出一个适用于所有单级PID的PID调试方法。
抛弃绝大多数平衡车和PID原理讲述,换个视角看PID
- 回顾PID三项
- 调试
- 比例项
- 微分项
- 重复以上两步
- 积分项
- 总结
回顾PID三项
P比例项:提高响应速度,纠偏的主要来源。
D微分项:抑制超调,提高稳定性。
I积分项:消除静差(但是会带来不稳定性)。
之所以会把PID重新排成PDI三项,是因为一般PID的调试实际是按PDI的顺序,有时候甚至不会加I积分项。
调试
比例项
那么,对于一个任意的单级PID系统,应当如何看波形?如何根据波形判断调试哪一项?
首先大家都知道应当加P项直至低频振荡。
但注意:重点是低频振荡,而不是“在目标周围震荡”。能够在目标值周围震荡固然很好,但有时候你的系统并不一定有足够的能力仅靠P项达到在目标值周围稳态震荡,而继续提高P项或许能够达到目标值,但这时候却会使系统失稳。低频振荡是P项的固有特性,稳定时无论幅值大小一定会震荡,否则只有失稳。当进入低频震荡时,调节平均值有可能与目标值有相当大的距离。这一段需要用I积分项来填充,后续会提及如何确定I项。
对平衡小车而言,小车会来回摇摆不定(不是抖),频率大概可以在1s一到两次左右,但无法在0度维持住(例如有0.1或-0.3度);对定高无人机而言,无人机会在一个高度附近上下起伏,但其起伏平均值可能低于设定的目标值。
微分项
第二步,提高D项抑制超调。
这一步的目的意在将低频振荡抑制到稳定,** 注意 **这一步依然不是为了抑制到目标值,只要抑制到一个稳定值,就达到了要求。此时继续慢慢提高D项,低频震荡次数会越来越少。无须等到系统高频震荡,可以考虑看波形图仅震荡1~2次即可。
重复以上两步
现在可以根据你的系统充分压榨性能了。达到稳态后提高P项再次进入低频震荡,并再次提高D项进入稳态,此时的新稳态会比原稳态更为接近设定的目标值,且起动速度更为迅速。重复操作直至完全跟踪或有一点点差距。
积分项
终于可以设置积分项了,这一步并非必须步骤。积分项对系统稳定性的影响极大,因此只需要加相比于P和D极少的一点点。要确保积分项是为了在进入稳态时更精确的跟踪目标值,因此要合理设置积分项。
在这之前可以多提高D项尽可能使得系统不再震荡,甚至波形图可能看起来就像一个一阶系统的阶跃响应。此时可以提高I项直至稳态时完全跟踪目标值,无须关心这个时候系统的过渡过程的表现。
总结
PID调试可以看做一个做馒头的过程:揉面,水(P)多了加面(D),面多了加水反复循环;如果你想吃好吃的馒头,可以考虑面里加牛奶(I),但这同样会让面变稀,牛奶加多了面也不好吃,牛奶不能代替水,只需要少量即可。
本文的PID调试方法完全出于个人学习经验和调试经验,具体问题仍然需要落实到实际操作中具体分析。如有谬误欢迎指出讨论,不胜感激。博主本人不一定时常在线,有可能划水当死鱼,但刷到一定会看,感谢阅读。