第十五篇,Apollo之PID积分抗饱和

一、楔子

传统PID,抗饱和基础办法为在末端做限幅,这种方法只是对最终输出做了限制,虽然不伤执行器,但因为不能使积分模块很快退出饱和状态,末端输出会较长时间保持在峰值,动能输出很大,而且不是正常的控制过程;

再者对积分模块加限幅,本质其实和上述一样。

位置:apollo-mastermodulescontrolcommon

文件夹下有传统pid_controller、反算积分抗饱和pid_BC_controller、钳位法积分抗饱和pid_IC_controller。

Apollo的PID控制用在速度控制和转向控制。

二、BC

抗饱和,英文anti windup,简称aw或AW。

反算法的几个步骤:

  1. 首先计算一次完整PID得到初始控制量u;
  2. 然后根据PID输出饱和值判定是否对u做钳位;
  3. 根据钳位规则对积分项做修正;
  4. 用修正后的积分项重新计算PID;
  5. 输出钳位,结束。

根据结果“反”回去重新计算了PID,所以称之为反算,backward。

感谢大神的分享:

三、IC

钳位法也称为条件积分,简单方便,使用更加广泛。

条件嘛,if-else,满足条件就用不满足就不用,简单粗暴。

原理是对积分值进行限定,即系统误差过大时本来P就很大,积分也容易变大甚至饱和,所以干脆停止积分。

  1. 首先计算一次完整PID得到初始控制量u;
  2. 若u超出PID饱和限度且与error同向,则本次积分过大,取消其作用一次;
  3. 后续按常规PID执行。

感谢大神分享:

经验分享 程序员 微信小程序 职场和发展