技术博客
推理优化其他原理

三分钟看懂MPC

LSST2026-08-03 09:17
三分钟看懂MPC

三分钟看懂MPC:让控制器先预测未来,再决定现在怎么做

在机器人、自动驾驶、无人机和工业控制领域,经常会看到一个缩写:

MPC
Model Predictive Control
模型预测控制

它的核心思想可以概括为一句话:

根据系统模型预测未来一段时间的状态,提前规划一组动作,但每次只执行当前最合适的第一步。

普通控制器往往根据当前误差立即做出反应,而MPC会先思考:

如果现在这样控制,
未来几秒会发生什么?

这使MPC不仅能纠正当前误差,还能提前考虑未来的目标、约束和风险。


一、为什么需要MPC?

假设一辆自动驾驶汽车正在接近弯道。

如果控制器只看当前状态,可能会发现车辆还没有偏离车道,于是继续保持当前速度。

但MPC会预测:

按照当前速度继续前进
        ↓
车辆即将进入弯道
        ↓
转向可能来不及
        ↓
未来可能偏离车道

因此,它会提前减速并调整方向。

再比如,一台双足机器人正在上楼梯。

普通反馈控制器可能只在机器人身体已经倾斜后,才开始纠正姿态。

MPC则可以预测:

如果继续抬腿
        ↓
身体重心将向一侧移动
        ↓
机器人可能失去平衡

于是,它会提前调整支撑腿、身体姿态或关节力矩。

这就是MPC与普通反馈控制的重要区别:

普通控制器主要纠正已经出现的误差,MPC则尝试避免未来可能出现的误差。


二、MPC到底在控制什么?

任何控制问题都可以简单表示为:

当前状态 + 控制动作 → 下一时刻状态

使用符号表示为:

x_(t+1) = f(x_t, u_t)

其中:

  • x_t 表示当前系统状态;

  • u_t 表示当前控制输入;

  • f 表示系统的运动规律;

  • x_(t+1) 表示下一时刻状态。

对于一辆汽车,状态可能包括:

车辆位置

行驶速度

车身朝向

横向偏差

转向角

控制输入可能包括:

油门

刹车

方向盘转角

对于机器人,状态可能包括:

机身位置和姿态

关节角度

关节速度

足端位置

接触状态

控制输入可能包括:

关节力矩

目标关节角度

目标关节速度

轮子转速

MPC需要使用这些状态和控制量,预测系统未来会如何变化。


三、MPC的核心工作流程

MPC每次控制时通常会完成四件事。

第一步:获取当前状态

控制器首先读取传感器信息。

例如,机器人可能获得:

当前身体姿态

关节角度

关节速度

足端接触情况

目标运动速度

这些信息组成当前状态 x_t


第二步:预测未来状态

MPC会使用系统模型,预测未来若干个时间步。

假设预测未来5步,可以表示为:

当前状态 x_t
      ↓
预测状态 x_(t+1)
      ↓
预测状态 x_(t+2)
      ↓
预测状态 x_(t+3)
      ↓
预测状态 x_(t+4)
      ↓
预测状态 x_(t+5)

这段未来时间范围称为:

预测时域
Prediction Horizon

假设当前控制周期为0.02秒,预测50步,那么MPC相当于预测未来1秒内的系统状态。


第三步:寻找一组最优控制动作

MPC不会只计算一个动作,而是会规划未来一整组动作:

u_t

u_(t+1)

u_(t+2)

...

u_(t+N-1)

控制器会比较不同控制方案,看哪一种更符合目标。

例如,机器人上楼梯时可能比较:

方案A:快速抬腿,动作激进

方案B:降低速度,提前调整重心

方案C:增加支撑腿力矩,再向前迈步

MPC会通过优化算法选择代价最小的方案。


第四步:只执行第一个动作

假设MPC规划出的最优动作序列是:

u_t*,u_(t+1)*,u_(t+2)*,u_(t+3)*

它不会一次性把这些动作全部执行完,而是只执行第一个动作:

执行 u_t*

下一控制周期到来后,MPC重新读取真实状态,再进行一次预测和优化。

完整过程可以表示为:

读取当前状态
      ↓
预测未来状态
      ↓
优化未来动作序列
      ↓
只执行第一个动作
      ↓
读取新的真实状态
      ↓
重新预测和优化

这种方式叫作:

滚动时域优化
Receding Horizon Control

四、为什么只执行第一个动作?

因为模型永远不可能完全准确。

真实系统中可能存在:

  • 地面摩擦变化;

  • 传感器噪声;

  • 外部碰撞;

  • 电机误差;

  • 未建模动力学;

  • 通信延迟;

  • 环境突然变化。

如果MPC一次执行整条动作序列,预测误差可能不断积累。

例如,控制器原本预测机器人会稳定落脚,但实际落脚时发生了轻微滑动。

如果继续按照旧计划执行,机器人可能摔倒。

因此,MPC采用:

预测很多步

只执行一步

然后重新预测

这样既能够利用未来信息,又能够及时修正模型误差。


五、MPC如何判断哪个方案更好?

MPC需要定义一个代价函数。

代价函数用来衡量:

当前方案到底有多差?

一个简单的代价函数可以表示为:

总代价 =
状态误差代价
+ 控制动作代价
+ 约束违反代价

例如,对机器人直线行走来说,可以设计:

状态误差代价:
偏离目标速度越多,代价越大

航向误差代价:
机身偏离目标方向越多,代价越大

姿态误差代价:
身体倾斜越严重,代价越大

控制代价:
关节力矩越大,代价越大

变化率代价:
相邻控制动作变化越剧烈,代价越大

可以简单写成:

J =
位置误差
+ 速度误差
+ 姿态误差
+ 控制输入大小
+ 控制输入变化量

MPC的任务就是:

寻找一组控制动作

使总代价 J 最小

因此,MPC本质上是一个在线优化问题。


六、什么是预测模型?

MPC中的“M”代表模型。

这个模型负责预测:

给定当前状态和控制输入,系统未来会变成什么样?

常见模型包括:

线性动力学模型

非线性动力学模型

车辆运动学模型

机器人刚体动力学模型

数据驱动模型

神经网络模型

最简单的线性模型可以写成:

x_(t+1) = A x_t + B u_t

其中:

  • A 描述系统状态如何自然变化;

  • B 描述控制输入如何影响系统;

  • x_t 是当前状态;

  • u_t 是控制输入。

如果模型是线性的,约束和代价也是比较简单的二次形式,那么通常可以使用线性MPC。

如果机器人动力学、轮胎模型或接触关系比较复杂,则可能需要非线性MPC。


七、线性MPC和非线性MPC有什么区别?

线性MPC

线性MPC使用类似下面的模型:

x_(t+1) = A x_t + B u_t

它的优点是:

  • 计算速度较快;

  • 优化问题相对容易求解;

  • 更适合实时控制;

  • 参数和行为比较容易分析。

缺点是:

  • 很难精确描述复杂非线性系统;

  • 系统运动范围较大时,模型误差可能明显增加。


非线性MPC

非线性MPC使用:

x_(t+1) = f(x_t, u_t)

其中,f可以是复杂的非线性动力学模型。

它的优点是:

  • 能够更准确描述机器人和车辆;

  • 可以处理复杂动力学;

  • 适合高速运动和大范围姿态变化。

缺点是:

  • 优化计算更加复杂;

  • 求解速度更慢;

  • 更容易出现求解失败;

  • 对初始值和模型精度更加敏感。

因此,实际系统通常需要在以下两点之间权衡:

模型越精确 → 预测可能越准确,但计算更慢

模型越简单 → 计算更快,但预测误差可能更大

八、MPC最大的优势:可以直接加入约束

真实控制系统通常存在大量约束。

例如,一台机器人可能受到以下限制:

关节角度不能超过机械范围

关节速度不能过大

电机力矩不能超过上限

身体倾角不能过大

足端不能进入障碍物内部

轮子不能超过最大转速

传统控制器通常需要额外设计限幅和保护逻辑。

而MPC可以直接把这些条件写入优化问题:

关节角度下限 ≤ 关节角度 ≤ 关节角度上限

最大负力矩 ≤ 关节力矩 ≤ 最大正力矩

最小速度 ≤ 行驶速度 ≤ 最大速度

MPC会在满足约束的前提下寻找较优动作。

因此,它非常适合安全要求较高、物理限制较多的控制问题。


九、用开车理解MPC

可以把MPC想象成一名开车经验丰富的驾驶员。

驾驶员不是只盯着车头当前位置,而是会观察前方道路。

假设前方即将出现弯道,驾驶员会进行内部判断:

如果保持当前速度,会不会冲出车道?

如果现在减速,进入弯道时速度是否合适?

方向盘需要提前转多少?

转向动作会不会太突然?

驾驶员根据未来道路情况决定当前操作。

MPC也是如此:

观察当前状态

预测未来轨迹

比较不同控制方案

选择当前最合理的动作

因此,MPC可以理解为一个不断进行短期规划的控制器。


十、MPC和PID有什么区别?

PID和MPC都是常见控制方法,但思路不同。

PID的核心思想

PID根据当前误差和历史误差进行控制:

误差越大 → 控制作用越强

例如,机器人航向向左偏了,PID就给出向右修正量。

PID的优势是:

  • 实现简单;

  • 计算量小;

  • 易于部署;

  • 对单输入单输出系统非常有效。

但PID通常不会直接预测未来状态,也难以同时处理大量约束。


MPC的核心思想

MPC会预测未来一段时间内的系统状态,并提前规划控制量。

它不仅考虑当前误差,还会考虑:

未来误差

控制输入大小

控制动作平滑性

物理约束

多个控制目标

简单对比如下:

对比项目

PID

MPC

是否使用系统模型

通常不需要

需要

是否预测未来

计算量

较小

较大

约束处理

通常依赖额外逻辑

可直接加入优化

多变量控制

较困难

较适合

部署难度

较低

较高

典型用途

航向保持、速度控制

轨迹跟踪、车辆控制、机器人规划

对于简单的航向修正或速度控制,PID往往已经足够。

对于需要同时考虑多个状态、约束和未来轨迹的问题,MPC通常更有优势。


十一、MPC和强化学习有什么区别?

强化学习和MPC都可以用于机器人控制,但学习方式不同。

MPC

MPC依赖一个明确的系统模型:

当前状态 + 动作 → 未来状态

控制时需要实时求解优化问题。

它的优点是:

  • 行为相对容易解释;

  • 可以直接处理约束;

  • 不一定需要大量训练数据;

  • 能够明确预测未来轨迹。


强化学习

强化学习通过大量试错学习策略:

状态 → 神经网络 → 动作

部署时通常只需要进行一次网络前向计算,因此速度很快。

它的优点是:

  • 能处理复杂非线性系统;

  • 不一定需要精确动力学模型;

  • 可以学习难以人工设计的动作模式;

  • 适合高维感知和复杂运动任务。

但强化学习可能存在:

  • 训练数据量大;

  • 奖励函数难设计;

  • 安全约束难以严格保证;

  • 策略行为不容易解释。


十二、MPC能和强化学习结合吗?

可以,而且这是机器人领域常见的研究方向。

一种方式是让强化学习负责生成高层目标,MPC负责底层执行。

强化学习:
决定向哪里走、选择什么动作模式

MPC:
根据动力学和约束计算具体控制量

例如:

RL输出目标速度和目标落脚点

MPC计算关节力矩和身体姿态

另一种方式是:

MPC生成安全动作

强化学习对MPC结果进行补偿

还可以让神经网络学习MPC中难以准确建模的部分,例如:

摩擦变化

电机误差

接触动力学

模型残差

这种组合通常被称为:

学习型MPC

RL + MPC

残差控制

安全强化学习

它试图同时利用两者的优势:

MPC负责可解释性、预测和约束

强化学习负责适应复杂环境和未知动力学

十三、MPC在机器人中如何使用?

以轮足机器人直线行走为例,MPC可以读取:

当前机身位置和姿态

当前速度

关节状态

轮子速度

目标前进速度

目标航向

然后预测未来一段时间内:

机器人会不会偏离中心线

机身姿态是否稳定

轮子是否会打滑

关节力矩是否超过限制

未来轨迹是否接近目标

优化目标可以设置为:

尽量跟踪目标速度

尽量保持机身水平

尽量减少航向误差

尽量减少控制量变化

尽量避免超过电机能力

最后,MPC输出:

关节力矩

目标关节角度

目标轮速

目标身体姿态

不过,完整机器人MPC需要准确的动力学模型和较快的优化求解器,工程实现难度明显高于PID。


十四、MPC有哪些缺点?

MPC虽然功能强大,但并不是所有场景都适合使用。

1. 依赖模型准确性

如果系统模型与真实系统差异很大,MPC预测的未来轨迹就可能不可靠。

例如,模型认为轮子不会打滑,但真实地面非常光滑,最终控制结果可能失败。


2. 实时计算量较大

MPC每个控制周期都需要求解一次优化问题。

如果机器人控制频率为500Hz,那么每次优化只能使用约2毫秒。

模型越复杂、预测步数越多、约束越多,计算量就越大。


3. 参数设计并不简单

MPC需要调整:

预测时域长度

控制时域长度

状态误差权重

控制输入权重

平滑性权重

约束范围

如果姿态权重过大,机器人可能过于保守;如果速度跟踪权重过大,机器人可能为了追求速度而牺牲稳定性。


4. 可能出现求解失败

复杂优化问题不一定每次都能及时找到可行解。

因此,实际部署中通常还需要准备:

备用控制器

上一次有效控制量

安全停机策略

约束放松机制

十五、如何用一句话理解MPC?

可以把MPC理解为一个不断重复以下过程的控制器:

先预测未来

再规划动作

只执行第一步

然后重新预测

它不像普通控制器那样只根据当前误差进行反应,而是会提前思考:

现在做出的动作,会怎样影响未来?


总结

MPC是一种基于模型和在线优化的控制方法。

它的完整流程可以概括为:

读取当前状态
      ↓
利用模型预测未来
      ↓
计算多组候选动作
      ↓
选择代价最小的动作序列
      ↓
只执行第一个动作
      ↓
重新读取状态并优化

MPC最重要的三个特点是:

预测未来

滚动优化

显式处理约束

它尤其适合:

  • 自动驾驶轨迹跟踪;

  • 机器人运动控制;

  • 无人机飞行控制;

  • 工业过程控制;

  • 能源管理;

  • 多变量约束系统。

MPC的核心思想可以总结为一句话:

不要只纠正现在的错误,而要通过预测未来,提前决定现在应该怎么做。

点赞收藏
// 评论0
0 / 500
还没有评论,快来抢沙发