PID控制基础:比例、积分、微分的工作原理与数学表达
说到导航调参,PID 是绕不开的核心。我见过不少新手,上来就调三个系数,结果越调越乱。其实搞懂 P、I、D 各自在干什么,调参就成功了一半。
说白了,PID 就是一个控制器,它盯着「当前值」和「目标值」的差距,然后算出一个控制量,让系统尽快、平稳地到达目标。你想想看,无人机悬停、车辆循迹、云台增稳,背后都是这套逻辑。
比例控制(P)—— 最直接的响应
比例控制,就是根据误差的大小,按比例输出控制量。误差越大,输出越大。
数学表达很简单:
u(t) = Kp * e(t)
其中 e(t) 是当前误差,Kp 是比例系数。
我在项目中遇到过一件事:有个飞控悬停时总是上下晃。我一看,Kp 设得太高了。比例控制虽然响应快,但过大的 Kp 会让系统震荡,甚至发散。
核心要点:比例控制能快速减小误差,但无法消除稳态误差。纯比例控制下,系统最终会稳定在一个接近目标、但仍有偏差的位置。
举个例子:你开车想保持 100km/h,如果只用比例控制,遇到上坡时车速会掉到 95km/h,然后一直停在 95,回不到 100。这就是稳态误差。
积分控制(I)—— 消除残余偏差
积分控制,说白了就是「算总账」。它把过去所有的误差累加起来,只要还有残余误差,积分项就会一直增长,直到误差被消除。
数学表达:
u(t) = Ki * ∫ e(t) dt
积分项的作用,就是干掉比例控制搞不定的那点稳态误差。回到刚才开车的例子,加上积分项后,车速掉到 95 时,积分项会慢慢累积,持续增加油门,直到车速回到 100。
注意:积分项是把双刃剑。Ki 太大,系统会超调、震荡;Ki 太小,消除误差的速度太慢。我曾经在一个农业无人机项目上,因为积分饱和导致降落时反复弹跳,差点炸机。
这里有个常见问题:积分饱和。当执行器已经饱和(比如油门已经推到最大),积分项还在累加误差。等误差反向时,积分项需要很长时间才能退回来,导致系统响应迟钝。
我的习惯:在导航系统中,我通常会给积分项加限幅,或者使用条件积分——只在误差较小时才启用积分。这样既能消除稳态误差,又不会让积分饱和搞乱系统。
微分控制(D)—— 预测未来趋势
微分控制,看的是误差的变化率。误差在变大,它就提前输出反向控制;误差在变小,它就减少控制量,防止超调。
数学表达:
u(t) = Kd * de(t)/dt
微分项的作用,相当于给系统加了「阻尼」。它让系统更平稳,减少震荡和超调。
但微分项有个致命弱点:对噪声极其敏感。传感器信号稍微有点抖动,微分项就会放大这些噪声,导致控制输出剧烈跳动。
实战经验:我在调试一个激光雷达导航的 AGV 时,加了微分项后小车反而左右摇摆。后来发现是雷达数据有微小抖动,微分项把这些抖动放大了。解决办法:先对误差信号做低通滤波,再送入微分项。
PID 的完整形式
把三个部分加起来,就是完整的 PID 控制器:
u(t) = Kp * e(t) + Ki * ∫ e(t) dt + Kd * de(t)/dt
在数字系统中,我们用的是离散形式:
u[k] = Kp * e[k] + Ki * Σ e[i] * Δt + Kd * (e[k] - e[k-1]) / Δt
其中 Δt 是采样周期。这个公式,就是你在代码里实际要写的东西。
三个参数的直观对比
| 参数 | 作用 | 过大后果 | 过小后果 |
|---|---|---|---|
| Kp | 快速响应误差 | 震荡、发散 | 响应慢、稳态误差大 |
| Ki | 消除稳态误差 | 超调、积分饱和 | 稳态误差消除慢 |
| Kd | 抑制超调、增加阻尼 | 噪声放大、系统抖动 | 超调大、系统不稳 |
PID 控制的核心逻辑
下面这张图,展示了 PID 控制器在导航系统中的位置和信号流向:
调参的先后顺序
我个人习惯的调参顺序是这样的:
- 先调 Kp:从小到大增加,直到系统出现轻微震荡,然后退回 60-70%
- 再加 Kd:抑制震荡,让系统更平稳。Kd 从零开始慢慢加,直到震荡消失
- 最后加 Ki:消除稳态误差。Ki 要小,一点点加,观察系统是否出现超调
一个小技巧:如果你不确定当前参数是否合理,可以给系统一个阶跃输入(比如突然改变目标位置),观察响应曲线。好的响应应该是:快速到达目标、没有或只有少量超调、最终稳定在目标值。
常见误区
- 误区一:三个参数一起调。这就像同时拧三个螺丝,你根本不知道哪个在起作用。
- 误区二:Kd 越大越好。微分项不是万能的,过大的 Kd 会让系统对噪声敏感,反而更不稳定。
- 误区三:忽略采样时间。数字 PID 中,采样时间 Δt 直接影响积分和微分的计算精度。采样时间不稳定,PID 性能会大打折扣。