Nvidia Isaac Lab 7 - 在 Isaac Lab 中,训练第一个机器人 - 3. Isaac Lab 如何加速强化学习
1. 模块化与开源
Isaac Lab 是统一且模块化的机器人学习框架,旨在简化机器人研究中的常见工作流程,比如强化学习(RL)和模仿学习(IL)。
它的模块化体现在哪里呢?配置的各个部分都可以自定义或替换,比如使用不同的 RL 库、机器人或环境资产,或集成自己的组件。
模块化,再加上项目的开源属性,使我们能够复用现有组件和算法,在彼此工作的基础上继续构建。这样做不仅节省时间和精力,也让我们能够更专注于研究中更重要的部分。
2. 并行训练
Isaac Lab 强化学习的核心范式是在仿真中并行运行大量环境进行训练。通过 GPU 加速的工作流对训练过程进行大规模并行化,强化学习在许多任务上甚至可以在消费级硬件上运行。具体什么样呢?
如下图所示:机器人大军在同一个共享世界中行走或执行任务。这里展示的要么是训练过程,要么是训练结果的演示。

可以让多个机器人共享同一环境,并且互不影响。
3. 强化学习库
强化学习库提供用于学习的算法,换句话说,就是训练过程中策略如何随时间更新。
为便于模块化,Isaac Lab 预集成多个可直接使用的“封装”库,同时也支持集成自己的库,或对所选库进行修改后再接入。
目前 Isaac Lab 预集成的库包括:
- RSL-RL
- RL-Games
- SKRL
- Stable Baselines
不同库包含的算法各不相同。
4. Isaac Sim + Isaac Lab
可以将这组工具视作分层结构:底层是 OpenUSD,之上是 Omniverse,再往上是 Isaac Sim,最顶层是 Isaac Lab。更具体地说:
- OpenUSD 负责定义和操作场景中的 3D 资产及其他数据。
- Omniverse 提供仿真相关的基础工具。
- Isaac Sim 提供面向机器人任务的专用工具。
- Isaac Lab 最终提供用于训练机器人的强化学习工具。

简而言之,在 Isaac Sim 中设置机器人,在 Isaac Lab 中进行训练,然后再回到 Isaac Sim 中进行评估和测试。
Isaac Lab 构建在 NVIDIA Isaac Sim 之上,利用其仿真能力,实现照片级逼真的场景,以及快速准确的仿真。
Isaac Lab 没有独立于 Isaac Sim 的用户界面,因为它是编程框架,以特殊方式使用仿真器。如果把我们看作世界和场景的设计者,那么 Sim 让我们搭建世界,而 Lab 则让我们进一步进行定制或针对训练进行特定设置。
Isaac Lab 使用 Isaac Sim 的示例:
- 实例化指定数量的训练环境
- 可以把它们理解为整个 Stage 中的多个微场景。
- 在每个训练回合中,从资产集合里随机指定物体供机器人抓取
- 训练回合(Episode)是指机器人在仿真环境中进行的一次完整尝试。从初始状态开始,根据策略执行动作,接收观测与奖励,持续进行,直到满足终止条件(比如摔倒或超时),随后重置环境,开始新回合。
- 在训练过程中改变物体的摩擦系数
- 在特定事件发生时停止仿真
- 以不同速度运行仿真
- 增大或减小重力
5. Isaac Sim 与 Isaac Lab 之间的数据流
Isaac Sim 负责三个核心组件:资产、物理仿真和渲染。可以在这里搭建仿真所需的各类资产。同时,它也是物理仿真环境,负责生成物理状态以及环境的视觉输出。
Isaac Lab 是机器人学习框架,通过 Python 文件管理仿真状态。Isaac Lab 通过状态、噪声添加和观测这几个环节管理学习流程:先从仿真器中获取原始状态数据,再加入随机化和扰动,以提升从仿真到真实环境的迁移能力,最后将带噪声的状态处理成可供学习算法使用的观测数据。
6. 观看训练过程(或不观看)
训练时,先设计任务,然后在仿真中运行。在仿真环境中,由于能够控制整个世界,因此可以在进入下一步之前暂停,进行评估。

在训练过程中,可以跳过 Isaac Sim 中的视口,将更多计算资源用于训练。这种方式被称为 Headless 模式,使用也很简单,只需要向 Isaac Lab 传入参数即可。
示例:以 Headless 模式,使用 4096 个环境训练名为 MyRobotTask-v0 的任务:
python scripts/skrl/train.py --task MyRobotTask-v0 --num_envs 4096 --headless使用视口
如果想在训练过程中查看仿真画面,可以移除 --headless 参数。
示例:
python scripts/skrl/train.py --task MyRobotTask-v0 --num_envs 4096如果使用的是 Isaac Launchable 项目,或是在私有/本地网络中运行 Isaac Lab 的流式应用,请添加 --livestream 2 参数:
python scripts/skrl/train.py --task MyRobotTask-v0 --num_envs 4096 --livestream 2注意
数字 4096 不是魔法数字,只是一个较大的数,表示有多少个机器人在并行环境中同时训练。同时也是 2 的幂,程序员通常对 2 的幂比较偏爱。
根据工作流程的不同,在训练过程中录制视频、实时观看,或者使用 Headless 模式获得最佳性能,各有各的适用场景。
训练完成后,可以在仿真中观看训练结果,也可以查看日志数据。
下面是经过合成及加速处理的视频,展示训练过程随时间的变化,同时呈现学习率和策略损失的日志数据。
这段合成视频展示 TensorBoard 输出与训练过程的并排画面。视频已大幅加速(1300%),并且经过剪辑,以便更简洁地呈现和演示。
7. 使用训练结果
在物理 AI 中,最终目标是利用训练数据驱动真实机器人。那么如何实现呢?
一旦得到表现持续稳定良好的策略,就可以将该策略文件导出,在 Isaac Sim 中进一步测试和验证,或者为从仿真到真实环境的迁移做准备。