4、PID控制入门:比例-积分-微分控制原理、在轨迹跟踪中的应用、优缺点分析
各位同学,今天我们聊点实在的——PID控制。
说实话,在强化学习里,很多人一上来就搞各种花哨的算法。但我个人习惯,先看看经典控制理论能解决什么问题。PID,就是那个你绕不开的经典。它简单、有效,而且你想想看,工业现场90%以上的回路还在用PID。所以,搞轨迹跟踪,不懂PID,说不过去。
4.1 比例-积分-微分控制原理
PID,说白了就是三个字:P、I、D。它们分别代表比例、积分、微分。这三个家伙各司其职,配合好了,能把你的系统调得服服帖帖。
先看公式,这是核心:
u(t) = Kp * e(t) + Ki * ∫e(τ)dτ + Kd * de(t)/dt
其中:
- u(t):控制器的输出,比如你给电机的电压。
- e(t):误差,也就是目标值减去当前值。比如你想让小车走到位置1,它现在在位置0.5,那误差就是0.5。
- Kp:比例增益。
- Ki:积分增益。
- Kd:微分增益。
咱们一个一个拆开看。
4.1.1 比例控制(P)—— 最直接的反馈
比例控制,就是误差越大,你给的力越大。这很符合直觉吧?
比如你开车,离目标还有100米,你猛踩油门;离目标还有1米,你轻点油门。这就是比例控制。
但比例控制有个毛病——它会产生稳态误差。什么意思?就是系统最后会停在离目标还有一点点距离的地方,就是过不去。我在项目中遇到过,调一个温度控制系统,Kp给大了,系统震荡;给小了,温度永远差2度。嗯,这就是比例控制的局限性。
4.1.2 积分控制(I)—— 消除稳态误差
积分控制,就是看误差的“历史账”。它把过去所有的误差累加起来,只要还有误差,积分项就会一直增长,直到把误差彻底消除。
你想想看,比例控制搞不定的那2度温差,积分项会慢慢累积,最终输出一个额外的控制量,把温度顶上去。
但积分也有坑。我记得有一次做无人机悬停,积分项调得太大了,结果无人机开始“低频振荡”,就是那种慢慢晃悠的感觉。后来我把积分限幅加上,才稳住。所以,积分不是越大越好。
4.1.3 微分控制(D)—— 预测未来
微分控制,看的是误差的变化趋势。误差在快速增大?微分项会给出一个反向的力,阻止它继续变大。这就像你开车看到前面红灯,提前松油门一样。
微分项能增加系统的阻尼,让系统更快稳定下来。但它对噪声特别敏感。为什么?因为微分本质上是求导,噪声一进来,导数会变得非常大,控制器就乱跳了。
我曾经在一条生产线上,传感器信号有点毛刺,微分项一加上去,执行器就开始高频抖动。后来加了个低通滤波器,才把问题解决。所以,用微分之前,先看看你的信号干不干净。
核心总结:
- P:解决“现在”的问题,但会有稳态误差。
- I:解决“过去”的问题,消除稳态误差。
- D:解决“未来”的问题,抑制超调和振荡。
4.2 在轨迹跟踪中的应用
好了,理论讲完了,咱们看看PID在轨迹跟踪里怎么用。
轨迹跟踪,说白了就是让机器人沿着一条预设的路径走。比如让小车走一个“8”字形,或者让机械臂画一个圆。
在轨迹跟踪中,我们通常把PID用在两个层面:
- 位置环:控制机器人到达目标位置。
- 速度环:控制机器人以期望的速度运动。
举个例子,让小车沿着直线走。我们给小车一个目标位置序列,比如每隔0.1秒更新一次。PID控制器根据当前位置与目标位置的误差,计算出控制量(比如电机的PWM值),驱动小车前进。
代码实现其实很简单,下面是一个离散化的PID控制器:
class PID:
def __init__(self, Kp, Ki, Kd, dt):
self.Kp = Kp
self.Ki = Ki
self.Kd = Kd
self.dt = dt
self.integral = 0
self.prev_error = 0
def update(self, target, current):
error = target - current
self.integral += error * self.dt
derivative = (error - self.prev_error) / self.dt
output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative
self.prev_error = error
return output
你看,就这么几行代码。但在实际项目中,你还需要考虑:
- 积分限幅:防止积分项无限增长,导致“积分饱和”。
- 输出限幅:控制器的输出不能超过执行器的物理极限。
- 微分滤波:对微分项做一阶低通滤波,抑制噪声。
避坑指南:
我曾经在调一个四轮小车的轨迹跟踪时,发现小车总是走“蛇形”。后来发现是微分项没加滤波,轮子上的编码器噪声被放大了。加了个截止频率为10Hz的低通滤波器,问题就解决了。所以,微分项一定要配合滤波使用。
4.3 优缺点分析
聊了这么多,咱们客观地看看PID的优缺点。
| 优点 | 缺点 |
|---|---|
| 结构简单,易于理解和实现 | 对非线性系统效果不佳 |
| 不需要系统的精确数学模型 | 参数整定需要经验,耗时 |
| 鲁棒性较好,对模型误差不敏感 | 无法处理时变系统和强耦合系统 |
| 工业应用广泛,资料丰富 | 对于复杂轨迹跟踪,精度有限 |
我个人觉得,PID最大的优点是“够用”。在很多场景下,你不需要复杂的算法,一个调好的PID就能解决80%的问题。但它的缺点也很明显——它本质上是一个线性控制器,对于非线性、时变、强耦合的系统,比如四足机器人、无人机特技飞行,PID就有点力不从心了。
这时候,强化学习就派上用场了。但那是后面章节的内容。今天,先把PID吃透。
注意:
不要迷信PID,也不要轻视PID。它是一个工具,关键看你怎么用。我见过有人用PID做倒立摆,也见过有人用PID做卫星姿态控制。工具本身没有好坏,只有合不合适。
4.4 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
这张图很直观。PID的三个分支各司其职,组合起来就能完成基本的轨迹跟踪任务。但记住,这只是入门。后面我们会看到,当轨迹变得复杂,或者系统存在强非线性时,PID就不够用了。那时候,强化学习会登场。
好了,今天的内容就到这里。PID不难,但想调好,需要耐心和经验。多动手,多试错,你会有感觉的。
可可精品资料库