技术博客
强化学习推理优化其他教程原理

三分钟看懂RL+MPC

LSST2026-08-03 09:20
三分钟看懂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 × 动作变化量

其中:

  • w1w5 是不同目标的权重;

  • 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并不是简单叠加两个算法,而是让机器人同时拥有:

经验学习能力

未来规划能力

实时纠错能力

约束处理能力

这也是它在机器人、自动驾驶和智能控制领域受到关注的重要原因。

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