Adding a new embodiment or scene#

The Isaac-Lab extension at compass/rl_env/exts/mobility_es/ defines the embodiments (H1, Carter, Spot, G1, Digit, …) and scenes COMPASS trains on. Adding your own is a registration exercise — the gin configs and run.py driver pick it up once the entry exists.

Adding new embodiments#

To add a new robot embodiment, follow these steps:

1. Create robot configuration#

2. Create environment configuration#

  • Create a new RL environment class that inherits from GoalReachingEnvCfg in compass/rl_env/exts/mobility_es/mobility_es/config/env_cfg.py.

  • Override the following components as needed:

    Component

    Description

    scene.robot

    Set robot articulation configuration

    scene.camera

    Configure camera settings

    actions

    Define action item for the embodiment

    observations

    Configure RL observations

    events

    Configure RL events

    rewards

    Configure RL rewards

    terminations

    Configure RL terminations

Note

Each embodiment should define its own action term as a low-level controller that maps velocity commands to joint positions. We have pre-defined action terms for different robot embodiments under compass/rl_env/exts/mobility_es/mobility_es/mdp/action that can be re-configured for new embodiments.

3. Register and verify the environment#

  • Import your new environment in run.py.

  • Verify it is functional by running run.py with the new environment.

Examples of existing embodiments#

Adding new scenes#

1. Create scene configuration#

2. Add an occupancy map (optional)#

We use an occupancy map for collision-free pose sampling. It’s optional but recommended for improving sampling efficiency, especially in tight scenes.

Generate the map directly from the scene USD with the bundled CLI:

${ISAACLAB_PATH}/isaaclab.sh -p scripts/generate_omap_from_usd.py path/to/scene.usd

By default this writes <scene>.png and occupancy_map.yaml to <usd_dir>/omap/. Use --cell-size, --z-min / --z-max, --bounds, or --out-dir to override the defaults; see --help for the full flag list.

You can register the YAML path explicitly in OMAP_PATHS in compass/rl_env/exts/mobility_es/mobility_es/config/environments.py, but it’s not required: when the scene has no entry, the collision checker falls back to looking for an omap/occupancy_map.yaml next to the scene’s USD — which is exactly where the generator drops it.

The legacy interactive flow via Isaac Sim’s occupancy-map UI still works if you prefer authoring a map by hand. Save the YAML/PNG into the same <usd_dir>/omap/ location and the loader will pick it up.

See the Auto OMap from USDs handbook page for the deeper generator + verifier reference.

3. Register and verify the scene#

  • Import your new scene in run.py.

  • Verify the scene is functional by running run.py with the new scene by setting env_cfg.scene.environment = MyNewSceneCfg().