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#
Follow the Isaac Lab instructions to add a new robot articulation configuration in
compass/rl_env/exts/mobility_es/mobility_es/config/robots.py.Ensure proper joint configurations, collision properties, and physics parameters are set.
2. Create environment configuration#
Create a new RL environment class that inherits from
GoalReachingEnvCfgincompass/rl_env/exts/mobility_es/mobility_es/config/env_cfg.py.Override the following components as needed:
Component
Description
scene.robotSet robot articulation configuration
scene.cameraConfigure camera settings
actionsDefine action item for the embodiment
observationsConfigure RL observations
eventsConfigure RL events
rewardsConfigure RL rewards
terminationsConfigure 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.pywith the new environment.
Examples of existing embodiments#
Adding new scenes#
1. Create scene configuration#
Follow the Isaac Lab scene tutorial to add a new scene configuration in
compass/rl_env/exts/mobility_es/mobility_es/config/environments.py. Inherit fromEnvSceneAssetCfgwith proper parameters likepose_sample_range,env_spacing,replicate_physics, etc.
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.pywith the new scene by settingenv_cfg.scene.environment = MyNewSceneCfg().