Open Sourcing NVIDIA Isaac Sim URDF and MJCF Importer Extensions

We are releasing the source code of the URDF and MJCF importer extensions for Isaac Sim, part of NVIDIA Omniverse.

Although Isaac Sim already comes with the precompiled versions of both extensions, having access to the source code allows a developer to enhance their functionality. In addition, the source code of those extensions can be used as an example to implement importer extensions to convert other file formats into the native OpenUSD used by Omniverse and Isaac Sim.

The URDF Importer Extension is available now at GitHub - NVIDIA-Omniverse/urdf-importer-extension: Omniverse URDF Importer under the permissive Apache 2 license. The source code can be built on both Linux and Windows following the instructions.

After building the extension, use the steps in this documentation to try out the URDF importer extension.

You can use the extension in Isaac Sim (or any other Omniverse application) using the following steps:

  1. Go to Window->Extensions
  2. Go to Settings (Hamburger menu on the right)
  3. To Extension Search Paths section, add new extension folder to point to this downloaded repo root/_build/platform/release/exts (no slash at the end)
  4. Check the extensions 3rd party (second tab on the left)
  5. Enable omni.importer.urdf extension

The URDF Importer Extension is also used in the open source Orbit modular framework for robot learning powered by NVIDIA Isaac Sim. Orbit contains the example how to use the URDF Importer Extension programmatically from Python to convert URDF into USD.

See also GitHub - NVIDIA-Omniverse/kit-extension-template-cpp: Omniverse Kit C++ Extension Template for more information on how to develop a C++ extension for Omniverse from scratch.

Similarly, the MJCF Importer Extension is available at GitHub - NVIDIA-Omniverse/mjcf-importer-extension: Omniverse MJCF Importer Extension.


Why should one import URDF, when the simulation-targeted format is SDF?

The primary simulation format in Omniverse / Isaac Sim is USD. Having a SDF importer could be useful as well indeed.

What I meant is URDF often doesn’t contain all information required for simulation.

URDF has all the information required for a ROBOT simulation, which is the most important (IMHO). If your company uses ROS, and therefore needs a URDF for robot description, having to re-import and fix your robot in USD every time a change in the real robot happens is undesirable, and you don’t want two sources of truth for your robot definition, so having the possibility of improving this tool is excellent news.

On the other hand, while converting SDF to USD might sound like a good idea, what you probably care the most about your world is not going to change that often, so having to re-create the environment does not sound that terrible.

You could indeed use the URDF importer extension as a starting point for an SDF parser and extract a lot more of simulation information from the SDF (lights, cameras and so on).

USD is a very rich format, and there are other ways to create or improve environments. For example by scanning an environment (using a phone or Matterport camera or NeRFs), using a user interface (dragging prefab assets into the world), programmaticaly (for reinforcement learning) or importing from SDF.