8. 练习路线
控制器一定要靠实验建立直觉。只看公式很容易误以为“参数调大就更准”,真正跑起来才会看到超调、振荡、饱和、延迟和噪声。
8.1 练习阶段
建议按四个阶段练习。
| 阶段 | 目标 | 推荐练习 |
|---|---|---|
| 单关节 | 建立 PID 直觉 | 定点控制、阶跃响应、参数扫描 |
| 多关节 | 理解耦合和轨迹 | 机械臂关节轨迹跟踪、IK 结果执行 |
| 接触任务 | 理解柔顺性 | 末端压桌面、插孔、四足落脚 |
| 系统集成 | 连接上层模块 | MoveIt 2 执行、RL 策略动作、VLA action chunk |
不要跳过单关节阶段。很多后面的系统问题,本质上都是单关节闭环、限幅和单位问题放大后的结果。
8.2 单关节练习
先做一个单自由度关节。
练习目标:
- 画出关节角随时间变化曲线。
- 改变
,观察响应速度和振荡。 - 改变
,观察阻尼效果。 - 加入外力扰动,观察恢复过程。
- 加入输出限幅,观察控制器打满时的表现。
可以直接从 执行器与 PD 控制 开始。那里已经有单关节仿真和交互页面。
8.3 PID 扫描
不要只凭感觉调参。可以网格扫描:
for kp in [5, 10, 20, 40, 80]:
for kd in [0.1, 0.5, 1.0, 2.0]:
result = run_episode(kp, kd)
plot_response(result)
观察指标:
- 上升时间
- 最大超调
- 稳态误差
- 控制输入峰值
- 是否振荡
- 是否触发限幅
这会让你很快建立“参数变化 -> 曲线变化”的直觉。
8.4 多关节跟踪
下一步做机械臂或腿部多关节轨迹:
- 给每个关节一条平滑正弦轨迹。
- 用 PD 跟踪位置和速度。
- 画出每个关节的目标和实际曲线。
- 故意降低某个关节增益,观察末端轨迹如何变差。
- 加入速度目标,比较只跟踪位置和同时跟踪速度的差别。
如果已经学习 ROS2 / MoveIt 2,可以让 MoveIt 2 生成轨迹,再观察控制器执行效果。
8.5 MPC 练习
MPC 不建议从机械臂动力学开始。更适合从移动机器人路径跟踪开始:
- 状态:
- 输入:线速度、角速度或加速度、转角
- 目标:跟踪一条参考路径
- 约束:最大速度、最大角速度、最大加速度
先让 MPC 跟踪一条直线,再跟踪圆,再跟踪 S 型路径。每次只加一个复杂度。
8.6 接触练习
接触练习重点不是速度,而是安全和柔顺:
- 让末端以低速接近平面。
- 逐步调低刚度,观察接触力变化。
- 加阻尼,观察是否减少振荡。
- 比较硬位置控制和阻抗控制的接触冲击。
- 加入最大力限制和接触丢失检测。
如果没有力传感器,可以先在仿真里读取接触力,建立直觉后再上真机。
8.7 面试问题
控制器相关面试常见问题:
- PID 三项分别是什么作用?
- 为什么 D 项容易放大噪声?
- 什么是积分饱和,怎么处理?
- PD 控制为什么常用于机器人关节?
- LQR 和 PID 的区别是什么?
- MPC 为什么能处理约束?代价是什么?
- 阻抗控制和力控有什么区别?
- MoveIt 2 规划成功但机器人不动,可能是什么问题?
- RL 策略为什么常输出目标关节角而不是直接输出力矩?
- VLA 输出动作后,为什么还需要底层控制器?
回答这些问题时,不要只背公式。最好能结合一个具体系统讲:状态是什么、输入是什么、频率是多少、哪里限幅、哪里反馈。
8.8 最小项目
如果你想把本专题变成作品集项目,可以做一条最小闭环:
- 单关节 PD 控制,可视化阶跃响应。
- 加 PID 工程细节:限幅、抗积分饱和、微分滤波。
- 多关节机械臂轨迹跟踪。
- MoveIt 2 生成轨迹,控制器执行。
- 在 MuJoCo 里加入扰动和负载变化。
- 对比 PD、LQR 或简化 MPC 的效果。
- 写一页实验报告:曲线、参数、失败案例、排错过程。
这比只写“熟悉 PID / MPC”更有说服力。控制器能力最好的证明,是你能让系统稳定动起来,并解释它为什么稳定。