| type | method | ||||||
|---|---|---|---|---|---|---|---|
| tags |
|
||||||
| status | complete | ||||||
| updated | 2026-10-29 | ||||||
| related |
|
||||||
| sources |
|
||||||
| summary | MPC(模型预测控制)通过在线滚动优化未来轨迹,在约束控制与人形/腿足运动规划中广泛使用。 |
模型预测控制:一种基于滚动时域优化的控制方法,在每个时刻求解一个有限时域的最优控制问题,只执行第一步,然后重复。
不是一次性算出全局最优控制,而是每一步都在线求解一个有限时域优化问题,只执行当前动作,然后重复。
| 缩写 | 英文全称 | 简要说明 |
|---|---|---|
| MPC | Model Predictive Control | 滚动时域内优化控制序列 |
| OCP | Optimal Control Problem | MPC 每步求解的有限时域最优控制 |
| QP | Quadratic Programming | 线性化动力学下的常见求解形式 |
| CoM | Center of Mass | 质心轨迹是 loco MPC 核心状态 |
| WBC | Whole-Body Control | MPC 输出参考,低层 QP 跟踪全身 |
MPC 是机器人控制中最接近“万能控制框架”的东西——只要你能建模,就能控制。
核心优势:
- 处理约束:关节限位、接触力限制、碰撞避免——都可以自然地塞进优化约束里
- 处理多目标:同时处理平衡、跟踪、能耗等多个目标
- 处理非线性:非线性 MPC 可以处理复杂动力学
- 处理时变系统:每步重新计算,自然适应变化
代价是计算量大,实时性要求高。
首先需要一个动力学模型:
或者离散形式:
这个模型不需要很精确(这也是 MPC 的一个优点),但越精确效果越好。
在每个时刻
- 预测:用模型预测未来
$N$ 步的状态序列 - 优化:求解一个优化问题,找到使代价函数最小的控制序列
$u_t, u_{t+1}, ..., u_{t+N-1}$ - 执行:只把
$u_t$ 发给机器人 - 重复:到下一个时刻,重新预测 + 求解
这就是"滚动时域"(receding horizon)控制的核心。下图概括每个控制周期内的闭环:
flowchart TD
t0(["控制周期 t"])
s1["① 预测<br/>模型 rollout 未来 N 步"]
s2["② 优化<br/>min 有限时域代价 + 约束"]
s3["③ 执行<br/>仅下发 u_t"]
s4["④ 重复<br/>t ← t+1,重新测量"]
t0 --> s1 --> s2 --> s3 --> s4
s4 -->|"滚动时域"| t0
xref["参考 x_ref<br/>关节/接触/碰撞约束"] -.-> s2
model["动力学模型 f(x,u)"] -.-> s1
典型形式:
包含两项:
- 状态代价:状态跟参考值的偏差
- 控制代价:控制输入的大小(防止过于激进)
可以加硬约束(不等式)和软约束。
这是 MPC 相比 LQR 等方法最关键的优势:
- 关节角度限位:$\underline{q} \leq q \leq \bar{q}$
- 关节速度限位:$\underline{\dot{q}} \leq \dot{q} \leq \bar{\dot{q}}$
- 接触力约束:$f_z \geq 0$(地面反力非负)
- 碰撞避免:作为不等式约束加入
假设线性系统:
可以用 QP(二次规划)求解,速度快,适合实时控制。
典型应用:双足行走的 ZMP 控制、轮式机器人轨迹跟踪。
用非线性动力学模型,需要求解非线性优化问题(NLP)。
计算量比 LMPC 大很多,通常需要:
- 实时非线性优化求解器(e.g. Acados, FORCES Pro)
- 比较好的初值(可以用线性 MPC 的结果做 warm start)
把非线性问题凸化——比如用多面体约束、凸成本函数。
IsaacGym /机器人领域常见。
处理模型不确定性和外界干扰。
加入随机约束或者 robustness budget。
LiteNWM 也采用“预测短期后果 → 选择轨迹 → 执行一段 → 重新规划”的滚动闭环,但它保留冻结导航策略给出的候选集,再用学习到的潜空间世界模型和评分器重排序;它不是经典的显式动力学 MPC,也不通过求解 OCP 从头优化控制序列。两者相通的是 receding-horizon 的反复更新机制,分野在候选如何产生、如何评估。
用 centroidal dynamics + NMPC:
- 预测未来几步的质心/角动量
- 优化接触力分配
- 保持平衡约束
代表工作:
- Di Carlo et al., "Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control"(IROS 2018,四足凸 MPC)
- Li & Nguyen, "Force-and-moment-based Model Predictive Control for Achieving Highly Dynamic Locomotion on Bipedal Robots"(arXiv:2104.00065,双足)
- ANYmal 的行走控制
用 WBC 框架下:
- 上层用 MPC 计算 task-space 指令
- 下层用 QP 分配关节力矩
四足/双足机器人的站立、行走、跑跳控制几乎都离不开 MPC。
代表:
- MIT Cheetah 的凸 MPC
- Unitree 的 NMPC 控制器
关键参数 (详见 MPC 调参指南)
-
$N$ 太短:来不及规划,响应快但可能不稳定 -
$N$ 太长:计算量大,实时性差 - 通常
$N=10\sim 40$ 步(取决于控制频率)
- 人形机器人典型:1-5 kHz
- 越快越好,但受限于求解器速度
- 高频MPC + 低频 RL 是常见组合
这是一个 trade-off:
- 精确模型 → 更好的跟踪和预测,但计算慢
- 简化模型 → 计算快,但跟踪精度差
常用 trick:用简化模型做 MPC,用更精确的模型做仿真验证。
| 维度 | MPC | 强化学习 |
|---|---|---|
| 依赖模型 | 必须有模型 | 不需要(model-free) |
| 计算量 | 在线优化,实时要求高 | 离线训练,在线推理快 |
| 泛化能力 | 受模型精度限制 | 可泛化到新任务 |
| 处理约束 | 自然 | 需要专门设计 |
| 超越人类 | 难 | 可以 |
常见组合:
- RL 训练低层策略 + MPC 做高层规划
- RL 训练一个 "policy prior" + MPC 在其中做优化
下面这段代码把 MPC 的最小闭环写清楚:
- 每个控制周期枚举几组候选控制序列
- 用模型前向 rollout
- 计算有限时域代价
- 只执行当前第一步控制
import numpy as np
A = np.array([[1.0, 0.1], [0.0, 1.0]])
B = np.array([[0.0], [0.1]])
Q = np.diag([5.0, 0.5])
R = np.diag([0.1])
def mpc_step(x0, candidates):
def cost(U):
x = x0.copy()
total = 0.0
for u in U:
total += x.T @ Q @ x + u.T @ R @ u
x = A @ x + B @ u
return float(total)
best_U = min(candidates, key=cost)
return best_U[0]
x = np.array([[0.2], [0.0]])
candidates = [np.zeros((10, 1)), 0.1 * np.ones((10, 1)), -0.1 * np.ones((10, 1))]
u = mpc_step(x, candidates)
print("apply control:", u.ravel())真正的机器人 MPC 会把这里的候选序列枚举换成 QP / NLP 求解器,并显式加入接触、摩擦锥、力矩限位等约束。
- 对计算资源敏感:预测时域一长、模型一复杂,实时性马上成为瓶颈
- 对模型质量敏感:特别是人形机器人接触切换和摩擦建模不准时,预测会漂
- 约束设计很考经验:硬约束和软约束怎么取舍,直接决定求解器稳定性
- 通常还要下层控制器配合:MPC 负责规划得漂亮,但最后还得靠 WBC / impedance / PD 把它落到关节上
- wechat_shenlan_robot_control_eight_paradigms.md — 深蓝八大控制体系:MPC 代表算法
- wechat_shenlan_ai_ad_planning_control.md — 车载轨迹跟踪 MPC 与 PID/LQR 分工
- Di Carlo et al., Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control(IROS 2018,DOI 10.1109/IROS.2018.8594448)— 凸 MPC 代表论文(四足)
- Li & Nguyen, Force-and-moment-based Model Predictive Control for Achieving Highly Dynamic Locomotion on Bipedal Robots(arXiv:2104.00065)— 双足行走 MPC
- CMU Optimal Control 2025 策展 — Lec 10 Convex MPC(播放列表归档)
- Optimal Control 2025 (YouTube Course), Lecture 10: Convex MPC — 理论讲解
- Acados (http://acados.org/) — 开源 NMPC 求解器,实现参考
- ingest 档案: sources/papers/mpc.md、lqr_ilqr_primary_refs.md(LQR 与 MPC 关系)
-
《自动驾驶核心算法盘点》专栏技术地图 — 车载 MPC 在规控组合中的位置
-
雅可比矩阵 — 工作点局部线性化的运动学接口
-
MPC vs RL — 控制范式选型对比
-
π MPC — parallel-in-horizon、construction-free ADMM NMPC
-
MPC-RL — 训练期 CD-MPC 地标奖励指导 PPO
-
SMPC-to-RL — 采样 MPC 只做仿真专家,稀疏 RL 上真机
-
Nonlinear MPC — 完整非线性动力学滚动优化
-
Quadratic Programming — 凸 MPC / WBC 子问题形式
-
MPC Solver Selection — OSQP / Acados 等选型
-
SRL-MPC — RL 读取 GSF 在线调形状感知 HOCBF-MPC 参数(arXiv:2608.21175)
-
赛车漂移 RL 开源景观 — F1/10 LearningMPC 与 drift-mpc-ackermann 等非线性/学习 MPC 真机栈
-
mpc_python — CVXPY 迭代线性化 MPC 路径跟踪 + MuJoCo/MuSHR demo(MIT,~520★;教学向 QP 闭环)
-
DSLC:隐蔽执行器攻击下的多机器人安全学习控制 — 将分布式 MPC 扩展为面向隐蔽执行器攻击的对抗式闭环策略学习。
- CMU Optimal Control 2025(课程归档) — Lecture 10: Convex Model-Predictive Control
- Optimal Control 2025 (YouTube Course) - Lecture 10: Convex Model-Predictive Control
- Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control - Di Carlo et al., IROS 2018
- Force-and-moment-based MPC for Bipedal Robots - Li & Nguyen
- Acados: http://acados.org/ - NMPC solver