先记住一句话
P 看现在、I 累积过去、D 预判变化;调参目标不是 gain 最大,而是在 tracking、扰动抑制、noise、饱和和 stability margin 间取得平衡。
1. 负反馈改变了什么
令误差 e=r−y,controller C(s) 驱动 plant G(s)。unity negative feedback 的 reference transfer 是:
T(s)=Y/R = C(s)G(s) / [1+C(s)G(s)]S(s)=1/[1+C(s)G(s)]L=CG 是 loop gain,S 是 sensitivity。低频 |L| 大可减 tracking error/disturbance sensitivity;但在 phase 接近 −180° 时仍有大 gain,负反馈会等效成正反馈。
2. PID 三项
u(t)=Kp e(t)+Ki∫e(t)dt+Kd de(t)/dt| 项 | 直觉 | 常见代价 |
|---|---|---|
| P | 误差越大,立即推得越强 | 过大可振荡;常留下 steady-state error |
| I | 长期小误差不断累积,消除 offset | 增加 phase lag;饱和时 windup |
| D | 对误差变化刹车,增加 damping | 放大高频 sensor noise 与量化 |
3. 机器人关节 PD 为什么常见
τ = Kp(q_des−q) + Kd(q̇_des−q̇) + τ_ff机械系统自身含积分关系,位置 PD 已能形成弹簧—阻尼行为;重力、inverse dynamics 或 learned policy 可给 feedforward torque。Integral 在摩擦/偏置明显时有用,但 humanoid contact 下累积误差可能制造大 torque,因此常受限或放到更外层。
4. Stability 与 performance
连续 LTI closed-loop poles 实部全负才 asymptotically stable;离散系统 eigenvalues 要在 unit circle 内。稳定只说最终不发散,不说明是否够快、overshoot 是否可接受。常看:
- rise/settling time、overshoot、steady-state error;
- bandwidth:能跟上多快变化;
- damping ratio:振荡衰减程度;
- gain/phase margin:模型增益或额外 delay 变化多少才到不稳定边界。
5. Bode 图的工程直觉
Bode magnitude 看不同频率放大多少,phase 看滞后多少。crossover frequency 附近决定闭环速度和裕度:推高 crossover 通常响应更快,却更接近未建模 resonance、sensor noise 与通信 delay。每个纯 delay e^(−sT) 都随频率增加额外 phase lag。
6. Saturation 与 anti-windup
真实 motor 有 current/torque/velocity/voltage 上限。若 controller 要求 u_raw 超限,实际输出被 clamp,但 integral 仍累积,解除饱和后会严重 overshoot。anti-windup 可在饱和且误差推动同方向时停止积分,或用 u_sat−u_raw back-calculation 拉回 integrator。
7. Derivative 不能裸算
离散差分 (eₖ−eₖ₋₁)/Δt 放大 encoder quantization。实践中对 measurement 做 filtered derivative,且常只微分 y,避免 reference step 造成 derivative kick。filter 增加 delay,截止频率仍要与 loop bandwidth 一起设计。
8. 一个安全调参顺序
- 确认 sign、unit、rate、limit 和 emergency stop;
- 从很小
Kp开始,观察 step 与 disturbance; - 增加
Kd获得 damping,再提高Kp; - 只有 steady bias 需要时才慢慢加
Ki与 anti-windup; - 在不同 payload、battery voltage、姿态和 contact 下测 margin;
- 同时记录 command 与实际 saturated output。
9. 四个 PID 手算
例 1:一次 PID 输出
Kp=4、Ki=2、Kd=0.5;当前 error=0.3,积分=0.1,误差变化率=-0.2。u=4×0.3+2×0.1+0.5×(-0.2)=1.3。
例 2:关节 PD
目标 1.0 rad、当前 0.8 rad,目标/当前速度 0/0.3 rad/s,Kp=50、Kd=5:torque=50×0.2+5×(-0.3)=8.5 N·m。
例 3:积分 windup
误差持续 2、dt=0.1 s,执行器饱和 1,但积分照常累积 20 步:integral=2×0.1×20=4;Ki=3 时 I 项已到 12,解除饱和后仍会严重 overshoot。
例 4:phase margin 读法
在 gain crossover 处 open-loop phase=-140°,phase margin=180°−140°=40°。新增 delay 若再带来 25° lag,margin 只剩 15°。
PID 不是“不需要模型”。即使靠经验调参,也隐式依赖 plant 的 gain、resonance、delay 与 actuator limits;换减速比、payload 或控制频率后,原参数可能立刻失效。
自测
1. 为什么 P 很大仍可能有 steady-state error?
某些 plant 要靠持续误差才能产生抵消负载的 command;I 可累积出该 command 而让最终误差趋近零。
2. delay 为什么危险?
反馈使用的是过期状态,delay 带来随频率增长的 phase lag,可能在 loop gain 仍大时把负反馈推向正反馈。
3. anti-windup 在处理什么非线性?
actuator saturation;线性 controller 的输出和真实 actuator output 不再相同。
学习资料
密歇根大学 DC Motor PID把 PID 用在具体电机模型上;MIT Feedback Control课程覆盖 transient response、Bode、stability margin、state-space 与 digital control。