三分钟看懂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的核心思想可以总结为一句话:
不要只纠正现在的错误,而要通过预测未来,提前决定现在应该怎么做。