机器人学习经常被描述成“让神经网络直接输出动作”,最优控制则经常被描述成“根据动力学模型计算控制量”。在真实机器人上,这两条路线很少是非此即彼:学习方法擅长从视觉、语言和历史轨迹中提取泛化能力,控制方法擅长在动力学、接触、执行器饱和和安全约束下把动作稳定地执行出来。
仿真工具处在两者之间。它不是控制器,也不是自动生成智能的按钮,而是一块可以反复实验的“数字试验台”:我们可以在里面验证动力学假设、训练策略、生成数据、做参数扰动,再把结果带到真实机器人上检验。本文从方法和工程链路出发,梳理机器人学习、最优控制与 Isaac Sim、MuJoCo、SAPIEN、PyBullet 等工具如何组合。
一、先把三个概念分开
1. 机器人学习:从数据中获得策略或模型
机器人学习的目标通常是得到一个策略、价值函数或动力学模型。例如,策略可以写成:
其中 是当前观测, 可以是历史观测或隐状态, 是任务目标, 是待学习参数。输入可能是图像、深度、关节状态和语言指令,输出可以是关节位置、末端位姿、速度、力矩,或者交给下层控制器的目标轨迹。
行为克隆、强化学习、离线强化学习和世界模型都属于这一层。它们的差别主要在于监督信号来自哪里:专家动作、环境奖励、固定数据集,还是对未来状态的预测。
2. 最优控制:在模型和约束下选择动作序列
最优控制不一定要用神经网络。给定状态转移模型:
控制器在有限时间窗内求解:
并把控制量限制在关节位置、速度、力矩和碰撞约束允许的范围内。这里的“最优”通常指在给定模型、代价和时间窗中的最优或近似最优,并不意味着对所有未知环境都全局最优。
3. 仿真:让状态转移和传感器反馈可重复
仿真器负责根据动力学、接触和传感器模型推进环境:输入动作,得到下一状态、图像、深度、力传感器读数以及碰撞结果。它可以承载控制器和学习策略,却不能替代控制器本身。
一个实用的分工是:
- 学习负责从高维观测中提取任务相关信息,或学习难以显式建模的残差。
- 最优控制负责利用模型、目标和约束,把动作变成稳定的短时执行计划。
- 仿真负责低成本地重复试验,并暴露模型、传感器和策略在扰动下的表现。
- 真实机器人负责最终验证摩擦、延迟、柔顺性和未建模接触是否真的可接受。
二、最优控制方法:先让机器人“按模型做好一件事”
1. PID:工程基线,不等于最优控制
PID 根据误差、误差积分和误差变化率计算控制量:
它不需要完整的机器人动力学模型,调参后容易部署,因此常作为关节位置、速度或力矩环的基线。它的局限也很明确:多关节耦合、碰撞约束、未来轨迹和能耗目标通常不会被统一考虑。工程上常见的“策略 + PD/PID”架构,就是把学习或规划放在高层,把 PID 放在底层执行。
2. LQR:线性模型加二次代价
在某个工作点附近把系统线性化:
再最小化状态偏差和控制能量的二次代价:
LQR 可以得到清晰、快速的线性反馈律 。它适合平衡、轨迹跟踪和局部稳定控制,也很适合用来验证动力学模型是否基本正确。代价是工作范围有限:当系统强非线性、发生大范围接触或存在硬约束时,需要重新线性化、加约束,或转向 iLQR、MPC 等方法。
3. iLQR、DDP 与轨迹优化
iLQR 和 DDP 从一条候选轨迹出发,在轨迹附近对动力学和代价进行局部近似,再反复执行前向 rollout 与反向更新。它们比单点线性控制更适合处理非线性机器人运动,常用于摆动腿、操作臂和短时动作规划。
这类方法的特点是“局部但高效”:初始轨迹、动力学模型和代价函数会明显影响结果;遇到接触切换、不可微碰撞或很差的初值时,优化可能停在不理想的局部解。因此实践中会结合采样、轨迹库、平滑代价和安全约束来提高鲁棒性。
4. MPC:每一步都重新规划
模型预测控制的典型循环是:
- 读取当前状态或状态估计。
- 在有限预测时域内求解一段控制序列。
- 只执行序列中的第一步或前几步。
- 读取新状态后再次求解。
由于它不停地“看一步、走一步、再规划”,MPC 能够把未来轨迹、控制饱和和状态约束放进同一个优化问题。它的难点是实时性和模型质量:预测时域越长、接触和约束越复杂,计算越重;模型有系统偏差时,滚动优化也会稳定地做出错误预测。
| 方法 | 主要依赖 | 优势 | 常见局限 |
|---|---|---|---|
| PID / PD | 误差与局部反馈 | 简单、快速、易部署 | 不显式处理耦合、未来轨迹和复杂约束 |
| LQR | 局部线性模型、二次代价 | 可解释、稳定、计算快 | 局部有效,原生约束能力有限 |
| iLQR / DDP | 非线性模型、候选轨迹 | 适合短时非线性运动优化 | 依赖初值和模型,容易受局部最优影响 |
| MPC | 预测模型、滚动优化 | 能处理轨迹、约束和扰动 | 需要实时求解器与较可靠的模型 |
一个值得参考的方向是 MuJoCo 生态中的实时行为合成和预测采样工作,它把 iLQG、梯度法和采样式规划器放在同一套控制实验框架中,说明仿真器不仅能跑强化学习,也可以成为最优控制算法的测试场。Predictive Sampling: Real-time Behaviour Synthesis with MuJoCo
三、机器人学习方法:让控制器从数据中获得泛化
1. 行为克隆:把示范变成策略
行为克隆把示范数据中的观测—动作对当作监督学习样本,训练 。它实现简单、训练稳定,尤其适合已有高质量遥操作或规划轨迹的场景。
问题在于分布偏移:策略一旦走到示范没有覆盖的状态,错误会被连续放大。收集恢复动作、增加失败轨迹和使用闭环数据,比单纯堆叠更多相似成功样本更重要。
2. 强化学习:用奖励探索策略
强化学习不要求每一步都有专家动作,而是通过奖励、价值函数和环境交互寻找策略。仿真器的可并行性让它能承受大量试错,这也是 Isaac Lab、MuJoCo Playground 等学习框架强调批量环境和 GPU 加速的原因。
但奖励函数不是控制器。奖励写得好,只代表优化目标比较清楚;它仍然需要底层动作接口、观测归一化、动作限幅、终止条件和安全机制。一个只在仿真里“奖励很高”的策略,可能在真实机器人上因为延迟、摩擦或接触误差而失效。
3. 离线强化学习:在固定数据集上学习
离线强化学习不再在线探索,而是从已有轨迹中估计价值和策略。它节省真实机器人试错成本,却更容易受到数据分布外动作的影响。数据覆盖的任务、失败模式和状态边界,往往比算法名字本身更决定结果。
4. 残差和混合控制:更适合落地的折中
一个常见的实用结构是:
其中 由 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 物理、渲染、操作任务衔接好 | 需要自己理解资产、接触和环境配置 |
| PyBullet | Python 机器人仿真与 Bullet 接口 | URDF 原型、教学、快速验证、远程仿真 | 上手快、接口直观、连接模式灵活 | 精细接触和 sim-to-real 结果需要认真校准 |
1. Isaac Sim / Isaac Lab:高保真和大规模学习
Isaac Sim 更像完整的平台:可以导入 CAD、URDF 或现实采集结果,组装带有材质、物理和传感器的场景,再进行测试、验证和合成数据生成。Isaac Lab 则建立在 Isaac Sim 之上,面向模仿学习、强化学习和运动规划提供任务、传感器、并行环境与训练接口。
它适合需要视觉传感器、复杂场景、合成数据、双足或移动操作机器人,以及需要大规模并行 rollout 的项目。代价是依赖较重:显卡、驱动、Omniverse 组件、容器和版本组合都会影响安装与运行;如果只是验证一个二连杆 LQR,使用完整平台往往会把问题复杂化。
2. MuJoCo / MJX / MuJoCo Playground:控制研究的高效试验台
MuJoCo 是面向机器人、仿生学、图形学和机器学习的通用物理引擎,擅长多关节动力学和接触计算。模型通常通过 MJCF 描述,关节、执行器、传感器、几何体和物理参数都比较直接,便于把控制算法写成可重复的实验。
在其上,MuJoCo Playground 提供了基于 MJX 的开放式机器人学习工作流,覆盖四足、人形、机械臂和灵巧手等任务。MuJoCo 的优势不是默认拥有最完整的工业数字孪生,而是模型轻、反馈快、动力学接口清楚,特别适合先把 LQR、iLQR、MPC、RL 或 sim-to-real 基线跑通。
3. SAPIEN / ManiSkill:面向操作和具身智能的物理场景
SAPIEN 的定位是物理丰富、面向机器人和具身智能的仿真平台。官方文档强调 CPU/GPU 物理、渲染、光线追踪、关节物体数据集、深度观测,以及控制和运动规划接口。对于“打开抽屉、抓取物体、操作工具”这类需要大量接触和关节物体的任务,它通常比只搭建一个简单平面环境更顺手。
如果使用 ManiSkill 一类任务框架,还可以进一步获得 Gym 风格的操作环境、示范数据和强化学习接口。SAPIEN 的重点不在于替代所有数字孪生需求,而是让机器人操作中的几何、接触和视觉观测成为学习与控制实验的一等公民。
4. PyBullet:快速原型和工程验证的轻量入口
PyBullet 是 Bullet 的 Python 接口,可以加载 URDF、SDF 和 MJCF,执行正向与逆向动力学、正逆运动学、碰撞检测和射线查询。它提供 GUI、DIRECT、共享内存、UDP 和 TCP 等连接模式,适合快速写出一个控制循环,或把仿真服务放在另一台机器上。
PyBullet 的优势是“先把问题跑起来”:验证关节控制器、检查 URDF、调试路径规划和搭建教学 demo 都很方便。需要注意的是,方便加载模型不等于模型已经校准;当任务依赖精细接触、柔性物体或高精度 sim-to-real 时,必须自己测量惯量、摩擦、阻尼、控制延迟和执行器响应,并在真实数据上复核。
六、不要按“哪个最强”选,而要按问题选
| 你的第一个问题 | 优先考虑 | 原因 |
|---|---|---|
| 想先验证机械臂的 LQR、iLQR 或 MPC | MuJoCo | 动力学和控制接口清晰,迭代成本低 |
| 想做大规模视觉 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 负责执行与安全兜底”。