1. 闭环与 PID
控制器最基本的问题是:目标已经给定,机器人却因为惯性、摩擦、负载、外力和模型误差不会自动到达目标。闭环反馈的作用,就是不断比较“想要的状态”和“真实状态”,再用误差修正控制输入。
1.1 开环局限
开环控制只按预先设定的命令执行:
目标命令 -> 执行器 -> 机器人运动
它不关心机器人到底有没有到达目标。比如你给一个关节固定电压,让它转 0.5 秒后停止。如果关节负载变重、摩擦变大、供电变低,它实际转过的角度都会变。
闭环控制多了传感器反馈:
目标状态 -> 比较误差 -> 控制器 -> 执行器 -> 机器人
^ |
| v
+-------- 传感器反馈 -------
它每个控制周期都问一次:
- 当前状态是多少?
- 目标状态是多少?
- 差了多少?
- 下一步应该输出多大控制量?
机器人关节、移动底盘、机械臂末端、四足足端接触,几乎都离不开这条闭环。
1.2 P 控制
比例控制是最简单的反馈:
其中
直觉上,P 控制像一根弹簧:
- 离目标越远,弹簧拉力越大。
- 离目标越近,拉力越小。
太小,系统软绵绵,回目标很慢。 太大,系统容易冲过目标,来回振荡。
对一个关节位置控制,可以写成:
这里
1.3 D 控制
只用 P 控制时,关节会因为惯性冲过目标。D 项根据误差变化速度输出控制量:
在关节控制里,常写成:
如果目标速度
PD 控制是机器人里非常常见的底层控制器。很多强化学习 locomotion 策略并不直接输出电机电流,而是输出目标关节角,再由 PD 控制器在高频闭环里跟踪。
1.4 I 控制
积分项累计过去的误差:
它适合处理长期存在的小偏差。例如电机负载导致 P 控制总是差一点到不了目标,积分项会不断累积这个小误差,直到控制输入足够抵消负载。
但积分项也有副作用:
- 大误差持续时间太长时,积分会越积越大。
- 控制量已经饱和时,积分还在继续累积,会导致严重超调。
- 传感器有偏置或低频噪声时,积分会把偏差放大。
这就是工程里常说的积分饱和。它不是理论上的小问题,而是真机上很常见的失稳来源。
1.5 PID 组合
完整 PID 写成:
三项可以这样理解:
| 控制项 | 直觉 | 主要解决 | 常见风险 |
|---|---|---|---|
| P | 误差越大,修正越强 | 响应速度 | 过大振荡,过小迟钝 |
| I | 长期误差慢慢补回来 | 稳态误差 | 积分饱和,超调 |
| D | 看误差变化趋势 | 阻尼和稳定性 | 放大噪声 |
机器人关节控制里,最常见的是 PD 或带很小积分项的 PID。原因是关节编码器速度反馈通常足够好,而积分项在高动态任务里容易带来额外风险。
1.6 离散 PD
真实控制器在固定周期内运行。假设控制周期是 dt,关节目标是 q_des,当前关节角是 q,当前关节速度是 dq:
def pd_control(q_des, dq_des, q, dq, kp, kd):
position_error = q_des - q
velocity_error = dq_des - dq
torque = kp * position_error + kd * velocity_error
return torque
如果目标是定点控制,dq_des 通常设为 0。如果目标是一条轨迹,dq_des 应该来自轨迹本身,而不是简单设 0。
1.7 调参流程
PID 调参不要三个参数一起动。推荐顺序:
- 先只开 P,让系统能朝目标运动。
- 慢慢增大 P,直到响应够快但还没有严重振荡。
- 加 D,把过冲和振荡压下来。
- 如果存在稳定后的长期偏差,再少量加 I。
- 一旦加 I,必须考虑积分限幅和输出饱和。
下一章会把这些工程细节拆开:离散化、限幅、抗积分饱和、微分滤波和真机调参顺序。