Model Predictive Control (MPC)

本章定位:理解 MPC 如何通过滚动时域优化实现闭环最优控制,掌握其核心思想、算法流程和在角色动画中的应用。


⭐ 核心概念:MPC 是一个控制框架

MPC 本身不是一个具体的优化算法,而是一个控制框架。

它定义了**"每帧优化、只执行第一步、然后重新优化"的闭环控制思想,但不指定具体用什么方法求解**优化问题。

MPC 框架 + 不同求解器

MPC 框架(滚动时域优化)
    │
    ├─ 结合 iLQR 求解器  →  iLQR-MPC(适用于平滑问题)
    │
    ├─ 结合 DDP 求解器   →  DDP-MPC(适用于高精度需求)
    │
    ├─ 结合 CMA-ES      →  Sampling-MPC(适用于不可微问题)
    │
    ├─ 结合 SAMCON      →  粒子滤波 MPC(适用于角色控制)
    │
    └─ 结合凸优化       →  Convex-MPC(适用于凸问题)
组件作用类比
MPC 框架定义"何时优化、如何执行"汽车的"自动驾驶系统"
求解器实际计算最优控制汽车的"发动机"(可以是汽油、柴油、电动)

重要理解

  • MPC 的核心是滚动时域思想,不是某个特定算法
  • 同一个 MPC 框架,换不同求解器,适用于不同问题
  • 选择求解器时要考虑:可微性、计算成本、精度需求

一、从开环到闭环:为什么需要 MPC

开环控制的局限性

前面介绍的轨迹优化方法(如 iLQR、DDP、CMA-ES)主要是开环控制

离线优化一次 → 得到最优轨迹 (x*, u*) → 执行
优点缺点
可预先计算、推理快无法应对扰动
适用于动作生成误差会累积
计算成本一次性投入实际轨迹可能偏离规划

问题:角色动画中经常遇到扰动:

  • 外力推挤
  • 地面不平
  • 模型参数误差
  • 数值仿真误差累积

闭环控制的思想

反馈控制:每帧根据当前状态重新计算控制

测量当前状态 s → 查表 u = -K·s → 执行 → 下一帧

PD 控制就是典型的闭环控制,但它是局部的:

  • 只考虑当前状态与目标状态的偏差
  • 不考虑未来、不预测后果
  • 无法处理复杂约束

MPC 的核心洞察

MPC = 开环优化 + 闭环执行

每帧都做一次开环轨迹优化,但只执行第一步,然后重新优化
t=0: 测量 s₀ → 优化得到 (u₀*, u₁*, ..., uₙ*) → 执行 u₀*
t=1: 测量 s₁ → 优化得到 (u₀*, u₁*, ..., uₙ*) → 执行 u₀*
t=2: 测量 s₂ → 优化得到 (u₀*, u₁*, ..., uₙ*) → 执行 u₀*
...

关键

  • 每帧都基于最新测量状态重新规划
  • 只执行规划序列的第一步
  • 下一帧重复优化,形成反馈

二、MPC 的数学描述

标准 MPC 问题

在每一时刻 t,求解如下优化问题:

$$ \begin{aligned} \min_{\mathbf{u}_{0:N-1}} \quad & \phi(\mathbf{x}N) + \sum{k=0}^{N-1} \ell(\mathbf{x}_k, \mathbf{u}k) \ \text{s.t.} \quad & \mathbf{x}{k+1} = f(\mathbf{x}_k, \mathbf{u}_k) \quad \text{(动力学)} \ & \mathbf{x}0 = \mathbf{x}{\text{current}} \quad \text{(当前状态)} \ & \mathbf{x}_k \in \mathcal{X}, \mathbf{u}_k \in \mathcal{U} \quad \text{(约束)} \end{aligned} $$

其中:

  • \(N\):预测时域(Prediction Horizon),通常 10-50 步
  • \(\phi(\mathbf{x}_N)\):终端代价
  • \(\ell(\mathbf{x}_k, \mathbf{u}_k)\):阶段代价
  • \(\mathcal{X}, \mathcal{U}\):状态和控制约束集

MPC 算法流程

算法:MPC 闭环控制

输入:
    - 当前状态 x_current
    - 参考轨迹 x_ref
    - 预测时域 N

输出:
    - 控制输入 u*

每帧执行:
1. 测量当前状态 x_current

2. 求解优化问题:
   min J = φ(x_N) + Σₖ₌₀ᴺ⁻¹ ℓ(x_k, u_k)
   s.t. x_{k+1} = f(x_k, u_k)
        x_0 = x_current
        x_k ∈ X, u_k ∈ U

3. 得到最优控制序列 (u₀*, u₁*, ..., uₙ*₋₁)

4. 执行第一步控制 u* = u₀*

5. 等待下一帧,回到步骤 1

与开环优化的对比

维度开环优化 (iLQR, DDP)MPC
优化频率一次(离线)每帧(在线)
输入状态固定初始状态 x₀实时测量 x_current
执行方式执行完整轨迹只执行第一步
应对扰动❌ 无法应对✅ 自动校正
计算成本一次性高持续高
适用场景动作生成/离线规划实时控制/跟踪

三、MPC 的关键设计要素

1. 预测时域 (Prediction Horizon)

预测时域 \(N\) 的选择是 MPC 设计的核心:

时域长度优点缺点适用场景
(N=5-10)计算快短视、可能不稳定快速反应任务
(N=10-30)平衡中等计算量locomotion、跟踪
(N=30-100)远视、稳定计算慢复杂规划任务

经验法则

  • 时域应覆盖任务的关键动态
  • 例如:走路步态周期约 1 秒,若 dt=0.01s,则 N≈100

2. 代价函数设计

MPC 的代价函数通常包含:

$$ J = J_{\text{track}} + J_{\text{control}} + J_{\text{smooth}} + J_{\text{terminal}} $$

数学形式作用
跟踪误差\(\sum (\mathbf{x}_k - \mathbf{x}_k^{\text{ref}})^T Q (\mathbf{x}_k - \mathbf{x}_k^{\text{ref}})\)跟踪参考轨迹
控制 effort\(\sum \mathbf{u}_k^T R \mathbf{u}_k\)避免过大控制
平滑项\(\sum (\mathbf{u}k - \mathbf{u}{k-1})^T S (\mathbf{u}k - \mathbf{u}{k-1})\)控制变化平滑
终端代价\(\mathbf{x}_N^T P \mathbf{x}_N\)保证稳定性

3. 约束处理

MPC 的核心优势之一是能显式处理约束

约束类型数学形式示例
状态约束\(\mathbf{x} \in \mathcal{X}\)关节角度限制、速度限制
控制约束\(\mathbf{u} \in \mathcal{U}\)关节力矩上限
接触约束\(g(\mathbf{x}) \geq 0\)足部不穿透地面、摩擦锥
任务约束\(h(\mathbf{x}) = 0\)手部保持抓握、视线跟踪

4. 终端设计

为保证 MPC 稳定性,通常需要设计终端约束终端代价

方法说明优缺点
终端代价\(\phi(\mathbf{x}_N) = \mathbf{x}_N^T P \mathbf{x}_N\)软约束,计算简单
终端约束\(\mathbf{x}N = \mathbf{x}{\text{goal}}\)硬约束,可能无解
终端集合\(\mathbf{x}_N \in \mathcal{X}_f\)灵活但设计复杂
无终端不设终端简单但可能不稳定

四、MPC 的求解方法

核心理解:MPC 是一个框架,它需要调用具体的求解器来解优化问题。

求解器对比

求解器类型代表方法特点适用场景
基于梯度iLQR, DDP, SQP收敛快,需要可微模型平滑问题、精确跟踪
无梯度CMA-ES不需要梯度,收敛慢非凸问题、接触频繁
采样方法SAMCON, MPPI平衡效率和适用性角色控制、复杂约束
凸优化Convex-MPC全局最优、高效可公式化为凸问题

1. iLQR-MPC(最常用)

在角色动画中最常用的是 iLQR 作为 MPC 的内部求解器

每帧:
    1. 测量当前状态 x_current
    2. 以 x_current 为初值,运行 iLQR 优化
    3. 得到最优控制序列 (u₀*, u₁*, ..., uₙ*₋₁)
    4. 执行 u₀*

优点

  • 收敛快(适合实时)
  • 适用于平滑非线性问题
  • 可处理高维系统(如全身角色)

缺点

  • 需要可微模型
  • 接触处理困难(需要光滑近似)

2. Sampling-based MPC

对于不可微问题(如接触),可使用采样方法:

SAMCON (Sampling-based Model Predictive Control):

  • 在控制空间采样多条轨迹
  • 评估每条轨迹的代价
  • 选择最优轨迹的第一步执行
  • 用 CMA-ES 迭代优化采样分布

MPPI (Model Predictive Path Integral):

  • 基于重要性采样的随机 MPC
  • 适用于连续控制和随机系统

3. 其他求解器

求解器说明适用场景
DDP-MPC使用 DDP 作为求解器,二阶收敛高精度需求、可计算二阶导数
Convex-MPC将问题公式化为凸优化足式机器人、简化模型
NMPC (Nonlinear MPC)直接求解非线性优化问题一般非线性系统

求解器选择建议

问题特征 → 推荐求解器
─────────────────────────
平滑、可微模型 → iLQR-MPC ⭐
需要二阶精度 → DDP-MPC
接触频繁、不可微 → Sampling-MPC (SAMCON/CMA-ES)
简化模型、凸问题 → Convex-MPC

3. 显式 MPC vs 隐式 MPC

类型方法特点
隐式 MPC在线求解优化问题灵活、计算量大
显式 MPC离线计算策略表,在线查表快、但存储大、维度低

角色动画中主要使用隐式 MPC


五、MPC 在角色动画中的应用

1. 轨迹跟踪 (Reference Tracking)

问题:给定参考轨迹(动捕数据),让仿真角色跟踪

MPC 方案

  • 状态:关节位置 + 速度
  • 控制:关节力矩
  • 代价:跟踪误差 + 控制 effort
  • 约束:关节限制、力矩限制

优势

  • 自动应对扰动(被推后恢复平衡)
  • 可处理模型误差
  • 实时性能

2. 平衡控制 (Balance Control)

问题:让角色在不平坦地面上保持平衡

MPC 方案

  • 状态:质心位置 + 速度 + 关节状态
  • 控制:关节力矩 + 接触力
  • 代价:质心高度 + 基座姿态 + 控制 effort
  • 约束:接触力(摩擦锥)、ZMP 约束

3. 步态生成 (Locomotion)

问题:让角色按期望速度行走/跑步

MPC 方案

  • 状态:全身关节状态 + 基座状态
  • 控制:关节力矩 + 下一步落脚点
  • 代价:速度跟踪 + 能量 + 步态稳定性
  • 约束:接触时序、落脚点可行区域

代表性工作

  • Winkler et al. 2020 - 全身 MPC 用于双足行走
  • Kim et al. 2019 - MPC 用于复杂地形 locomotion

4. 全身控制 (Whole-Body Control)

问题:同时控制手、脚、基座完成多任务

MPC 方案

  • 状态:全身 50+DoF
  • 控制:全身关节力矩
  • 代价:多任务加权(手跟踪 + 脚跟踪 + 平衡)
  • 约束:全身动力学 + 接触约束

挑战

  • 高维(计算量大)
  • 接触切换(混合系统)
  • 实时性要求高

六、MPC 与其他方法的对比

MPC vs PID/PD 控制

维度PD 控制MPC
优化范围局部(当前误差)全局(预测时域内)
约束处理无法显式处理显式处理
多任务协调难(需要调权重)易(统一优化)
计算成本极低
适用场景简单跟踪复杂任务

MPC vs 轨迹优化

维度轨迹优化 (iLQR, DDP)MPC
优化频率一次(离线)每帧(在线)
初值敏感性高(可能局部最优)低(热启动)
实时性
应对扰动
关系MPC 可以用轨迹优化作为求解器

MPC vs 强化学习

维度MPC强化学习
训练需求无需训练需要大量训练
泛化能力有限
推理速度慢(ms 级)快(μs 级)
可解释性
约束处理显式隐式(需特殊设计)
适用场景已知模型、高精度未知模型、泛化需求

方法选择建议

场景 → 推荐方法
─────────────────────────
已知模型 + 实时控制 → MPC
已知模型 + 离线动作 → iLQR/DDP/CMA-ES
未知模型 + 泛化需求 → 强化学习
简单跟踪 → PD 控制

七、MPC 的优缺点

优点

优点说明
闭环最优每帧重新优化,自动应对扰动
约束处理显式处理状态/控制/接触约束
多任务协调统一框架下优化多目标
模型利用充分利用已知模型信息
灵活性代价函数和约束可在线修改

缺点

缺点说明
计算成本高每帧需解优化问题
模型依赖模型不准会导致性能下降
调参复杂时域、权重、约束需要调节
接触处理离散接触需要特殊处理
稳定性分析理论保证需要终端设计

八、工程实践

1. 计算优化

热启动 (Warm Start)

  • 用上一帧的解作为当前帧优化的初值
  • 显著减少迭代次数

并行化

  • 采样方法可并行评估多条轨迹
  • GPU 加速动力学计算

简化模型

  • 使用简化的动力学模型(如线性倒立摆)
  • 在简化的控制空间优化

2. 稳定性设计

终端代价

  • 用 LQR 的 Value Function 作为终端代价
  • 保证闭环稳定性

足够长的时域

  • 时域应覆盖系统的主要动态
  • 经验:至少覆盖一个步态周期

约束松弛

  • 硬约束可能导致无解
  • 用软约束(加惩罚)代替

3. 接触处理

光滑近似

  • 用 sigmod 近似接触力的开启/关闭
  • 使问题可微

混合 MPC

  • 显式枚举接触模式
  • 每种模式下分别优化

分层 MPC

  • 高层规划接触时序
  • 低层优化连续轨迹

九、MPC 在 GAMES105 中的定位

与其他方法的关系

轨迹优化方法图谱

按优化时机:
├── 离线优化
│   ├── CMA-ES (无梯度)
│   ├── iLQR (一阶梯度)
│   └── DDP (二阶梯度)
│
└── 在线优化
    ├── MPC (滚动时域)
    │   ├── iLQR-MPC
    │   ├── Sampling-MPC (如 SAMCON)
    │   └── Convex-MPC
    │
    └── 即时反馈
        └── PD 控制

在课程体系中的位置

先修内容后续内容
轨迹优化的数学描述SAMCON - 采样-based MPC
LQR - 线性最优控制SIMBICON - 简化模型预测
iLQR - 非线性轨迹优化Character Control

十、关键要点总结

核心思想

  1. 滚动时域优化:每帧基于当前状态重新优化未来 N 步
  2. 只执行第一步:形成闭环反馈
  3. 显式约束处理:统一框架处理状态/控制/接触约束

MPC 设计要素

要素设计考虑
预测时域平衡计算成本和远视性
代价函数跟踪 + 控制 + 平滑 + 终端
约束状态限制 + 控制限制 + 接触
求解器iLQR/SQP/CMA-ES/采样方法

优缺点

优点缺点
闭环最优、应对扰动计算成本高
显式约束处理模型依赖
多任务协调调参复杂

适用场景

  • ✅ 实时控制 + 已知模型
  • ✅ 需要应对扰动的场景
  • ✅ 复杂约束处理
  • ❌ 无模型场景(用 RL)
  • ❌ 超高频率控制(用 PD)

十一、深入学习

前置知识

相关方法

参考资料

教程

论文

  • Rawlings & Mayne 2009 - Model Predictive Control: Theory and Design (教材)
  • Winkler et al. 2020 - Convex Model Predictive Control for Bipedal Walking
  • Kim et al. 2019 - Reinforcement Learning for Robust Parameterized Locomotion Control

代码

  • Acados - 高效 MPC 求解器
  • CroCOPy - 角色控制 MPC 框架

本文出自 CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES105_mdbook/