三分钟看懂RL+MPC

三分钟看懂RL+MPC:让机器人既会“学习”,又会“规划”
在机器人、自动驾驶和无人机控制领域,经常会看到两种方法:
RL
Reinforcement Learning
强化学习
以及:
MPC
Model Predictive Control
模型预测控制
强化学习擅长从大量试错中学习复杂动作,MPC则擅长根据系统模型预测未来并处理约束。
因此,研究人员自然会想到:
能不能让RL负责学习复杂策略,让MPC负责预测未来和保证动作可执行?
这就是RL+MPC的基本思想。
它的核心并不是简单地把两个算法放在一起,而是让它们各自解决自己最擅长的问题:
RL:学习经验、适应复杂环境
MPC:预测未来、规划轨迹、处理约束
一、RL和MPC分别在做什么?
在理解二者如何结合之前,先分别看看它们的工作方式。
1. 强化学习:通过试错学习动作
强化学习的基本过程是:
观察当前状态
↓
策略网络输出动作
↓
环境执行动作
↓
获得奖励和下一状态
↓
根据奖励更新策略
可以简单表示为:
a_t = π(s_t)
其中:
s_t表示当前状态;a_t表示当前动作;π表示强化学习训练得到的策略。
例如,一台机器人在学习爬楼梯时:
状态:
身体姿态、关节角度、关节速度、接触状态
动作:
目标关节角度、关节力矩或轮子速度
奖励:
向前运动、保持平衡、成功上台阶
机器人经过大量仿真训练后,可以学会一种复杂的爬楼梯动作。
强化学习最大的优势是:
即使很难人工写出完整控制规则,它也可能通过试错自动学会。
2. MPC:利用模型预测未来
MPC的基本过程是:
读取当前状态
↓
使用模型预测未来状态
↓
优化未来一段时间的动作
↓
只执行第一个动作
↓
重新读取状态并再次优化
系统模型可以简单写成:
x_(t+1) = f(x_t, u_t)
其中:
x_t表示当前系统状态;u_t表示控制输入;f表示系统动力学模型;x_(t+1)表示下一时刻状态。
MPC会预测未来若干步:
x_t
↓
x_(t+1)
↓
x_(t+2)
↓
x_(t+3)
↓
...
然后寻找一组控制动作:
u_t,u_(t+1),u_(t+2),...
使系统尽量跟踪目标,同时满足各种物理约束。
二、为什么不只使用强化学习?
强化学习可以学会非常复杂的动作,但它也存在一些问题。
1. 很难严格保证安全约束
强化学习通常通过奖励函数间接约束行为。
例如,为了避免机器人关节超过极限,可以设置:
关节接近极限 → 负奖励
但负奖励并不等于绝对禁止。
如果策略认为超过关节限制能够获得更高的其他奖励,它仍然可能输出危险动作。
2. 可能出现训练之外的异常动作
强化学习策略依赖训练数据。
如果真实环境中出现训练时没有覆盖的情况,例如:
地面摩擦突然变化;
机器人负载改变;
台阶高度超出训练范围;
电机性能下降;
传感器产生较大误差;
策略可能输出不可靠动作。
3. 策略缺少显式的未来规划
普通强化学习策略通常根据当前状态直接输出动作:
当前状态 → 神经网络 → 当前动作
虽然神经网络可能隐含学习到长期行为,但它通常不会在部署时明确比较多条未来轨迹。
也就是说,策略可能知道“现在怎么做”,但不一定会在线计算:
现在抬腿以后,
未来0.5秒是否会失去平衡?
三、为什么不只使用MPC?
MPC可以预测未来、处理约束,但同样存在局限。
1. 依赖准确的动力学模型
MPC需要知道:
当前状态 + 控制动作 → 下一状态
但真实机器人通常存在大量难以精确建模的因素:
轮胎或足端摩擦;
台阶碰撞;
电机延迟;
减速器间隙;
柔性结构;
地面材质变化;
复杂接触动力学。
如果模型不准确,MPC预测的未来也会出现误差。
2. 很难人工设计复杂运动模式
对于简单轨迹跟踪,MPC非常有效。
但对于双足机器人爬楼梯、跳跃、起身等复杂动作,仅依靠人工模型和优化目标往往很难得到自然动作。
例如,机器人爬楼梯时需要同时决定:
什么时候抬腿?
抬哪条腿?
抬多高?
身体什么时候前倾?
支撑腿需要多大力矩?
什么时候切换支撑状态?
这些复杂行为如果全部由人工设计,工作量会非常大。
3. 在线计算量较大
MPC每个控制周期都要解决一次优化问题。
如果机器人控制频率很高,优化时间可能非常有限。
例如:
控制频率:500 Hz
每个控制周期:2 ms
如果模型复杂、预测步数很长、约束很多,MPC可能来不及得到结果。
四、RL+MPC为什么能够互补?
RL和MPC的优缺点正好具有一定互补性。
RL擅长:
复杂动作学习
非线性策略表示
适应高维状态
从数据中提取经验
MPC擅长:
预测未来状态
在线轨迹优化
处理物理约束
根据实时状态重新规划
因此,组合后的系统可以形成这样的分工:
RL负责“学会怎么做”
MPC负责“检查这样做是否合适”
也可以理解为:
RL提供经验
MPC提供理性规划
例如,强化学习根据经验认为机器人应该抬起右腿,而MPC会进一步计算:
当前身体姿态是否适合抬右腿?
抬腿以后重心会移动到哪里?
关节是否会超过限制?
足端轨迹是否会撞到台阶?
是否需要降低速度或调整身体姿态?
五、RL+MPC有哪些常见组合方式?
RL和MPC并没有唯一的组合方式。
根据任务不同,通常有以下几种结构。
方式一:RL负责高层决策,MPC负责底层控制
这是最容易理解的一种组合方式。
系统结构可以表示为:
环境状态
↓
强化学习策略
↓
目标速度、目标姿态或目标落脚点
↓
MPC
↓
关节力矩或控制指令
↓
机器人
例如,强化学习可以输出:
目标前进速度
目标转向速度
下一步落脚位置
目标身体高度
目标步态模式
MPC再根据机器人动力学,计算具体的关节力矩。
这种结构中:
RL决定“想做什么”
MPC决定“具体怎么做”
它的优势是分工清晰。
强化学习不需要直接输出底层电机指令,MPC也不需要自己学习复杂的高层行为。
方式二:MPC生成动作,RL负责修正
由于模型不可能完全准确,MPC输出的动作在真实机器人上可能存在误差。
此时可以让强化学习学习一个残差动作:
最终动作 = MPC动作 + RL修正动作
使用符号表示为:
u_final = u_MPC + Δu_RL
其中:
u_MPC是MPC根据动力学模型计算的控制量;Δu_RL是强化学习输出的补偿量;u_final是最终发送给机器人的动作。
例如,MPC认为某个关节需要输出:
10 N·m
强化学习根据历史经验判断真实系统存在摩擦和延迟,于是输出:
+1.2 N·m
最终动作就是:
11.2 N·m
这种方法通常被称为:
Residual RL
残差强化学习
它的基本思想是:
MPC负责完成主要控制任务,RL只学习模型没有描述准确的部分。
方式三:RL学习MPC的模型
传统MPC需要人工建立动力学模型。
如果真实系统过于复杂,可以使用神经网络从数据中学习预测模型:
预测的下一状态 =
神经网络模型(当前状态,当前动作)
表示为:
x_(t+1) = f_θ(x_t, u_t)
其中,f_θ是通过数据训练得到的模型。
MPC再使用这个学习模型预测未来。
系统结构可以表示为:
机器人交互数据
↓
训练神经网络动力学模型
↓
MPC使用学习模型预测未来
↓
在线优化动作
这种方法通常属于:
Learning-based MPC
Data-driven MPC
学习型模型预测控制
它能够减少对精确人工模型的依赖。
方式四:RL调整MPC参数
MPC中有很多参数需要人工设置,例如:
速度跟踪权重
姿态稳定权重
控制能量权重
预测时域
约束松弛系数
固定参数不一定适合所有环境。
因此,可以让强化学习根据当前任务自动调整MPC参数。
例如:
平地行走:
提高速度跟踪权重
楼梯环境:
提高姿态稳定和足端避障权重
湿滑地面:
提高控制平滑和防滑权重
此时,RL不直接输出机器人动作,而是输出MPC的参数:
RL输出代价权重
↓
MPC根据新权重计算动作
这样既保留了MPC的结构,又提高了系统适应能力。
方式五:MPC作为RL的安全过滤器
强化学习先输出一个候选动作:
a_RL
然后MPC判断该动作是否会违反约束。
如果动作安全,就尽量保持原动作;如果动作危险,就寻找一个距离原动作最近的安全动作。
可以表示为:
RL候选动作
↓
MPC预测未来风险
↓
满足约束?
↙ ↘
是 否
直接执行 修改为安全动作
例如,RL输出的动作可能导致:
关节超过角度限制;
电机力矩过大;
机器人身体严重倾斜;
未来足端与台阶碰撞。
MPC会对动作进行修正。
这种结构可以理解为:
RL负责提出方案
MPC负责安全审核
六、以机器人爬楼梯为例
假设一台轮足机器人需要爬楼梯。
强化学习策略输入:
机身角速度
身体姿态
关节角度
关节速度
足端接触状态
目标前进速度
RL根据训练经验输出:
抬右腿
膝关节弯曲
身体向前移动
支撑腿增加输出
如果直接执行这些动作,可能存在风险。
因此,将RL输出送入MPC。
MPC会预测未来一段时间:
身体是否会失去平衡?
支撑腿力矩是否超过上限?
足端是否能够越过台阶边缘?
落脚位置是否稳定?
机器人是否会偏离楼梯中心线?
假设RL希望机器人快速向前抬腿,但MPC预测快速动作会导致身体向左倾斜。
MPC可能进行以下调整:
降低前进速度
减小抬腿幅度
增加右侧支撑力
调整身体航向
延迟落脚时间
最终,机器人执行的是经过约束和未来预测修正后的动作。
七、RL+MPC的代价函数如何设计?
MPC需要一个代价函数来比较不同控制方案。
对于机器人控制,可以设计:
总代价 =
速度跟踪误差
+ 姿态误差
+ 航向误差
+ 关节力矩代价
+ 动作变化代价
+ 约束违反代价
例如:
J =
w1 × 速度误差
+ w2 × 姿态误差
+ w3 × 航向误差
+ w4 × 控制能量
+ w5 × 动作变化量
其中:
w1到w5是不同目标的权重;J是整个预测时域内的总代价。
RL可以参与其中的多个环节:
输出参考轨迹
调整代价权重
预测未知动力学
提供候选动作
提供MPC初始解
因此,RL+MPC并不只是“RL输出,MPC修正”这一种模式。
八、为什么RL可以帮助MPC提高计算速度?
MPC每次都需要搜索最优动作序列。
如果完全从随机动作开始搜索,可能需要较长计算时间。
RL策略可以根据经验快速生成一个较好的初始动作序列:
RL输出初始方案
↓
MPC在初始方案附近优化
↓
更快获得可行解
这相当于:
RL负责猜一个比较好的答案
MPC负责继续精确优化
例如,在没有RL时,MPC可能需要从零开始寻找机器人落脚轨迹。
加入RL后,策略网络可以直接给出一个大致合理的落脚点,MPC只需要进行局部调整。
这种方式能够降低优化难度,并减少求解失败的概率。
九、RL+MPC与单独使用RL相比有什么优势?
1. 更容易处理安全约束
MPC可以显式设置:
关节角度限制
关节速度限制
电机力矩限制
身体姿态限制
足端位置限制
这比单纯使用奖励惩罚更加直接。
2. 可以在线适应状态变化
MPC每个控制周期都会根据最新状态重新规划。
即使RL输出不够准确,MPC也可以根据实际状态修正。
3. 具有更强的可解释性
研究人员可以查看MPC预测的轨迹、代价和约束,从而分析系统为什么修改某个动作。
纯神经网络策略通常更难解释。
4. 降低策略异常输出的风险
当RL遇到训练分布之外的状态时,MPC可以作为第二层保护。
十、RL+MPC与单独使用MPC相比有什么优势?
1. 减少对精确模型的依赖
RL可以学习模型误差和复杂接触规律。
2. 更容易产生复杂动作
RL可以通过大量训练学会抬腿、跨越、恢复平衡等难以人工设计的行为。
3. 可以自动调整控制策略
RL能够根据不同地形、速度和任务调整MPC的目标或参数。
4. 可以提供优化初始值
RL输出可以帮助MPC更快找到较优解。
十一、RL+MPC有哪些难点?
虽然RL+MPC看起来非常理想,但实际实现并不简单。
1. 系统结构更加复杂
单独使用RL时,流程可能只有:
状态 → 策略网络 → 动作
加入MPC后会变成:
状态
↓
RL策略
↓
参考目标或候选动作
↓
MPC预测和优化
↓
最终动作
模块越多,调试难度越大。
2. RL和MPC可能相互冲突
RL可能追求更高速度,MPC则为了安全不断降低速度。
如果二者目标设计不一致,系统可能出现:
RL不断要求加速
MPC不断进行限速
最终动作可能震荡或过于保守。
因此,需要保证:
RL奖励目标
MPC代价目标
机器人真实任务目标
三者尽量一致。
3. 实时计算压力较大
RL网络前向计算通常很快,但MPC在线优化可能消耗较多时间。
如果控制频率很高,需要:
简化动力学模型;
缩短预测时域;
使用快速求解器;
使用RL提供初始解;
将高层和底层控制设置为不同频率。
例如:
RL高层策略:50 Hz
MPC控制器:200 Hz
电机底层控制:1000 Hz
4. 训练时和部署时必须保持一致
如果RL训练时没有考虑MPC的修正,策略可能形成错误依赖。
例如,RL知道MPC总会帮它修正危险动作,于是策略自身可能变得越来越激进。
因此,训练时最好把MPC或安全过滤逻辑放入训练闭环:
RL输出动作
↓
MPC修正
↓
环境执行修正后的动作
↓
奖励反馈给RL
这样RL才能学习到真正执行的动作结果。
十二、RL+MPC适合哪些任务?
RL+MPC特别适合以下类型的控制问题:
1. 机器人运动控制
例如:
双足机器人行走;
轮足机器人爬楼梯;
四足机器人越障;
机器人倒地起身;
机械臂复杂操作。
2. 自动驾驶
RL可以负责:
超车、跟车、换道和行为决策
MPC可以负责:
车辆轨迹跟踪、转向和加减速控制
3. 无人机控制
RL负责复杂环境中的导航和策略选择,MPC负责飞行轨迹以及姿态约束。
4. 工业过程控制
RL可以根据长期收益调整生产策略,MPC则负责满足温度、压力和设备能力等约束。
十三、RL+MPC一定比单独使用更好吗?
不一定。
如果任务非常简单,例如:
机器人保持固定航向
电机维持固定速度
温度保持在某个设定值
PID或简单MPC可能已经足够。
如果仿真速度很快、约束要求不高、部署计算资源有限,直接使用PPO策略也可能更加简单高效。
RL+MPC更适合:
任务复杂
环境变化明显
存在严格物理约束
需要在线预测
单独RL或MPC无法很好完成
算法越复杂,并不代表效果一定越好。
真正重要的是:
是否根据任务需求,合理划分RL和MPC的职责。
十四、如何用一句话理解RL+MPC?
可以把RL+MPC想象成一名有经验的驾驶员和一套实时导航系统。
强化学习像驾驶经验:
它通过大量经历,知道不同情况下大概应该怎么做。
MPC像实时规划系统:
它根据当前道路和车辆状态,预测未来并修正具体操作。
二者结合后:
RL提供经验性的方案
MPC检查未来结果
最终执行安全且合理的动作
总结
RL+MPC是一种将数据驱动学习和模型预测控制结合起来的方法。
两者的核心分工是:
RL:
学习复杂行为
适应未知环境
提供高层决策或候选动作
MPC:
预测未来状态
优化动作序列
满足系统约束
在线修正控制结果
常见组合方式包括:
RL高层决策 + MPC底层控制
MPC基础动作 + RL残差修正
RL学习动力学模型 + MPC在线规划
RL调整MPC参数
MPC过滤RL危险动作
其核心思想可以概括为一句话:
让强化学习负责从经验中找到方向,让MPC负责根据模型预测未来,并把方案变得可执行。
RL让机器人具备学习复杂动作的能力,MPC让机器人在执行动作之前多考虑一步。
因此,RL+MPC并不是简单叠加两个算法,而是让机器人同时拥有:
经验学习能力
未来规划能力
实时纠错能力
约束处理能力
这也是它在机器人、自动驾驶和智能控制领域受到关注的重要原因。