分层依赖图#

学习目标

读完本页你能:

  • 自底向上说出 Isaac 体系的六层,以及每层的角色

  • 说明每一层由谁维护、以什么形式分发

  • 解释为什么装错一个 Python 版本,整条链都用不了

  • 说出 Isaac Lab 3.0 的 Newton 路径绕开了哪几层

前置知识

  • 无。本页是全景地图的起点,只要求你用过 Python。

一张图看全栈#

这一节回答:从显卡驱动到强化学习算法,中间隔着哪些层?

下图自底向上画出 Isaac 体系的主要层次。箭头表示"构建在……之上 / 运行在……之中";橙色粗框是用户代码通常落在的位置。

        %%{init: {"flowchart": {"rankSpacing": 22, "nodeSpacing": 30, "padding": 6}}}%%
flowchart TB
    GPU["GPU 驱动 / CUDA"]
    KIT["Omniverse Kit 运行时"]
    subgraph FOUND["Kit 之上的三大基础"]
        direction LR
        USD["OpenUSD 场景"]
        PHYSX["PhysX(omni.physx 扩展)"]
        RTX["RTX 渲染"]
    end
    SIM["Isaac Sim · isaacsim.*"]
    LAB["Isaac Lab · isaaclab.*"]
    RL["RL / IL 库"]
    USER1["你的任务 / 项目"]
    USER2["你的独立脚本"]

    KIT --> GPU
    FOUND --> KIT
    SIM --> FOUND
    LAB --> SIM
    RL -. 适配层 .- LAB
    USER1 --> LAB
    USER2 --> SIM

    classDef user stroke:#f57c00,stroke-width:3px
    class USER1,USER2 user
    

图 1:Isaac Sim 5.1.0 + Isaac Lab 2.3.2 的分层。箭头表示"构建在……之上 / 运行在……之中":USD 与 RTX 是 Kit 的组成部分,PhysX 通过 omni.physx 扩展运行在 Kit 进程中。节点只写层名,每层的角色见下表。RL 库与 Isaac Lab 之间是虚线:两者互不依赖,由 Isaac Lab 的适配层(wrapper)把环境接到算法上;你的训练脚本通过这层适配调用 RL 库。

逐层说明:

层

一句话角色

来源

GPU 驱动 / CUDA

物理、渲染、张量计算都跑在 GPU 上,驱动版本有推荐下限

[1] [2]

Omniverse Kit

构建 Omniverse 应用的 SDK,把 USD、RTX 渲染器、脚本、UI 等组件组织成一个可扩展的运行时

[3]

OpenUSD / PhysX / RTX

USD 是 Kit 的主场景描述,RTX 是 Kit 的渲染器组件;PhysX 以 Kit 扩展(omni.physx)的形式在 Kit 进程内提供物理

[3] [4]

Isaac Sim

构建在 Omniverse 上的参考应用,由一组 isaacsim.* 扩展组成,提供 Python API、导入器、传感器、ROS 2 bridge

[5] [6]

Isaac Lab

构建在 Isaac Sim 之上的机器人学习框架,负责环境抽象、并行化与任务定义

[7]

RL / IL 库

独立的第三方算法库,Isaac Lab 通过可选依赖和 wrapper 接入

[8] [9]

两个用户落点的区别:做强化学习或模仿学习时,代码写在 Isaac Lab 之上(定义任务、调用 RL 库训练);做数字孪生、合成数据或 ROS 联调时,常常直接写 Isaac Sim 的 standalone 脚本,完全不经过 Isaac Lab。

每层由谁维护、怎么分发#

这一节回答:出了问题该去哪里查源码、提 issue?

层

维护方

许可与分发形式

来源

Omniverse Kit SDK

NVIDIA

不在 Isaac Sim 的开源仓库内,按 NVIDIA 专有许可分发;从源码构建 Isaac Sim 时自动下载

[10] [11]

OpenUSD

Pixar 发起的开源项目

开源,GitHub 分发;Kit 内置一份 USD 库

[12] [3]

PhysX

NVIDIA

SDK 以 BSD-3 开源;Isaac Sim 通过 omni.physx 扩展使用 PhysX,该扩展单独发版(5.1.0 中为 107.3.26),针对特定 Kit 版本构建,随 Isaac Sim 一起分发

[13] [4]

RTX 渲染

NVIDIA

作为 Kit 组件随 Kit 分发,不单独发布(推断:依据 Kit 组件列表与 Isaac Sim LICENSE 对附加组件的说明)

[3] [10]

Isaac Sim

NVIDIA

应用本体源码以 Apache-2.0 在 GitHub 公开(自 v5.0.0 起有 tag);二进制包、pip 包 isaacsim、容器镜像则按 NVIDIA 专有许可分发,与源码许可不同。运行它仍需要闭源的 Kit SDK 等组件

[10] [14]

Isaac Lab

NVIDIA 与社区

BSD-3 开源,GitHub 分发

[15]

RL / IL 库

各自的开源团队

各自开源、独立发版;Isaac Lab 在可选依赖里声明兼容版本,部分精确锁定(如 rsl-rl-lib==3.1.2、robomimic v0.4.0),部分只给下限(如 skrl>=1.4.3)

[8] [9]

Isaac Sim 不是完全闭源

很多旧资料说 Isaac Sim 闭源。从 5.0 起,Isaac Sim 应用层代码已在 GitHub 以 Apache-2.0 公开,可以从源码构建[10]。闭源的是它依赖的 Kit SDK、RTX 等底层组件。注意源码许可只管 GitHub 上的代码:从 pip、容器或二进制包拿到的 Isaac Sim 仍按 NVIDIA 许可分发[14]。

版本绑定链#

这一节回答:为什么版本不能随便混搭?

链条自顶向下是这样的:

  1. Isaac Lab → Isaac Sim:每个 Isaac Lab 版本声明它支持的 Isaac Sim 版本集合。2.3.x 支持 4.5 / 5.0 / 5.1[16],官方推荐 5.1.0[2];3.0 只支持 6.1[17]。

  2. Isaac Sim → Kit:每个 Isaac Sim 版本固定一个 Kit SDK 版本。5.1.0 对应 Kit 107.3.3[4],6.1.0 对应 Kit 110.3.0[18]。

  3. Kit → Python:Kit 内嵌一个 Python 解释器,扩展里的编译模块按这个 Python 版本构建[3]。pip 包 isaacsim 5.1.0 要求 Python ==3.11.*,6.1.0 要求 ==3.12.*[14][19]。

  4. Isaac Lab → Python:Isaac Lab 要和 Isaac Sim 装在同一个 Python 环境里,所以只能跟随 Isaac Sim 的 Python 版本。官方安装页明确写了 Isaac Sim 5.x 需要 Python 3.11[2]。

第 3 步是整条链里最硬的约束。Kit 扩展里有大量 C++ 编译模块,它们按特定 Python ABI 构建(推断:官方无明文说明。依据是 PyPI 上 isaacsim 的 requires_python 精确到小版本;Kit 手册有"Embedded Python"一节;本站在 5.1.0 pip 包中实测,扩展按 cp311 ABI 编译,目录名形如 omni.physx-107.3.26+107.3.3.lx64.r.cp311,同时编码了 Kit 版本与 Python ABI)。换 Python 小版本不是"可能有兼容问题",而是直接导入失败。

组合

Isaac Lab

Isaac Sim

Kit SDK

Python

其他

主线

2.3.2

5.1.0

107.3.3

3.11

Linux 驱动推荐 ≥ 580.65.06[2]

前沿

3.0.0-EA

6.1(Isaac Sim 工作流)

110.3.0

3.12

PyTorch 2.11、Warp 1.16、Newton 1.5.2[20]

表:两条版本链。数字逐项来自对应版本的 release notes 与安装页,完整矩阵见 1.1 版本兼容矩阵。

用分层图定位问题#

这一节回答:这张图除了"知道"之外,平时怎么用?

遇到报错时,先判断它属于哪一层,再去对应的地方找答案。下面是按层归类的思路,具体报错索引见 A.2 常见错误信息索引。

  • Python 导入就失败(找不到 isaacsim 或 isaaclab 模块、C 扩展加载错误):先查 Python 小版本是否与 Isaac Sim 要求一致,这是版本链里最硬的一环。

  • 启动 Isaac Sim 时崩溃或黑屏:多半在驱动 / Kit / RTX 这一段,先对照 Isaac Sim 的系统要求检查驱动版本[1],而不是去翻 Isaac Lab 的代码。

  • 机器人穿模、关节抖动、抓取打滑:属于 PhysX 与 USD 物理属性这一层,要调的是碰撞体、关节驱动参数,见 3.3 PhysX 物理:刚体与碰撞 与 3.4 关节与 Articulation。

  • 训练曲线不涨、奖励异常:落在 Isaac Lab 任务定义与 RL 库这两层,与仿真器本身基本无关,见 5.8 训练不收敛时看什么。

查资料时也按层找:Kit、USD、PhysX 的问题去 Omniverse 文档;Isaac Sim 的扩展与 API 去 Isaac Sim 文档与源码;任务、Manager、训练脚本去 Isaac Lab 文档与源码。搜到的旧帖子先看它讲的是哪一层、哪个版本,再决定能不能照搬。

3.0 的变化:绕开 Kit 的路径#

这一节回答:Isaac Lab 3.0 把这张图改成了什么样?

3.0.0-EA,可能变动

以下内容基于 Isaac Lab v3.0.0-EA(2026-09 发布)。官方计划 2026 年 10 月底发布 GA,EA 到 GA 之间只做缺陷修复与稳定性改进[20]。

3.0 引入了"工厂式多后端"架构:同一套资产、传感器、场景 API,在启动时通过 physics=、renderer= 选择具体实现[20]。其中最大的变化是 Kit-less 执行:很多工作流可以不安装、不启动 Isaac Sim[20]。

        flowchart TB
    GPU["GPU 驱动 / CUDA"]
    WARP["NVIDIA Warp"]
    NEWTON["Newton 物理<br/>(MuJoCo-Warp 等求解器)"]
    KIT["Omniverse Kit"]
    PHYSX["PhysX + RTX"]
    SIM["Isaac Sim 6.1"]
    LAB["Isaac Lab 3.0.0-EA<br/>多后端 API"]

    WARP --> GPU
    NEWTON --> WARP
    KIT --> GPU
    PHYSX --> KIT
    SIM --> PHYSX
    LAB -- "physics=isaacsim_physx" --> SIM
    LAB -. "physics=newton_mjwarp<br/>(Kit-less)" .-> NEWTON
    

图 2:Isaac Lab 3.0 的两条物理路径。实线经过 Isaac Sim、Kit、PhysX,是 2.x 的老路;虚线直接走 Newton 与 Warp,不经过 Kit。Newton 构建在 Warp 之上[21]。

需要注意三点:

  • Kit-less 不等于"只能用 Newton"。3.0 还提供 OVPhysX、OVRTX 两个可选运行时,同样不启动 Isaac Sim[20]。图 2 为简洁只画了 Newton。

  • XR 遥操作、Isaac Sim 的 PhysX 与 RTX、ROS bridge、livestream 这些能力仍需要完整的 Isaac Sim[20]。

  • 3.0 有大量破坏性变更,例如四元数顺序从 WXYZ 改为 XYZW、.data.* 属性不再直接返回 torch.Tensor[20]。本站主线仍用 2.3.2,3.0 的动机与细节见 8.1 3.0 改了什么、为什么改。

常见误解#

误解一:Isaac Lab 是 Isaac Sim 的一个模块

不是。Isaac Lab 是独立仓库、独立发版、独立许可(BSD-3)的框架,构建在 Isaac Sim 之上[7][15]。Isaac Sim 的扩展命名空间是 isaacsim.*,Isaac Lab 是 isaaclab.*。两者的边界详见 0.5 Isaac Sim 与 Isaac Lab 的边界。

误解二:装了 Isaac Sim 就有 Isaac Lab

Isaac Sim 不自带 Isaac Lab。官方安装指南要求先装 Isaac Sim,再单独安装 Isaac Lab,并且两者必须在同一个 Python 版本下[2]。反过来,3.0 的 Kit-less 工作流可以只装 Isaac Lab 不装 Isaac Sim[20]。

误解三:Isaac Gym 和 Isaac Sim 是同一个东西的新旧版本

不是。Isaac Gym 是一个独立的预览版 GPU 物理仿真工具,直接构建在 PhysX 上,不支持可变形体与刚体的交互,没有高保真渲染和 ROS 支持;NVIDIA 后来把它的能力整合进了 Isaac Sim;基于它的任务库 IsaacGymEnvs 则由 Isaac Lab 取代[7]。改名史详见 0.3 产品谱系与改名史。

误解四:Isaac ROS 就是 Isaac Sim 的 ROS 接口

Isaac Sim 的 ROS 2 bridge 是仿真器里的一个扩展;Isaac ROS 是跑在真机上的硬件加速 ROS 2 软件包集合,不在本页的分层图里[5]。详见 0.4 名字带 Isaac 但不是一回事。

延伸阅读#

版本说明#

  • Isaac Sim 4.x:需要 Python 3.10[2]。扩展从 4.5 起由 omni.isaac.* 改名为 isaacsim.*[6]。5.x 中旧名仍以弃用扩展的形式保留,官方计划在 6.0 完全移除[4]。所以旧导入路径通常仍可用(本站实测 omni.isaac.core),但会打印弃用警告,应按改名表迁移。

  • Isaac Lab 2.x 各小版本:支持的 Isaac Sim 集合不同,2.0/2.1 只支持 4.5,2.2 支持 4.5/5.0[16]。

  • Isaac Lab 3.0:Isaac Sim 变为可选依赖,新增 Kit-less 路径,不支持 Isaac Sim 5.1 及更早版本[17]。见 8.1 3.0 改了什么、为什么改。