4、PID控制基础:P、I、D三个环节的作用、位置式PID与增量式PID、参数整定方法
各位同学,欢迎来到第四章。
说实话,PID控制是车辆运动控制里最经典、最实用的算法之一。我做了这么多年控制,从早期的简单循迹到后来的高速车道保持,PID始终是那个最可靠的「老伙计」。今天我们就把它彻底聊透。
4.1 P、I、D三个环节,到底在干嘛?
先别急着看公式。我们用一个场景来理解:
你开车,想保持在车道正中间。眼睛看到偏了(误差),手打方向盘(控制量)。这就是PID的雏形。
4.1.1 P(比例)—— 看当下
P就是「偏多少,打多少」。偏了1米,方向盘打10度;偏了2米,打20度。简单粗暴。
但有个问题:如果只用P,车永远回不到正中间。它会停在某个偏一点的位置——这就是稳态误差。我在做早期AGV小车时吃过这个亏,车总是歪着跑,怎么调P都不行。
核心公式: u(t) = Kp * e(t)
Kp越大,响应越快,但容易震荡。Kp太小,反应迟钝。
4.1.2 I(积分)—— 看过去
I就是「把过去的误差累积起来」。你偏了10秒,我就把这10秒的误差加起来,额外加一把力把你拉回来。
说白了,I就是用来干掉稳态误差的。P搞不定的那点偏差,I来收尾。
注意: I不是越大越好。我曾经在一个项目中把I调得太大,结果车在弯道里疯狂振荡,像喝醉了酒。积分饱和是个大坑,后面我们会讲。
4.1.3 D(微分)—— 看未来
D是「看变化趋势」。你正在快速靠近车道线,D会提前预判,提前打方向盘。说白了,D就是给系统加阻尼,让它别那么「冲」。
我习惯在高速场景下多用D,它能有效抑制超调。但D对噪声特别敏感——传感器抖一下,D就会乱跳。
我的经验: 实际项目中,P和I是主力,D是辅助。很多场景只用PI就够了,加D反而容易出问题。
4.2 位置式PID vs 增量式PID
这两个概念,很多初学者容易混淆。我当年也花了点时间才搞明白。
4.2.1 位置式PID
位置式PID直接计算「当前应该输出多少控制量」。公式长这样:
u(k) = Kp * e(k) + Ki * Σe(i) + Kd * [e(k) - e(k-1)]
特点:
- 输出是绝对值,比如「方向盘打30度」
- 需要累加所有历史误差,容易积分饱和
- 一旦计算错误,输出会跳变,很危险
我在做无人驾驶线控底盘时,位置式PID用得比较多。因为执行器(比如转向电机)需要绝对角度指令。
4.2.2 增量式PID
增量式PID只计算「这次比上次多打多少」。公式:
Δu(k) = Kp * [e(k)-e(k-1)] + Ki * e(k) + Kd * [e(k)-2e(k-1)+e(k-2)]
u(k) = u(k-1) + Δu(k)
特点:
- 输出是增量,比如「再打2度」
- 不需要累加误差,积分饱和风险小
- 就算计算错误,也只是跳变一个增量,相对安全
选型建议:
- 执行器支持绝对位置指令 → 位置式PID
- 执行器只接受增量指令(如步进电机)→ 增量式PID
- 对安全性要求高 → 增量式PID
4.3 参数整定方法
调参是门手艺活。我见过有人调了三天三夜,也有人十分钟搞定。这里分享几个实用方法。
4.3.1 试凑法(最常用)
步骤很简单:
- 先调P:从小到大,直到系统开始震荡,然后回调到震荡幅度的60%
- 再加I:消除稳态误差,但别加太多,否则会震荡
- 最后加D:抑制超调,但别加太多,否则噪声放大
我曾经调一个循迹小车,P调到50时开始抖,我回调到30,然后加I到0.1,完美。整个过程不到20分钟。
4.3.2 Ziegler-Nichols法(经典方法)
这个方法适合有理论基础的同学:
| 参数 | P控制 | PI控制 | PID控制 |
|---|---|---|---|
| Kp | 0.5 * Ku | 0.45 * Ku | 0.6 * Ku |
| Ki | - | 0.54 * Ku / Tu | 1.2 * Ku / Tu |
| Kd | - | - | 0.075 * Ku * Tu |
其中Ku是临界增益(系统开始震荡时的P值),Tu是震荡周期。
避坑指南: 我曾经在实车上用Z-N法,算出来的参数直接让车在测试场里画龙。原因是实车有延迟和死区,理论值需要打折。建议把算出来的Kp再乘以0.7,Ki乘以0.5,再微调。
4.3.3 自整定法(进阶)
现在很多控制器支持自整定。比如:
- 继电器法:给系统一个方波激励,观察响应
- 模糊PID:根据误差大小自动调整参数
- 自适应PID:在线辨识模型,实时更新参数
我个人觉得,自整定适合量产产品。但在研发阶段,手动调参能让你更理解系统特性。
4.4 实战中的坑与技巧
积分饱和处理: 当执行器达到极限(比如方向盘打到底),积分还在累加。等误差反向时,积分需要时间退出来,导致响应滞后。我的做法是:积分限幅,或者用「积分分离」——误差大时停止积分。
微分先行: 只对测量值微分,不对目标值微分。这样可以避免目标值突变时产生冲击。我在做ACC(自适应巡航)时用过这个技巧,效果很好。
嗯,PID看似简单,但真正用好需要大量实践。我建议你从仿真开始,用MATLAB/Simulink搭一个简单的车辆模型,然后手动调参。调着调着,你就会找到感觉。
下一章我们会讲PID在横向控制中的具体应用——车道保持。到时候你会看到,同样的PID,在不同场景下需要做哪些调整。
先消化这些,有问题随时交流。