[isaacsim.replicator.experimental.mobility_gen] MobilityGen#
Version: 0.2.5
Overview#
MobilityGen (isaacsim.replicator.experimental.mobility_gen) is an experimental toolkit for
building synthetic mobility datasets in Isaac Sim. A dataset contains synchronized robot
trajectories, occupancy maps, and multi-camera sensor outputs (RGB, depth, segmentation, normals)
suitable for navigation and mobility research.
Workflow#
Dataset generation happens in two separate steps.
Step 1 — Record. Load a scene (warehouse, office, etc.), spawn a robot, and drive it around (keyboard, gamepad, or autonomous navigation). MobilityGen saves the scene stage and recording metadata (robot type, scenario type, occupancy map) to a recording directory, then captures the robot’s full state at every physics step: position, orientation, joint angles, velocities. No sensor readings are written — recording is purely physics state and runs at full simulation speed.
Step 2 — Replay. Given a recording directory, MobilityGen restores the recorded robot trajectory pose-by-pose into the simulation and renders the scene from the robot’s camera sensors at each step. The output is a new directory containing the original state plus rendered images. You choose which modalities to render (RGB, depth, segmentation, normals) at replay time without re-running the physics simulation.
This two-step approach keeps recording fast and decouples the choice of render modalities from data collection. The same recording can be replayed multiple times with different render settings — for example, enabling only RGB on the first pass for quick inspection, then re-running with depth and segmentation enabled for the final dataset.
What’s in a dataset#
my_recording/
├── config.json # scenario_type, robot_type, scene_usd_rel_path
├── stage.usd # flattened scene — sublayers inlined; references textures/MDL under assets/
├── assets/ # external assets (textures, MDL, sub-USDs) copied alongside stage.usd
├── occupancy_map/
│ ├── map.yaml # ROS-style map metadata
│ └── map.png # freespace bitmap
└── state/
├── common/
│ ├── 00000000.npy # robot pose, joint state, velocities at step 0
│ ├── 00000001.npy # step 1 …
│ └── … # written during recording
├── rgb/
│ └── sensor_rig.front_hawk_left.rgb_image/
│ ├── 00000000.jpg # rendered during replay
│ └── …
├── depth/
│ └── sensor_rig.front_hawk_left.depth_image_m/
│ ├── 00000000.png # 16-bit inverse-depth PNG, converted to metres on read
│ └── …
├── segmentation/
│ └── sensor_rig.front_hawk_left.segmentation_image/
│ └── …
└── normals/
└── sensor_rig.front_hawk_left.normals_image/
└── …
state/common/ is written during recording. All sensor subfolders under state/ are written
during replay — one subfolder per camera per modality, named by the camera’s full buffer path.
Main building blocks#
MobilityGenRobot— Abstract articulation-backed robot: sensor rig, chase camera, velocity/command buffers, 2D pose helpers, keyboard/gamepad hooks, and hooks for writing actions vs. replaying recorded state. Robot parameters (USD asset, wheel geometry, control gains, sensor rig) are declared in a YAML file referenced viarobot_config_path; they are loaded once at class-definition time. Concrete robots are registered onROBOTS.MobilityGenScenario— Abstract scenario tying a robot to a buffered region of the occupancy map (from_robot_occupancy_map). Concrete scenarios are registered onSCENARIOS.MobilityGenCamera— Replicator-based rendering module. Attaches a render product and annotators (RGB, semantic segmentation, depth, normals) to an existingUsdGeom.Cameraprim in the stage. Exposes captured data viaBufferinstances for dataset export.MobilityGenSensorRig— PythonModulecontainer that groups all sensors on a robot. Cascade methods (update_state,enable_rgb_rendering,state_dict_rgb) propagate to all sensors automatically. Sensors are declared in the robot YAML undersensor_rig.sensors. Currently onlytype: camerais supported;lidar,imu, andradarentries are logged and skipped. Seesensor_rig.mdfor details.OccupancyMap— Load/save and freespace masks from ROS map conventions; used for planning and visualization.Path utilities — Grid path generation and simplification (
generate_paths,compress_path) backed by the extension’s native path-planner bindings for efficient coverage of freespace.
Architecture#
Component tree — every class is a Module; cascade calls propagate top-down automatically.
Record / replay data flow
How to run#
Recording (UI)#
Recording is driven through the MobilityGen panel in Isaac Sim:
Open Isaac Sim and enable the
isaacsim.replicator.experimental.mobility_genextension.Open the panel: Window → MobilityGen.
Fill in the fields: scene USD path, robot type, scenario type, occupancy map path.
Click Build — this loads the scene, spawns the robot, and starts the simulation.
Click Start Recording, drive the robot (keyboard / gamepad / autonomous), then click Stop Recording.
Recordings are saved to ~/MobilityGenData/recordings/<timestamp>/ by default. Set the
environment variable MOBILITY_GEN_DATA to change the root directory.
Replay (headless script)#
Use the provided replay script to process all recordings in a directory:
./_build/linux-x86_64/release/python.sh \
source/standalone_examples/replicator/mobility_gen/replay.py \
--input ~/MobilityGenData/recordings \
--output ~/MobilityGenData/replays \
--render_interval 1 \
--rgb_enabled True \
--depth_enabled True \
--segmentation_enabled True \
--normals_enabled False
--input and --output are required; all other flags are optional and shown with their defaults.
--render_interval is the most useful tuning knob — increase it to skip frames and run faster.
Each output directory has the same layout as a recording plus the rendered sensor subfolders
(state/rgb/, state/depth/, etc.).
Note: the
--enable isaacsim.replicator.mobility_gen.examplesflag is required if your robot classes are defined in that extension (e.g.CarterRobot,JetbotRobot).
Migrating older recordings#
Recordings made before version 0.2.0 store state/common/ steps as .npy files (pickled dicts).
The current reader expects .npz and will log a warning if .npy files are detected — replay
will produce 0 steps without migrating. Convert a recording directory in-place with:
./_build/linux-x86_64/release/python.sh \
source/standalone_examples/replicator/mobility_gen/migrate_recordings.py \
--input ~/MobilityGenData/recordings
Current support#
Scenarios#
Scenario |
Type |
Description |
|---|---|---|
|
Manual |
WASD keyboard control |
|
Manual |
Joystick / gamepad control |
|
Autonomous |
Random walk — applies acceleration noise each step; terminates on collision |
|
Autonomous |
Plans a path to a random free-space destination and follows it; terminates on arrival or collision |
Robots#
There are two tiers of robot classes, both defined in isaacsim.replicator.mobility_gen.examples:
YAML-driven (recommended for new robots) — inherit from MobilityGenMultiSensorRobot via
WheeledMultiSensorRobot or PolicyMultiSensorRobot. All parameters (asset path, wheel
geometry, sensor rig) come from a YAML file; __init_subclass__ applies them at import time.
Robot |
Base class |
Asset |
|---|---|---|
|
|
NVIDIA Nova Carter |
|
|
NVIDIA Jetbot |
|
|
Unitree H1 |
|
|
Boston Dynamics Spot |
Single front-camera — inherit directly from MobilityGenRobot via
WheeledMobilityGenRobot or PolicyMobilityGenRobot. Each robot has one fixed front-facing
camera; parameters are set as class attributes.
Robot |
Base class |
Asset |
|---|---|---|
|
|
NVIDIA Jetbot |
|
|
NVIDIA Nova Carter |
|
|
Unitree H1 |
|
|
Boston Dynamics Spot |
Sensors#
Type |
Support |
Render outputs |
|---|---|---|
Camera ( |
Full — multi-camera |
RGB, depth, segmentation, normals |
LiDAR |
Not supported |
— |
IMU |
Not supported |
— |
Radar |
Not supported |
— |
Unsupported sensor types are discovered and listed by generate_sensor_rigs.py but skipped at
runtime with a log message.
See also#
Adding a robot — step-by-step guide for adding a new robot type
Sensor rig — sensor rig architecture, YAML format, and robot integration
Module and Buffer — cascade tree pattern, buffer tagging, and how camera data flows from render product to disk
API reference#
Generated Python API documentation is in docs/api.rst (module isaacsim.replicator.experimental.mobility_gen).
Enable Extension#
The extension can be enabled (if not already) in one of the following ways:
Define the next entry as an application argument from a terminal.
APP_SCRIPT.(sh|bat) --enable isaacsim.replicator.experimental.mobility_gen
Define the next entry under [dependencies] in an experience (.kit) file or an extension configuration (extension.toml) file.
[dependencies]
"isaacsim.replicator.experimental.mobility_gen" = {}
Open the Window > Extensions menu in a running application instance and search for isaacsim.replicator.experimental.mobility_gen.
Then, toggle the enable control button if it is not already active.