先记住一句话

P 看现在、I 累积过去、D 预判变化;调参目标不是 gain 最大,而是在 tracking、扰动抑制、noise、饱和和 stability margin 间取得平衡。

reference − measurementP / I / filtered Dsaturationplantnew measurementstability margins
误差e=r−y
PIDKp e + Ki∫e + Kd ė
执行器limit + plant
反馈sensor y
饱和位于控制器与 plant 之间;anti-windup 必须知道实际执行了多少输入。

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. 一个安全调参顺序

  1. 确认 sign、unit、rate、limit 和 emergency stop;
  2. 从很小 Kp 开始,观察 step 与 disturbance;
  3. 增加 Kd 获得 damping,再提高 Kp
  4. 只有 steady bias 需要时才慢慢加 Ki 与 anti-windup;
  5. 在不同 payload、battery voltage、姿态和 contact 下测 margin;
  6. 同时记录 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。