跳到主要内容

5. MPC

MPC(Model Predictive Control,模型预测控制)可以看成“每一帧都重新规划一小段未来”的控制器。它用模型预测未来,在约束下优化控制输入,然后只执行第一步,下一帧再重新观测、重新优化。

5.1 滚动时域

每个控制周期,MPC 做三件事:

  1. 从当前状态 出发,预测未来 步。
  2. 求一串控制输入 ,让未来轨迹尽量接近期望。
  3. 只执行第一个控制输入 ,下一帧重复。

这就是“滚动时域”:

当前状态
-> 预测未来 H 步
-> 优化一串控制
-> 执行第一步
-> 收到新状态后重新优化

它不会相信自己对很远未来的预测,而是用高频反馈不断修正。

5.2 优化问题

简化形式:

满足动力学约束:

以及输入和状态约束:

这里的 是预测时域。 太短,控制器看不远; 太长,计算变慢,而且模型误差会累积。

5.3 约束优势

PID 的优势是简单、高频、可靠。LQR 的优势是把线性模型和二次代价放进反馈增益。MPC 的优势是显式考虑未来和约束。

它能自然表达:

  • 关节角不能超过限位。
  • 电机力矩不能超过上限。
  • 移动机器人速度和加速度有限。
  • 机械臂末端不能进入障碍物区域。
  • 四足机器人接触力要满足摩擦约束。

这类约束很难优雅地塞进普通 PID。你可以对 PID 输出限幅,但限幅只是事后裁剪;MPC 是在优化时就知道这些限制。

5.4 简化模型

MPC 依赖模型,但不意味着必须用完整高保真动力学。

常见简化模型:

机器人常用模型适合任务
差速移动机器人unicycle model路径跟踪、避障
汽车式底盘bicycle model自动驾驶、转向约束
机械臂线性化关节动力学局部轨迹跟踪
四足机器人单刚体 / 质心动力学质心速度、姿态、接触力控制
无人机简化刚体模型姿态和轨迹跟踪

MPC 的模型原则是:足够快,足够准,能帮助优化器做出比纯反馈更好的决定。

5.5 代价设计

一个轨迹跟踪 MPC 通常会惩罚:

  • 位置误差
  • 速度误差
  • 姿态误差
  • 控制输入大小
  • 控制输入变化量
  • 偏离参考轨迹的横向误差

如果控制输入变化太剧烈,可以加入:

这会让控制更平滑,减少执行器抖动。

设计代价函数时,不要只盯最后的成功率。要同时看:

  • 轨迹误差曲线
  • 控制输入是否频繁打满
  • 动作是否平滑
  • 求解时间是否稳定
  • 失败时是约束不可行还是权重不合理

5.6 实时性

MPC 每个周期都要求解优化问题。如果控制周期是 20ms,那么求解器必须稳定地在 20ms 内给出结果,最好还要留出通信和执行余量。

工程里常见做法:

  • 缩短预测时域。
  • 使用简化模型。
  • 使用 warm start,把上一帧解作为下一帧初值。
  • 约束和代价保持稀疏结构。
  • 求解失败时回退到安全控制器,例如 PD 或刹车。

一个能实时稳定求解的“简化 MPC”,通常比一个模型很漂亮但经常超时的“复杂 MPC”更有价值。

5.7 规划关系

运动规划通常回答“从 A 到 B 走哪条路径”,MPC 更关心“接下来这一小段怎么稳定执行”。

二者可以组合:

全局规划器 -> 参考路径 / 轨迹 -> MPC 局部跟踪 -> 执行器

移动机器人里,全局规划器给路径,MPC 负责在速度、转角和避障约束下跟踪。机械臂里,MoveIt 2 给轨迹,底层控制器负责执行;如果任务对约束和动态响应要求很高,可以在执行层加入 MPC。

5.8 适用边界

MPC 强大,但入门项目不要一开始就上 MPC。以下情况优先用 PID / PD:

  • 单关节定点控制。
  • 低速、低动态的简单轨迹跟踪。
  • 模型还没整理清楚。
  • 控制频率很高但算力有限。
  • 你还没建立基本闭环调参直觉。

更好的学习顺序是:先用 PID / PD 跑通系统,再用 LQR 理解模型化反馈,最后在约束明显、轨迹复杂时引入 MPC。