模型预测控制 MPC

进阶 运动与控制 kp-205 MPCiLQR轨迹优化实时优化

一句话定义

模型预测控制(MPC)在每一拍用动力学模型向前"预演"未来 N 步,通过优化选出当前最优动作、只执行第一步、下一拍重算——把控制问题变成滚动时域的实时优化。

为什么重要

  • 它是唯一能显式处理约束(限位、摩擦锥、碰撞、力限制)的主流控制框架——RL 学约束靠惩罚,MPC 直接写进优化问题。
  • 四足步态(kp-204)、人形全身控制、无人机竞速的工业方案都是 MPC;接触丰富的操作也在被 MPC 化。
  • 理解 MPC 才能理解"模型 vs 学习"之争的真正形态:如今多为混合——MPC 的骨架 + 学习的模型/代价。

前置知识

kp-201(动力学)、最优化基础(QP/NLP)。

核心概念

MPC 循环:测量当前状态 → 在时域 $N$ 上解最优控制问题(OCP)→ 执行最优解第一拍 → 状态更新 → 重复。"滚动时域"让它天然闭环,能吸收模型误差与扰动。

问题要素:

  • 模型 $\mathbf{x}_{k+1} = f(\mathbf{x}_k, \mathbf{u}_k)$:线性(QP 可解)或非线性(NLP/iLQR);
  • 代价:跟踪误差 + 控制量惩罚 + 平滑性;
  • 约束:输入/状态限幅、接触摩擦锥、障碍。

求解器谱系:

  • 线性 MPC:QP,毫秒级,工业标配。
  • 非线性 MPC:SQP / 内点法(OCS2、Crocoddyl、acados);差分动态规划族(DDP/iLQR)利用二阶结构极快——MuJoCo 作者 Tassa 2012 年证明 iLQG 可在桌面级 CPU 上实时规划全身运动。
  • GPU 并行采样式 MPC:MPPI(模型预测路径积分)、以及 2024 前后的 GPU 大规模 rollout 采样(如 Genesis/Isaac 上的预测控制),用并行度换实时性,模型可以是学出来的。

与 RL 的关系:MPC 是"显式模型 + 每拍优化";RL 是"离线学出策略,在线查表"。当模型好、约束硬 → MPC;当模型难写、数据多 → RL;当模型可学但策略需适应 → 学习型 MPC(用世界模型 kp-306 当 $f$)。

原理与机制

为什么 MPC 鲁棒:每一拍都基于最新状态重解,等于每拍都在闭环纠偏;模型错一点,下一拍就修正。时域 $N$ 是鲁棒性与算力的旋钮:$N$ 大看得远但解得慢,$N$ 小反应快但短视(可能陷入局部陷阱)。

实时性工程: MPC 的死穴是解算时间超过控制周期。手段:①降阶模型(质心模型替代全身动力学);②热启动(用上拍解初始化);③早停到可行解;④专用代码生成(acados/CasADi 生成 C 代码)。

接触难题:接触的进出使动力学分段光滑,优化问题非凸。主流做法是固定接触时序(schedule)只优化力(MIT Cheetah 路线),或软接触模型让优化自己找接触时刻(更难)。这是"接触 MPC"仍是研究热点的原因。

公式与图示

$$\min_{\mathbf{u}_{0:N-1}} \sum_{k=0}^{N-1} \left( \ell(\mathbf{x}_k, \mathbf{u}_k) \right) + \ell_f(\mathbf{x}_N)$$
$$\text{s.t. } \mathbf{x}_{k+1} = f(\mathbf{x}_k, \mathbf{u}_k),\quad \mathbf{u}_k \in \mathcal{U},\ \mathbf{x}_k \in \mathcal{X}$$

        │ ◄─ 时域 N(未来)
状态 ───┼──────────────────► 时间
        ●━━━━━━━━━━━━━━━►   ← 本拍优化出的轨迹
        ●→                  ← 只执行第一拍
         ●━━━━━━━━━━━━━━►  ← 下一拍重解(滚动)
          ●━━━━━━━━━━━━━►

直观类比

  • 下棋算 N 步:每走一子前在脑内推演未来几步,选当前最好的一步落子;对手(世界扰动)回应后重新推演——MPC 就是"滚动深度的棋手"。
  • 开车看远方:你不会只盯车头(低频反馈),也不规划全程每一脚油门(全局轨迹);你看前方几十米(时域)决定当前方向盘转角。

实例与案例

  • 四足/人形:质心 MPC(0.02~0.1 s 时域)+ WBC 执行是 MIT Cheetah、ANYmal、多数国产人形的主流栈;iLQR/D dileep? (Crocoddyl)用于更全身的版本。
  • 无人机竞速(UZH Swift, Nature 2023):非线性 MPC + 学习式残差,战胜人类冠军飞手。
  • 桌面操作:iLQR 用于推滑物体(nonprehensile);软化接触的 MPC 能实时规划"用推的挪箱子"。

常见误区

  • 误区一:MPC 需要完美模型。MPC 的优势恰恰是对模型误差的鲁棒性(滚动重解);误差大时配学习残差模型即可。
  • 误区二:时域越长越好。长时域放大模型误差积累且解算慢;工程上常用分层:长时域简化模型 + 短时域精细模型。
  • 误区三:MPC 与 RL 二选一。前沿系统大量混合:RL 训策略初始化 MPC、MPC 作为 RL 策略的底层执行器、或用 RL 学 MPC 的代价函数。

自测题

  1. 写出 MPC 的标准优化问题,并解释"滚动时域"为什么带来闭环鲁棒性。
  2. iLQR 为什么比一般非线性优化快?它利用了什么结构?
  3. 设计一个"推箱子到目标点"的 MPC:模型、代价、约束各写什么?

与其他知识点的关系

延伸阅读

  • Rawlings, Mayne & Diehl, Model Predictive Control: Theory, Computation, and Design, 2017。
  • Tassa, Mansard & Todorov, Control-Limited Differential Dynamic Programming, ICRA 2014。
  • 开源工具:OCS2、Crocoddyl、acados、MuJoCo MPC(mujoco_mpc / MPPI)。

本节引用来源

  • Tassa, Erez & Todorov, iLQG for MuJoCo, IROS 2012
  • Rawlings, Mayne & Diehl, Model Predictive Control, 2017