Model Predictive Control (MPC)
模型预测控制 (MPC) 使用模型规划一小段动作序列,只执行第一个动作,然后在每一步重新规划。内容涵盖组成部分、用途和代码。
模型预测控制(MPC)是一种控制方法:它利用系统模型预测短期未来内的系统行为,选择最能实现目标且满足约束的动作序列,只执行第一个动作,然后在下一个时间步获取新测量值并重复整个过程。这种规划、执行、重新规划的循环称为滚动时域控制;它让控制器能够预判即将发生的情况,而不是只对当前误差做出反应。MPC 于 20 世纪 70 年代末在炼油和化工领域发展起来,Shell 的动态矩阵控制是最早的工业实现之一;如今,它用于控制机器人、自动驾驶车辆和建筑气候系统。
MPC 控制器的组成部分#
每个 MPC 控制器都包含四个部分:
- 动力学模型:根据当前状态和动作预测下一个状态,例如预测汽车的位置和朝向会如何随给定的转向角发生变化。模型可以来自物理方程、基于日志数据的系统辨识,也可以是根据记录的轨迹训练出的神经网络。
- 代价函数:为预测轨迹打分,通常会惩罚与目标的距离、能耗以及控制量的突变。
- 约束:每个计划都必须遵守的限制,例如电机最大扭矩、速度限制和障碍物周围的禁入区域。显式处理约束是 MPC 相较于经典 PID 控制的主要优势;PID 控制只会在误差出现后做出反应,无法预先考虑限制。
- 优化器:在每个控制步骤中搜索时域内的最佳动作序列。
模型决定了优化的难度。带有二次代价的线性模型会转化为二次规划,专用求解器可在几毫秒甚至更短时间内完成求解;非线性模型则需要非线性 MPC求解器,通常会配合用于估计状态的扩展卡尔曼滤波器,或者采用基于采样的搜索。在每个控制步骤中,优化器都会运行一个内循环,预测并改进候选计划;控制器则运行一个外循环,执行一个动作,然后从新测量的状态重新开始:
时域长度是最关键的调节选项。较长的时域可以让车辆在急转弯前提前刹车,但每增加一个步骤都会增加计算量,并累积模型的预测误差;整个优化过程还必须在一个控制周期内完成。
代码中的滚动时域#
下面的代码片段控制一辆小车驶向位置 5 并停下,加速度限制为正负 1。每个时间步中,代码会采样 500 个随机加速度方案,利用小车的动力学预测每个方案的轨迹,执行代价最低方案中的第一个动作,然后根据新状态重新规划:
import numpy as np
rng = np.random.default_rng(0)
position, velocity, target = 0.0, 0.0, 5.0
dt, horizon = 0.1, 30
for _ in range(100):
# Sample 500 candidate plans of accelerations within the actuator limit of +/-1
plans = rng.uniform(-1, 1, size=(500, horizon))
# Predict every plan's trajectory with the cart's dynamics model
v = velocity + dt * plans.cumsum(axis=1)
p = position + dt * v.cumsum(axis=1)
# Cost: distance from the target at each step plus speed at the end of the horizon
cost = ((p - target) ** 2).sum(axis=1) + 10 * v[:, -1] ** 2
# Apply only the first action of the cheapest plan, then replan from the new state
velocity += dt * plans[cost.argmin(), 0]
position += dt * velocity
print(f"position: {position:.2f}, velocity: {velocity:.2f}")模拟 10 秒后,小车停在位置 5.04,速度为 0.04。没有任何一个随机计划单独看起来很理想,但执行一步后根据测量状态重新规划,可以持续修正误差。这种方法称为随机射击,是基于采样的 MPC 系列中最简单的一种;该系列还包括交叉熵方法和模型预测路径积分(MPPI)控制,Georgia Tech 的研究人员曾用 MPPI 控制五分之一比例的拉力赛车在土路赛道上比赛。
MPC 在工厂、机器人、汽车和建筑中的应用#
- 流程工业:炼油厂、化工厂和发电站使用 MPC,使温度、压力和产品质量保持在接近极限的范围内,以最大化产能;MPC 最初正是应用于这一领域。
- 足式机器人:MIT 的 Cheetah 3 使用凸 MPC 运行和保持平衡,每秒多次重新计算地面反作用力;之后,MIT 将该控制器作为开源软件发布,用于 Mini Cheetah。
- 驾驶:自动驾驶汽车中的路径跟踪控制器会使用 MPC,在满足转向、加速和舒适度限制的前提下平稳跟随规划轨迹。
- 建筑:供暖和制冷控制器会根据天气和人员占用预测数小时后的室温,并在能源价格最低时提前制冷或预热。
MPC 与相关方法的比较#
- PID 控制:PID 控制器根据当前误差、误差积分和误差变化率计算输出。它简单、成本低,但没有未来模型,也无法处理约束。
- 线性二次调节器(LQR):LQR 针对带二次代价的线性系统,在无限时域上以闭式形式求出最优反馈律。MPC 会在线求解有限时域版本,因此能够施加约束并处理非线性模型。
- 强化学习:RL 会在部署前通过经验学习策略,之后只需一次快速前向传播就能选择动作。MPC 则会在线使用显式模型进行新的优化求解。
这两种方法正日益融合。基于模型的深度强化学习会学习一个世界模型,并通过 MPC 在其中进行规划;TD-MPC2 等方法则会在学到的潜在空间中规划,并使用学习到的价值函数评估短期时域结束后的结果。学到的动力学模型属于预测建模的一种,其在整个时域内的准确度决定了这类控制器能够有效规划多远。
MPC 中的感知#
MPC 控制器的规划效果取决于其感知能力。对于机器人在人群中移动这类物理 AI系统,其状态必须包含人们所在的位置及移动方向。摄像头使用 Ultralytics YOLO26的跟踪模式运行时,会为每一帧中的每个人提供一个边界框和持久的跟踪 ID。结合深度估计或相机标定以及卡尔曼滤波器,这些跟踪结果就能转化为障碍物的位置和速度,供控制器的约束避让。










