跳至主要内容
返回文章列表
约 17 分钟阅读

机器人学习与最优控制:从 LQR、MPC 到 Isaac Sim、MuJoCo、SAPIEN 与 PyBullet

梳理 PID、LQR、iLQR、MPC、模仿学习与强化学习的关系,并比较 Isaac Sim/Isaac Lab、MuJoCo、SAPIEN 和 PyBullet 的定位、优势与适用场景。

博客目录 →

机器人学习经常被描述成“让神经网络直接输出动作”,最优控制则经常被描述成“根据动力学模型计算控制量”。在真实机器人上,这两条路线很少是非此即彼:学习方法擅长从视觉、语言和历史轨迹中提取泛化能力,控制方法擅长在动力学、接触、执行器饱和和安全约束下把动作稳定地执行出来。

仿真工具处在两者之间。它不是控制器,也不是自动生成智能的按钮,而是一块可以反复实验的“数字试验台”:我们可以在里面验证动力学假设、训练策略、生成数据、做参数扰动,再把结果带到真实机器人上检验。本文从方法和工程链路出发,梳理机器人学习、最优控制与 Isaac Sim、MuJoCo、SAPIEN、PyBullet 等工具如何组合。

机器人学习与最优控制的闭环示意图
图:机器人学习与最优控制的闭环。学习模块提供目标、策略或模型,控制器负责在约束下执行,仿真或真实机器人产生下一步观测。

一、先把三个概念分开

1. 机器人学习:从数据中获得策略或模型

机器人学习的目标通常是得到一个策略、价值函数或动力学模型。例如,策略可以写成:

at=πθ(ot,ht,g), a_t = \pi_\theta(o_t, h_t, g),

其中 oto_t 是当前观测,hth_t 可以是历史观测或隐状态,gg 是任务目标,θ\theta 是待学习参数。输入可能是图像、深度、关节状态和语言指令,输出可以是关节位置、末端位姿、速度、力矩,或者交给下层控制器的目标轨迹。

行为克隆、强化学习、离线强化学习和世界模型都属于这一层。它们的差别主要在于监督信号来自哪里:专家动作、环境奖励、固定数据集,还是对未来状态的预测。

2. 最优控制:在模型和约束下选择动作序列

最优控制不一定要用神经网络。给定状态转移模型:

xt+1=fθ(xt,ut)+wt,yt=h(xt)+vt, x_{t+1}=f_\theta(x_t,u_t)+w_t, \qquad y_t=h(x_t)+v_t,

控制器在有限时间窗内求解:

min⁡u0:T−1∑t=0T−1ℓ(xt,ut)+ℓT(xT),s.t.xt+1=fθ(xt,ut), \min_{u_{0:T-1}} \sum_{t=0}^{T-1}\ell(x_t,u_t)+\ell_T(x_T), \quad \text{s.t.}\quad x_{t+1}=f_\theta(x_t,u_t),

并把控制量限制在关节位置、速度、力矩和碰撞约束允许的范围内。这里的“最优”通常指在给定模型、代价和时间窗中的最优或近似最优,并不意味着对所有未知环境都全局最优。

3. 仿真:让状态转移和传感器反馈可重复

仿真器负责根据动力学、接触和传感器模型推进环境:输入动作,得到下一状态、图像、深度、力传感器读数以及碰撞结果。它可以承载控制器和学习策略,却不能替代控制器本身。

一个实用的分工是:

  • 学习负责从高维观测中提取任务相关信息,或学习难以显式建模的残差。
  • 最优控制负责利用模型、目标和约束,把动作变成稳定的短时执行计划。
  • 仿真负责低成本地重复试验,并暴露模型、传感器和策略在扰动下的表现。
  • 真实机器人负责最终验证摩擦、延迟、柔顺性和未建模接触是否真的可接受。

二、最优控制方法:先让机器人“按模型做好一件事”

1. PID:工程基线,不等于最优控制

PID 根据误差、误差积分和误差变化率计算控制量:

ut=KPet+KI∑k≤tek+KD(et−et−1). u_t=K_P e_t+K_I\sum_{k\leq t}e_k+K_D(e_t-e_{t-1}).

它不需要完整的机器人动力学模型,调参后容易部署,因此常作为关节位置、速度或力矩环的基线。它的局限也很明确:多关节耦合、碰撞约束、未来轨迹和能耗目标通常不会被统一考虑。工程上常见的“策略 + PD/PID”架构,就是把学习或规划放在高层,把 PID 放在底层执行。

2. LQR:线性模型加二次代价

在某个工作点附近把系统线性化:

δxt+1=Aδxt+Bδut, \delta x_{t+1}=A\delta x_t+B\delta u_t,

再最小化状态偏差和控制能量的二次代价:

J=∑t(δxt⊤Qδxt+δut⊤Rδut). J=\sum_t\left(\delta x_t^\top Q\delta x_t+\delta u_t^\top R\delta u_t\right).

LQR 可以得到清晰、快速的线性反馈律 δut=−Kδxt\delta u_t=-K\delta x_t。它适合平衡、轨迹跟踪和局部稳定控制,也很适合用来验证动力学模型是否基本正确。代价是工作范围有限:当系统强非线性、发生大范围接触或存在硬约束时,需要重新线性化、加约束,或转向 iLQR、MPC 等方法。

3. iLQR、DDP 与轨迹优化

iLQR 和 DDP 从一条候选轨迹出发,在轨迹附近对动力学和代价进行局部近似,再反复执行前向 rollout 与反向更新。它们比单点线性控制更适合处理非线性机器人运动,常用于摆动腿、操作臂和短时动作规划。

这类方法的特点是“局部但高效”:初始轨迹、动力学模型和代价函数会明显影响结果;遇到接触切换、不可微碰撞或很差的初值时,优化可能停在不理想的局部解。因此实践中会结合采样、轨迹库、平滑代价和安全约束来提高鲁棒性。

4. MPC:每一步都重新规划

模型预测控制的典型循环是:

  1. 读取当前状态或状态估计。
  2. 在有限预测时域内求解一段控制序列。
  3. 只执行序列中的第一步或前几步。
  4. 读取新状态后再次求解。

由于它不停地“看一步、走一步、再规划”,MPC 能够把未来轨迹、控制饱和和状态约束放进同一个优化问题。它的难点是实时性和模型质量:预测时域越长、接触和约束越复杂,计算越重;模型有系统偏差时,滚动优化也会稳定地做出错误预测。

方法主要依赖优势常见局限
PID / PD误差与局部反馈简单、快速、易部署不显式处理耦合、未来轨迹和复杂约束
LQR局部线性模型、二次代价可解释、稳定、计算快局部有效,原生约束能力有限
iLQR / DDP非线性模型、候选轨迹适合短时非线性运动优化依赖初值和模型,容易受局部最优影响
MPC预测模型、滚动优化能处理轨迹、约束和扰动需要实时求解器与较可靠的模型

一个值得参考的方向是 MuJoCo 生态中的实时行为合成和预测采样工作,它把 iLQG、梯度法和采样式规划器放在同一套控制实验框架中,说明仿真器不仅能跑强化学习,也可以成为最优控制算法的测试场。Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo

三、机器人学习方法:让控制器从数据中获得泛化

1. 行为克隆:把示范变成策略

行为克隆把示范数据中的观测—动作对当作监督学习样本,训练 πθ(ot)≈at\pi_\theta(o_t)\approx a_t。它实现简单、训练稳定,尤其适合已有高质量遥操作或规划轨迹的场景。

问题在于分布偏移:策略一旦走到示范没有覆盖的状态,错误会被连续放大。收集恢复动作、增加失败轨迹和使用闭环数据,比单纯堆叠更多相似成功样本更重要。

2. 强化学习:用奖励探索策略

强化学习不要求每一步都有专家动作,而是通过奖励、价值函数和环境交互寻找策略。仿真器的可并行性让它能承受大量试错,这也是 Isaac Lab、MuJoCo Playground 等学习框架强调批量环境和 GPU 加速的原因。

但奖励函数不是控制器。奖励写得好,只代表优化目标比较清楚;它仍然需要底层动作接口、观测归一化、动作限幅、终止条件和安全机制。一个只在仿真里“奖励很高”的策略,可能在真实机器人上因为延迟、摩擦或接触误差而失效。

3. 离线强化学习:在固定数据集上学习

离线强化学习不再在线探索,而是从已有轨迹中估计价值和策略。它节省真实机器人试错成本,却更容易受到数据分布外动作的影响。数据覆盖的任务、失败模式和状态边界,往往比算法名字本身更决定结果。

4. 残差和混合控制:更适合落地的折中

一个常见的实用结构是:

ut=utmodel+Δutlearned. u_t=u_t^{\text{model}}+\Delta u_t^{\text{learned}}.

其中 utmodelu_t^{\text{model}} 由 PD、LQR 或 MPC 产生,学习模块只预测模型没有覆盖的残差。这样可以保留可解释的稳定基线,把学习容量用在摩擦、柔顺性、视觉误差或接触细节上。对于安全要求高、真实数据有限的系统,这种结构通常比“端到端策略直接控制力矩”更容易调试。

学习方式学到什么数据或反馈适合的角色
行为克隆示范分布中的策略专家轨迹快速复现、初始化策略
在线强化学习策略与价值奖励和环境交互仿真探索、复杂接触任务
离线强化学习数据集内的策略改进固定轨迹真实机器人数据再利用
残差 / 混合控制模型控制的补偿项示范、奖励或系统辨识保留安全基线、提高泛化

四、仿真在训练链路中到底做什么

一套可复现的仿真训练循环通常包含:

机器人资产与参数
        ↓
动力学、碰撞、接触与传感器
        ↓
观测、状态估计、历史帧
        ↓
规划器 / 控制器 / 学习策略
        ↓
动作、限幅与安全检查
        ↓
推进仿真、记录指标、更新策略

仿真器的价值不只是“画出一个逼真的画面”,而是能够控制变量并重复测量:改变摩擦系数,观察抓取成功率;加入相机噪声,观察策略的退化;把控制频率和执行器延迟调到接近真实设备,检查 MPC 或策略是否仍然稳定。

在视觉任务中,渲染质量重要,但它必须和几何、材质、光照、传感器曝光、运动模糊以及标定误差一起评估。在接触任务中,碰撞几何、接触求解器、摩擦模型、关节阻尼和执行器模型通常比单张渲染图更直接地影响控制结果。

五、四类工具怎么选

先区分工具所处的层次:Isaac Sim 是面向机器人和数字孪生的仿真平台,Isaac Lab 是搭建在其上的机器人学习框架;MuJoCo 是动力学引擎,MJX 和 MuJoCo Playground 则把它扩展到批量 GPU 仿真和学习工作流;SAPIEN 更聚焦物理丰富的具身智能与操作任务;PyBullet 则以轻量、易用和 Python 原型开发见长。

工具核心定位更适合主要优势主要成本或风险
Isaac Sim + Isaac Lab高保真平台 + GPU 机器人学习框架视觉、合成数据、并行 RL、复杂机器人渲染、传感器、物理和学习工作流衔接紧密环境重、对 NVIDIA GPU 和版本兼容较敏感
MuJoCo + MJX / Playground高效多关节动力学 + 批量学习控制研究、RL、接触、sim-to-real模型清晰、迭代快、控制算法友好高保真工业场景和资产生产需要额外工作
SAPIEN + ManiSkill物理丰富的操作与具身智能仿真机械臂、灵巧手、深度视觉、关节物体CPU/GPU 物理、渲染、操作任务衔接好需要自己理解资产、接触和环境配置
PyBulletPython 机器人仿真与 Bullet 接口URDF 原型、教学、快速验证、远程仿真上手快、接口直观、连接模式灵活精细接触和 sim-to-real 结果需要认真校准

1. Isaac Sim / Isaac Lab:高保真和大规模学习

Isaac Sim 更像完整的平台:可以导入 CAD、URDF 或现实采集结果,组装带有材质、物理和传感器的场景,再进行测试、验证和合成数据生成。Isaac Lab 则建立在 Isaac Sim 之上,面向模仿学习、强化学习和运动规划提供任务、传感器、并行环境与训练接口。

它适合需要视觉传感器、复杂场景、合成数据、双足或移动操作机器人,以及需要大规模并行 rollout 的项目。代价是依赖较重:显卡、驱动、Omniverse 组件、容器和版本组合都会影响安装与运行;如果只是验证一个二连杆 LQR,使用完整平台往往会把问题复杂化。

Isaac Lab 中的并行机器人学习仿真场景
图:Isaac Lab 官方项目图,展示了面向机器人学习的并行仿真场景。图片来源:Isaac Lab GitHub。

2. MuJoCo / MJX / MuJoCo Playground:控制研究的高效试验台

MuJoCo 是面向机器人、仿生学、图形学和机器学习的通用物理引擎,擅长多关节动力学和接触计算。模型通常通过 MJCF 描述,关节、执行器、传感器、几何体和物理参数都比较直接,便于把控制算法写成可重复的实验。

在其上,MuJoCo Playground 提供了基于 MJX 的开放式机器人学习工作流,覆盖四足、人形、机械臂和灵巧手等任务。MuJoCo 的优势不是默认拥有最完整的工业数字孪生,而是模型轻、反馈快、动力学接口清楚,特别适合先把 LQR、iLQR、MPC、RL 或 sim-to-real 基线跑通。

MuJoCo Playground 中的四足、人形、机械臂和灵巧手任务
图:MuJoCo Playground 官方展示图,覆盖四足、人形、机械臂和灵巧手等机器人学习任务。图片来源:MuJoCo Playground。

3. SAPIEN / ManiSkill:面向操作和具身智能的物理场景

SAPIEN 的定位是物理丰富、面向机器人和具身智能的仿真平台。官方文档强调 CPU/GPU 物理、渲染、光线追踪、关节物体数据集、深度观测,以及控制和运动规划接口。对于“打开抽屉、抓取物体、操作工具”这类需要大量接触和关节物体的任务,它通常比只搭建一个简单平面环境更顺手。

如果使用 ManiSkill 一类任务框架,还可以进一步获得 Gym 风格的操作环境、示范数据和强化学习接口。SAPIEN 的重点不在于替代所有数字孪生需求,而是让机器人操作中的几何、接触和视觉观测成为学习与控制实验的一等公民。

SAPIEN 中机械臂抓取并抬起方块的操作任务
图:SAPIEN 官方操作任务示例,机械臂在仿真中抓取并抬起方块。图片来源:SAPIEN Manipulation 文档。

4. PyBullet:快速原型和工程验证的轻量入口

PyBullet 是 Bullet 的 Python 接口,可以加载 URDF、SDF 和 MJCF,执行正向与逆向动力学、正逆运动学、碰撞检测和射线查询。它提供 GUI、DIRECT、共享内存、UDP 和 TCP 等连接模式,适合快速写出一个控制循环,或把仿真服务放在另一台机器上。

PyBullet 的优势是“先把问题跑起来”:验证关节控制器、检查 URDF、调试路径规划和搭建教学 demo 都很方便。需要注意的是,方便加载模型不等于模型已经校准;当任务依赖精细接触、柔性物体或高精度 sim-to-real 时,必须自己测量惯量、摩擦、阻尼、控制延迟和执行器响应,并在真实数据上复核。

PyBullet Bullet 物理引擎的机器人与虚拟现实示例场景
图:Bullet / PyBullet 官方快速入门中的机器人与虚拟现实示例场景。图片来源:PyBullet Quickstart Guide。

六、不要按“哪个最强”选,而要按问题选

你的第一个问题优先考虑原因
想先验证机械臂的 LQR、iLQR 或 MPCMuJoCo动力学和控制接口清晰,迭代成本低
想做大规模视觉 RL、四足或人形训练Isaac Lab + Isaac Sim适合并行环境、传感器和复杂场景
想研究深度视觉、关节物体和操作任务SAPIEN + ManiSkill物理、渲染、操作环境衔接紧密
想快速加载 URDF、写 Python 控制循环PyBullet上手快,连接方式和示例丰富
想做合成数据、ROS 2、SIL/HIL 或数字孪生Isaac Sim场景、传感器和系统级验证能力更完整
想降低单一仿真器带来的偏差两个仿真器交叉验证观察策略是否只适应某套接触或渲染实现

一个稳妥的选择顺序是:先用最轻的工具验证数学和控制接口,再根据视觉、场景规模、接触复杂度和数据需求升级。工具越重,不代表结果越可靠;如果任务定义、坐标系、动作接口和评价指标没有固定下来,换仿真器只会把不确定性转移到另一层。

七、一条可靠的 sim-to-real 工作流

1. 先固定单位、坐标系和接口

明确长度、质量、角度、时间单位,规定世界坐标、机体坐标、相机坐标和末端坐标的方向,并记录动作到底是位置、速度、力矩还是目标姿态。很多“策略学不会”的问题,其实来自坐标轴、时间戳或动作缩放不一致。

2. 先验证被动动力学,再验证单步控制

让机器人在没有策略的情况下执行重力、关节限位和简单摆动测试,检查质量、惯量、阻尼、摩擦和接触是否数量级合理。随后用一个 PD 或 LQR 跟踪简单轨迹,确认控制频率、仿真步长、动作保持和延迟都与预期一致。

3. 用基线控制器给学习系统兜底

在训练策略之前,先让 PD、LQR 或 MPC 完成一个简化任务。它既是性能基线,也是安全层:当策略输出超出动作范围、观测失真或置信度下降时,系统仍能回到一个可解释的控制模式。

4. 只随机化不确定的参数

域随机化不是把所有参数都随机到极端,而是根据真实测量结果给摩擦、质量、相机噪声、光照、延迟和执行器增益设置分布。先做敏感性分析,再把训练预算投入到真正影响成功率的变量上。

5. 评估闭环指标,而不是只看训练回报

至少同时记录成功率、碰撞率、轨迹误差、峰值力矩、能耗、恢复时间、对延迟的敏感度和跨场景表现。训练回报上升而碰撞率也上升,通常说明奖励或终止条件没有体现真正的任务约束。

6. 用少量真实数据做校准和回归

真实机器人数据可以用来校准执行器响应、相机时间同步、摩擦和接触参数,也可以用来发现仿真里没有建模的失败模式。每次修改模型或策略后,都应保留一组固定的真实回归任务,避免“修好了仿真,破坏了部署”。

八、常见误区

  • 把渲染逼真等同于控制逼真。 视觉任务需要外观和传感器一致,接触任务还需要动力学、几何、摩擦、阻尼和时延一致。
  • 把奖励函数当成控制器。 奖励只定义了想要什么,控制器还要解决怎么稳定地做到、动作是否可执行以及发生故障时如何停下来。
  • 忽略仿真步长和控制频率。 物理积分频率、策略更新频率、动作保持时间和传感器发布频率必须明确,否则同一策略在不同工具中会表现完全不同。
  • 只建模理想执行器。 真实电机有饱和、死区、延迟、量化和温升,仿真中加入这些因素往往比把画面再做精细一点更有价值。
  • 没有先做系统辨识。 如果质量、惯量、摩擦和相机标定都不可信,算法对比会变成参数误差对比。
  • 混淆仿真平台和学习框架。 Isaac Sim、MuJoCo、SAPIEN、PyBullet 主要解决环境与物理;Isaac Lab、MJX、MuJoCo Playground、ManiSkill 解决批量任务、训练接口或学习工作流。二者可以组合,但不是同一个层次的替代品。

总结

机器人学习与最优控制的关系,可以概括为一句话:学习扩大任务和观测的覆盖范围,控制把每一次执行拉回动力学和安全约束之内,仿真让这套组合可以低成本地反复试验。

  • 想做局部稳定和精确跟踪,先从 PD、LQR、iLQR 或 MPC 入手。
  • 想处理视觉、语言、复杂场景和大规模试错,再引入行为克隆、强化学习或离线强化学习。
  • 想做高保真视觉与系统级验证,优先看 Isaac Sim;想快速研究动力学和控制,优先看 MuJoCo;想做操作与关节物体,优先看 SAPIEN;想快速验证 Python/URDF 原型,PyBullet 仍然很实用。
  • 真正落地时,最稳妥的架构往往不是“学习替代控制”,而是“学习提供目标或残差,MPC/LQR/PD 负责执行与安全兜底”。

参考资料

打开原图