Nvidia Isaac Sim 7 - 工作流
Isaac Sim 既是大型解决方案中的组件,也可以单独使用。因此可以通过多种方式使用它完成同一件事。这些不同的使用方式被称为工作流。在 Isaac Sim 中开发时,主要有三种工作流:
- GUI
- Extension
- Standalone Python
1. 工作流
以下是主要特性及推荐用途的总结:
1.1. GUI
- 主要特性:可视化、直观,提供用于构建和仿真虚拟世界的专用工具。
- 推荐用途:构建 World、装配机器人、连接传感器、使用 OmniGraph 进行可视化编程,以及初始化 ROS 桥接器。
1.2. Extension
- 主要特性:异步运行以支持与 Stage 交互;热重载以使改动即时生效;自适应物理步以实现实时仿真。
- 推荐用途:测试 Python 代码片段、构建交互式 GUI、自定义应用模块,以及对实时性敏感的应用。
1.3. Standalone Python
- 主要特性:可控制物理步和渲染步的时序,并且可以在无头模式下运行。
- 推荐用途:大规模强化学习训练、系统化的世界生成与修改。
2. 组合使用工作流
所有可以在 GUI 中执行的操作,都可以使用 Python 完成。可以在 GUI 操作和 Python 操作之间自由切换。在 GUI 中创建的任何内容,都可以作为 USD 文件的一部分保存。
比如可以使用 GUI 创建 World,为机器人添加所需的动作。然后将整个 USD 文件导入到独立的 Python 脚本中,根据需要在那里系统地修改属性。
2.1. Extension 和 GUI
Extension 是基于 Omniverse Kit 的应用程序的核心构建模块。Extension 是独立构建的应用模块,并且可以在不同的 Omniverse 应用中使用。Isaac Sim 中的大多数工具都是作为 Extension 构建的。可以根据项目需求启用或禁用任意一组 Extension。
GUI 工作流使用一组在 Isaac Sim 启动时默认加载的 Extension。这些是构建虚拟世界、机器人、检查物理效果、渲染、材质属性和性能分析时经常使用的通用工具;同时也包括用于可视化编程、管理 USD Stage 和资产,以及机器人应用相关的工具。
2.2. Python Standalone 和 Extension
Extension 和 Standalone Python 工作流所有功能都使用相同的 API。不过,在持续打印或持续控制机器人关节状态时,它们的方式有所不同。
Python in Extension:Script Editor 支持使用 Python 以异步方式与 Stage 交互。这意味着 Python API 将与 USD Stage 进行交互。
Extension 中的 Python 运行时不会阻塞渲染和物理步进。如果想与物理步或渲染步交互,或者执行可能阻塞的操作,就需要显式插入相关回调和异步函数,这些函数才能正常工作。在 Extension 应用中,视口打开后渲染就开始步进;按下 Play 按钮后,物理仿真才开始步进。
Standalone Python:要使用 Isaac Sim 的 Standalone Python 版本,需要通过 Python 脚本启动它。在脚本内部,可以控制是打开 GUI 界面,还是以无头模式运行。
在 Standalone Python 中,可以手动步进渲染和物理仿真,这能够保证只有在一组命令完成之后才进行下一步步进。这些函数让 Standalone 工作流非常适合下述场景:
- 训练行为:其中可能包含随机化操作,并且这些操作都需要在下一步之前完成
- 在需要控制 ROS 消息发布频率时使用
- 通过无头运行,提升性能
3. Extension 的热重载
基于 Python 的 Extension 具备“热重载”能力。这意味着可以在 Isaac Sim 运行时修改底层代码,保存文件后无需关闭或重启 Isaac Sim,就能在应用中看到相应的更改。这是一项强大的功能,可以快速迭代应用。