Workflows#

There are three main workflows when developing in Isaac Sim: GUI, extensions, and standalone Python. We recommend you to at least go through the two “Getting Started” tutorials to have a basic understanding of all of them and how they are interconnected.

Here is a summary of the key features and their recommended usages:

GUI

  • Key features: Visual, intuitive, specialized tools for populating and simulating a virtual world.

  • Recommended usage: World building, assemble robots, attach sensors, visual programming using OmniGraphs, and initializing ROS bridges.

  • Next steps: Continue with the GUI tutorial series starting with Assemble a Simple Robot; learn about using visual programming with Omnigraph.

Extensions

  • Key features: Run asynchronously to allow interactions with the stage, hot reloading to reflect changes immediately, adaptive physics step for real-time simulation.

  • Recommended usage: Testing Python snippets, building interactive GUIs, custom application modules, and real-time sensitive applications.

  • Next steps: Learn how an extension is built with Custom Interactive Examples, as well as our interactive examples in the Examples Browser, all of which are extension-based.

Standalone Python

  • Key features: Control over timing of physics and rendering steps, can be run in headless mode.

  • Recommended usage: Large scale training for reinforcement learning, systematic world generation, and modification.

  • Next steps: Learn how to run your first standalone application with Hello World, and how to use development tools such as Jupyter Notebook or Visual Studio Code (VS Code) for Python development.

Important Concepts#

Extension vs GUI#

Extensions are the core building blocks of Omniverse Kit based applications. They are individually built application modules and can be used across different Omniverse applications by installing it in the Extension Manager. Most of the tools in Isaac Sim are built as extensions. You can enable and disable any set of extensions to customize to your project needs.

Most GUI tools are technically extension-based applications. The “GUI workflow” uses a collection of extensions that are loaded by default at the start of Isaac Sim. These are general tools that are frequently used when building virtual world and robots, examining physics, rendering, material properties, profiling performance, tools for visual programming such as OmniGraph editors, tools for managing USD stage and assets, as well as tools built for Robotics applications.

Standalone vs Extension Python#

If you have gone through the two “Getting Started” tutorials, you might have noticed that the Extension and Standalone Python workflows use the same APIs for all the functions. However, they diverge when we needed to print or command the robot joint states continuously. The Script Editor, as an example of the Extensions workflow, allows you to interact with the Stage asynchronously using Python. This means that the Python APIs are interacting with the USD stage without blocking rendering and physics stepping. It also means that if you want to interact with the physics and rendering steps or performing an action that is likely to be blocking, you would have to explicitly insert relevant callbacks and async functions for those functions to work. In the extension applications, rendering is stepping the moment viewport opens and physics is stepping when you press the Play button. You can set the rate of each before they start, but you cannot control them during runtime.

The standalone workflow launches Isaac Sim using a Python script. Inside the script, you can control whether you open the GUI interface or run in headless mode. You can also step rendering and physics manually, which gives you the ability to guarantee that stepping only happens after the completion of a set of commands. These functions make the Standalone workflow ideal for use cases, such as training behaviors where there might be randomization actions that all need to complete before the next step, or you need to control message publishing rates in ROS, as well as running headless to increase performance.

Hot Reloading#

Python-based Extensions also have the ability to “hot reload”. This means that you can change the underlying code while Isaac Sim is running, and then see the reflected changes in your application after saving the file, without shutting down or restarting Isaac Sim. This is a powerful feature that allows you to iterate quickly on your application.

Combining Workflows#

In the “Getting Started” tutorials, for all the actions that can be performed in the GUI, there is a way to perform it using Python. This is true for most of the tools in Isaac Sim. You can freely combine workflows as you need. Anything you make inside the GUI can be saved as part the USD file, including OmniGraphs that manipulate the assets in runtime. A common way to do this is by creating the world, even include the actions needed for your robots purely via the GUI, to take advantage of its visual and intuitive workflow. Then pull the entire USD file into a standalone Python script and systematically modify properties there as needed.

Get Some Practice#

Another good place to gain understanding of the workflows is through our examples. Review the Extension Examples and Standalone Examples to learn more and get started with your project. The Extension Examples are available in the Examples Browser and the Standalone Examples are available in the <isaac-sim-root-dir>/standalone_examples folder.

You can checkout the scripts that follow the “Getting Started” tutorials in both workflows to see how they differ. The script for the extension version can be found by opening the Getting Start Tutorial from the Examples Browser (Tutorials->Part I/II), then click on Open Script on the right upper corner of the browser. The script for the Standalone version can be found in the <isaac-sim-root-dir>/standalone_examples/tutorials/ folder. Comparing and contrasting can help you understand how to perform the exact same tasks.

You are welcome to try the “hot-reloading” feature out by editing any of the scripts underlying our Extension examples. Save the file and see the changes reflected immediately without shutting down the simulator.