3. Isaac Sim仿真流程介绍¶
本节内容描述了通过 Isaac Sim 实现端到端工作流程的方法,重点介绍了实现这些方法所需的关键模块。各个关键模块在下方的内容中进行了详细的介绍。此外,本节将结合实际案例阐述如何与模拟进行交互以及如何基于 Isaac Sim 构建应用程序的方法。
3.1 Isaac Sim 仿真流程¶

如上图所示,Isaac Sim 的仿真流程包含以下关键模块:
几何体/资产设计 (Geometry Authoring):通过外部工具设计几何体/资产。
导入资产 (Importing Assets):导入已设计的几何体/资产。
场景设置 (Scene Setup):配置仿真环境中的各个元素,如物体、光照、相机、地面、机器人等。
场景物品交互 (Interact):通过脚本等方式实现场景物品交互。
使用场景(Use Case):把场景逻辑应用至实际场景。
3.2 Isaac Sim仿真流程详细介绍¶
3.1.1 几何体/资产设计¶
模拟环境(场景)由各种组件组成,包括机器人、静态物体和动态物体。这些组件的机械和几何设计通常使用 CAD 软件完成,比如 Solidworks、Pro-E、Catia、AutoCad 或 Creo。可以设计并组装不同复杂程度的零件和组件。
除了设计的方式外,还可以利用现有的 3D 资产库,这些库提供了大量现成的 3D 资产。Omniverse 和 Isaac Sim 使用一种叫做 Universal Scene Description (OpenUSD) 的文件格式。
注:所有资产在与 Isaac Sim 一起使用之前,都需要转换成 OpenUSD 格式,而且 Isaac Sim 的默认单位是米。

NVIDIA 提供了大量的 OpenUSD “SimReady” 资产。SimReady(或称为模拟就绪)资产是物理精确的 3D 对象,包含准确的物理属性、行为和连接的数据流,旨在在模拟的数字世界中表现现实世界。我们可以使用这些"SimReady"资产构建场景并实现仿真任务。"SimReady"资产集包含了超过 800 个常见的 3D 资产,这些资产包括仓库中常见的工具、设备和物品,如叉车、托盘、货架和架子。
注:这些资产保存在课程容器"/isaac-sim/isaacsim_assets"路径下。可通过文件浏览器进行查看。



3.1.2 导入资产¶
Isaac Sim提供了扩展功能,能够将 CAD(计算机辅助设计)文件导入到 Isaac Sim 中,并处理文件转换为 OpenUSD 格式。
3.1.2.1 导入和创建环境¶
Isaac Sim的Asset importer扩展可以用于导入 OBJ、FBX 和 glTF 格式。CAD converter扩展扩展支持来自多个流行 CAD 应用程序的文件,包括 Catia、Solidworks、AutoCad、Creo 等。这使得用户能够轻松地将他们的环境转换并导入到 Isaac Sim 中。
OpenUSD Connections and Data Exchange(前身为 Omniverse Connect)是一组importers、exporters、converters和 USD file format插件,使各种 3D 应用程序、产品和文件格式能够使用 OpenUSD 进行数据交换。一些 CAD 应用程序与 Omniverse 有连接器,这使得它们在转换为 USD 时能够传递更多相关和上下文信息。例如,PTC Creo、Autodesk Revit 或 Autodesk Alias 都有相应的连接器。通过此 CAD 转换器生成的文件将以 OpenUSD 格式表示所有视觉网格。在模拟之前添加物理属性对于大多数使用案例来说是一个重要步骤,本文档中会对此进行更详细的说明。

3.1.2.2 导入机器人¶
Isaac Sim 提供了用于导入机器人模型的高级选项。 在 ROS 社区中,URDF 是一种常见的机器人文件格式。在这种格式中,除了视觉网格和原始层级(父子关系)外,还编码了有关碰撞网格、关节和传感器的更多信息。 URDF Importer扩展可以通过 GUI 或 Python 脚本进行使用和访问。所有的碰撞网格和关节信息将被包含在机器人 USD 文件中。类似地,Onshape Importer和 MJCF Importer也可以使用。在这种情况下,您需要添加关节驱动,并可能需要调整它们,Gain Tuner Extension允许您可视化这些驱动。 Isaac Sim 附带了多种机器人模型,可以在Robot Assets页面找到。
通过USD的导入,实际上就完成了物理空间、角色以及物体和环境的创建,为了对角色以及物体在物理空间中的运动,以及他们相互间交互的仿真模拟,就需要通过对场景、角色以及物体和环境相关物理动力学参数的设置来实现。
在参数设置的过程,往往还会进一步为角色或者物体添加更多的部件或者添加更多的传感器,以对整个物理场景做更加精确的模拟。
3.1.3.1 添加物理引擎¶
在将所需的资产导入 Isaac Sim 后,我们可能需要为它们添加适当的物理属性。一些资产导入工具,比如 URDF 和 Onshape 导入工具,会自动传递大部分物理参数和配置,而对于其余导入的资产,在继续操作之前需要手动添加物理属性。NVIDIA Omniverse™ 物理仿真扩展由 NVIDIA PhysX SDK 提供支持,能够模拟刚体、角色控制、可变形物体、粒子和关节运动等。添加物理属性到场景的关键步骤是:
- 创建物理场景
- 指定碰撞设置
- 添加关节和驱动
3.1.3.1.1 创建物理场景¶
第一步是创建一个物理场景,并确保其默认参数是合适的。例如,检查场景中重力的方向和大小。如果导入的场景没有地面平面,记得在继续操作之前添加一个地面平面。这可以防止任何启用物理效果的物体掉落到地面以下。除非你正在模拟数百个刚体和机器人,否则使用 CPU 解算器比 GPU 解算器更高效。有关详细信息,请参考环境设置教程。
3.1.3.1.2 指定碰撞设置¶
碰撞使刚体在环境中相互作用。物体的几何形状可以通过凸包、凸分解、包围球、包围盒和 SDF 碰撞网格来近似表示。它们通过不同的方法来近似几何形状,可能更适合特定的使用场景。PhysX 支持 Cube(立方体)、Capsule(胶囊)和 Sphere(球形)形状的精确表示。锥形和圆柱形通过自定义几何标志来支持,特别适用于设置机器人车轮的碰撞近似。刚体物理材质提供摩擦力、恢复力(即“弹性”)和材质密度属性。
3.1.3.1.3 添加关节和驱动¶
当我们为场景中的角色或者物体添加适当的碰撞网格后,需要确保它们能够正确地相互作用。我们可以通过在相互连接的物体之间定义合适的关节来做到这一点。关节使我们能够通过定义物体之间如何相对运动,来连接物理对象。关节类型有很多种,包括旋转关节、滑动关节、球形关节、固定关节等。
3.1.3.2 添加传感器¶
Isaac Sim 的传感器模拟扩展可以模拟基于物理的传感器和真实感知数据,并提供了一个逼真的传感器模型库。你可以模拟摄像头、激光雷达(Lidar)、雷达和其他基于物理的传感器。你还可以通过将从 OpenCV 或 ROS 获取的摄像头校准参数转换为 Isaac Sim 单位来使用这些参数,具体请参考摄像头传感器和渲染扩展页面。RTX 激光雷达和雷达传感器在 GPU 上通过 RTX 硬件在渲染时进行模拟。支持的激光雷达传感器包括:Hesai、Ouster、SICK 和 Velodyne(通过配置文件使用)。详情请参考 Omniverse 激光雷达扩展文档。此外,还包括多种基于物理的传感器,如接触传感器、惯性测量单元(IMU)传感器、力传感器、努力传感器和接近传感器。这些传感器可以添加到场景层次结构中的适当位置(例如,摄像头或激光雷达可以放置在机器人前部或顶部)。传感器资源库展示了 Isaac Sim 提供的所有物理传感器资源。
3.1.3.3 导入/创建材料¶
在 Isaac Sim 中,材料的支持使用了 NVIDIA 材料定义语言(MDL),这是一种用于定义和描述计算机图形中材料外观的着色语言。它允许艺术家和开发者通过指定材料的物理属性、表面特征以及它们与光的相互作用来创建高度逼真的材料。Omniverse 提供了几种模板材料,包括物理基础的玻璃;几种通用的多叶型材料,适用于介电材料和非介电材料、皮肤、头发、液体以及其他需要次表面散射或透光效果的材料;以及 USD 的 UsdPreviewSurface。
3.1.4 与数字孪生的互动¶
当资产被导入并且场景设置完成后,为了对其物理动力学进行仿真模拟,使得能够仿真角色以及物体在物理空间中的运动,以及他们相互间交互的行为,可以有多种方式进行设置操作。

3.1.4.1 GUI¶
图形用户界面(GUI)提供了直观的控制方式,用于场景管理、物体操作和实时监控,为开发和测试机器人系统提供了简洁的界面。通过 GUI,可以轻松访问并将预先打包的示例、机器人和环境添加到场景中。创建工具使得拼装、照明、模拟和渲染大大小小的场景变得简单,因此它是构建虚拟世界、组装机器人和检查物理现象的理想平台。
3.1.4.2 OmniGraph¶
OmniGraph 是 Omniverse 的可视化脚本语言,它提供了通过可视化进行脚本开发的方式,而驱动角色以及物体在物理空间中的运动以及对相互间交互的行为进行逻辑控制的能力。它不是一种单一的图形,而是许多不同图形系统的组合,这些系统在一个统一的框架下工作。许多 Isaac Sim 扩展提供了节点,用于构建常见使用场景的图形。核心扩展、传感器扩展和 ROS 扩展就是包含这些 OmniGraph 节点的一些例子。
3.1.4.3 独立运行的 Python¶
Isaac Sim 提供了一个内置的 Python 环境,类似于系统级别的 Python 安装,其他软件包也可以在这个环境中使用。这是运行 Python 脚本时推荐的环境。所有 Isaac Sim 的库和依赖项都可以通过这个 Python 环境导入和访问。它还允许用户通过脚本运行整个工作流程,而无需图形界面。对于那些不是 Isaac Sim 一部分的库和工具,确保它们能与 Python 3.10 兼容。Isaac Sim 提供了一系列独立的 Python 示例,这些示例是理解整体步骤的一个很好的起点。Jupyter Notebook 和 Visual Studio Code 也得到了支持。图形界面中的工作流程可以完全通过 Python 脚本化,并且也可以在无头模式下运行(在没有图形用户界面 (GUI) 的情况下运行程序或应用程序)。本课程将使用Jupyter Notebook 进行教学与实验,已配置好Isaac Sim 内置Python环境。
3.1.4.4 扩展¶
扩展功能使开发者能够为 Isaac Sim 添加功能并集成其他工具。它们是独立构建的应用模块。Isaac Sim 中使用的所有工具都是作为扩展构建的。各种扩展使得与场景中的传感器、机器人和原始对象(prims)进行交互变得更加容易。ROS Bridge(1 和 2)扩展可以用于将你的 ROS 包和代码连接到 Isaac Sim。开发者可以使用 C++、Python 或两者结合编写自己的扩展。
3.1.5 Isaac Sim 主要场景¶
3.1.5.1 仿真验证¶
一旦完成模拟场景的设置,开发者即可调整和测试机器人软件的各个模块。优化软件架构以及调整模拟中机器人的参数和配置后,可以加速且更精准地协助从仿真环境过渡到真实物理机器人。
3.1.5.1.1 单机器人/多机器人导航¶
机器人导航系统可以在各种场景中轻松进行测试。环境中的资产可以随机化,用来创建这些场景。为了运行多个机器人的导航,可以使用多GPU设置。Isaac Sim通过ROS 2桥接支持ROS 2的Nav2导航系统。
3.1.5.3.2 AI 模型评估¶
在模拟中评估模型非常简单,因为可以直接访问真实数据,这些数据可以通过物理引擎、机器人状态或传感器读取来获取。然后,模型的预测结果可以与这些真实数据进行比较,从而得到评估指标。
例如,在计算机视觉任务中,模拟相机渲染的图像可以传递给模型进行预测。然后,这些预测结果可以与真实数据(直接从模拟中获取或通过 Replicator 获得)进行比较,以得到评估指标。对于其他传感器,比如激光雷达(LiDAR),也可以进行类似的操作,并且可以轻松扩展到多模态应用。
3.1.5.3.3 Perception(感知)¶
在Isaac Sim中通过集成Isaac Perceptor的能力,可以实现在仿真环境里对视频流数据的感知与识别。 Isaac Perceptor 是一个基于 NVIDIA 加速的库和 AI 模型的参考工作流程,帮助你快速构建强大的自主移动机器人(AMR),使其能够感知、定位并在像仓库或工厂这样的无结构环境中操作。它可以与 Isaac Sim 中的模拟环境输入一起使用。
3.1.5.3.4 Manipulation(操作)¶
在通过视频数据识别到实际物体后,就可以在Isaac Sim中通过集成Isaac Manipulator的能力,就可以实现在仿真环境里根据视频数据进行路径规划并控制机械臂进行抓取的功能。 Isaac Manipulator是一个集合,包含了加速处理的 GPU 包,用于感知驱动的操作,提供了诸如物体检测和姿态估计等功能。通过 cuMotion,可以生成时间最优的无碰撞运动。Nvblox 可以用于局部 3D 重建和障碍物检测。通过 Isaac Sim 中的 ROS 桥接,还可以支持 MoveIt。
3.1.5.3.5 强化学习算法训练¶
基于Isaac Sim的仿真能力,可以利用Isaac Lab对机器人的强化学习算法进行训练,Isaac Lab 是一个统一且模块化的机器人学习框架,旨在简化机器人研究中的常见工作流程(如强化学习、从示范中学习和运动规划)。
3.1.5.2 合成数据生成¶
开发人员可以使用 Isaac Sim Replicator 生成物理准确的合成数据,从而提升用于机器人技术的 AI 感知网络的训练和性能。Replicator 是一组扩展、Python API、工作流程和工具的集合,旨在支持合成数据生成任务。
一旦场景设置完成,Isaac Sim Replicator 可以用来修改和随机化场景中资产的各种特征,比如位置、旋转、光照、大小和纹理。它支持多种标注方式,包括 2D 边界框、3D 边界框、语义和实例分割掩码、法线、深度、点云等,数据可以以常见的格式(如 COCO 和 KITTI 格式)进行存储。对于像姿势估计这样的高级应用场景,也可以实现自定义标注器和写入器。开发者可以利用 Isaac Sim Replicator 提供的 Python API 来生成合成数据,因此能够无缝地将生成的数据与他们的训练流程集成在一起。

3.3 IsaacSim常用的快捷键介绍¶
3.3.1 视窗部分¶
| Input | Result |
|---|---|
| RMB + W (鼠标右键+'W'键) | 镜头向前平行移动 |
| RMB + S (鼠标右键+'S'键) | 镜头向后平行移动 |
| RMB + A (鼠标右键+'A'键) | 镜头向左平行移动 |
| RMB + D (鼠标右键+'D'键) | 镜头向右平行移动 |
| RMB + Q (鼠标右键+'Q'键) | 镜头向下平行移动 |
| RMB + E (鼠标右键+'E'键) | 镜头向上平行移动 |
| Scroll Wheel(滚轮) | 缩放 |
| LMB(鼠标左键) | 选择 |
| ESCAPE(ESC 键) | 取消选择 |
| Select + ‘F’(选择对象后按‘F’键) | 将摄像机缩放到选定对象周围 |
| Deselect + ‘F’(没有选择任何对象按‘F’键) | 将摄像机缩放到能看到所有对象 |
| Alt + LMB (Alt + ‘左键’) | 围绕 Viewport Center 动态观察 |
| MMB (按住鼠标中键) | 镜头平移 |
| RMB (按住鼠标右键) | 镜头旋转 |
| RMB (单击鼠标右键) | 调出菜单 |
| Shift + H | 显示/隐藏网格和 HUD 信息 |
| F7 | 启用和禁用 UI 的可见性 |
| F11 | 切换全屏模式 |
| F10 | 捕获屏幕截图 |
注意:使用任何移动命令时,按住 Shift 键可使移动速度加倍。Control 可用于将移动速度减半。
3.3.2 选择部分¶
| Input | Result |
|---|---|
| Ctrl + A | 选择当前场景中的所有资源 |
| Ctrl + I | 选择所有未选中的资源并取消选择所有已选定的资源 |
| Esc | 取消选择当前场景中的所有资源 |
3.3.3 文件操作部分¶
| Input | Alternate Input | Result |
|---|---|---|
| Ctrl + S | 保存文件 | |
| Ctrl + O | 打开文件 |
3.3.4 资产控制部分¶
| Input | Alternate Input | Result |
|---|---|---|
| Del | 删除所选的资产 | |
| Ctrl + Shift + I | 创建当前资产的实例 | |
| Ctrl + D | 复制当前资产 | |
| Ctrl + G | 将所选资产分到资源组序列中 | |
| H | 切换所选资产的可见性 |
3.3.5 动画控件¶
| Input | Alternate Input | Result |
|---|---|---|
| Space(空格键) | 播放/暂停动画 |
