-
Use pip to install isaaclab pip install isaaclab
-
Create conda environment
conda create -n env_isaaclab python=3.11
conda activate env_isaaclab
pip install -U torch==2.7.0 torchvision==0.22.0 --index-url https://download.pytorch.org/whl/cu128
pip install --upgrade pip- Install isaacsim 5.1 and isaaclab 2.3
pip install isaaclab[isaacsim,all]==2.3.0 --extra-index-url https://pypi.nvidia.comVerify the installization
isaacsim- Install the project
python -m pip install -e source/legged_rl_lab- List the tasks available in the project
python scripts/list_envs.pyWalk (Flat)
#Train
python scripts/rsl_rl/train.py \
--task=LeggedRLLab-Isaac-Velocity-Flat-Unitree-Go1-v0 \
--num_envs 4096 \
--headless \
--resume \
--load_run /path/to/log/folder \
--checkpoint model_xx.pt #Play
python scripts/rsl_rl/play.py \
--task=LeggedRLLab-Isaac-Velocity-Flat-Unitree-Go1-v0 \
--num_envs 16Walk (Rough)
#Train
python scripts/rsl_rl/train.py \
--task=LeggedRLLab-Isaac-Velocity-Rough-Unitree-Go1-v0 \
--num_envs 4096 \
--headless
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.run \
--nproc_per_node=4 \
--master_port=54321 \
scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-Velocity-Rough-Unitree-Go2-v0 \
--num_envs 4096 \
--headless #Play
python scripts/rsl_rl/play.py \
--task=LeggedRLLab-Isaac-Velocity-Rough-Unitree-Go1-v0 \
--num_envs 16Handstand
python scripts/rsl_rl/train.py \
--task=LeggedRLLab-Isaac-Velocity-Footstand-Unitree-Go2-v0 \
--num_envs 4096 \
--headlesspython scripts/rsl_rl/play.py \
--task=LeggedRLLab-Isaac-Velocity-Handstand-Unitree-Go2-v0 \
--num_envs 16Walk (Flat)
#Train
python scripts/rsl_rl/train.py \
--task=LeggedRLLab-Isaac-Velocity-Flat-Unitree-G1-v0 \
--num_envs 4096 \
--headless#Play
python scripts/rsl_rl/play.py \
--task=LeggedRLLab-Isaac-Velocity-Flat-Unitree-G1-v0 \
--num_envs 16Walk (Rough)
#Train
python scripts/rsl_rl/train.py \
--task=LeggedRLLab-Isaac-Velocity-Rough-Unitree-G1-v0 \
--num_envs 4096 \
--headless#Play
python scripts/rsl_rl/play.py \
--task=LeggedRLLab-Isaac-Velocity-Rough-Unitree-G1-v0 \
--num_envs 16Cross-Embodied G1+Go2 (Mixed)
#Train (multi-GPU)
python -m torch.distributed.run \
--nproc_per_node=4 \
scripts/rsl_rl/train_cross_embodied_shared.py \
--num_envs 4096 \
--headless
#Train (single-GPU)
python scripts/rsl_rl/train_cross_embodied_shared.py \
--num_envs 4096 \
--headless#Play
python scripts/rsl_rl/play_cross_embodied_shared.py \
--num_envs 32Procedural Quadruped
# Flat β Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Quadruped-v0 \
--num_envs 4096 \
--headless
# Flat β Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Quadruped-Play-v0 \
--num_envs 32
# Rough β Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Quadruped-v0 \
--num_envs 4096 \
--headless
# Rough β Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Quadruped-Play-v0 \
--num_envs 32Procedural Humanoid
# Flat β Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Humanoid-v0 \
--num_envs 4096 \
--headless
# Flat β Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Humanoid-Play-v0 \
--num_envs 32
# Rough β Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Humanoid-v0 \
--num_envs 4096 \
--headless
# Rough β Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Humanoid-Play-v0 \
--num_envs 32Procedural Mixed (Humanoid + Quadruped)
Trains a single policy across procedurally generated bipeds and quadrupeds simultaneously. Three pluggable obs-encoder back-ends are available:
| Encoder | Flat Train Task | Rough Train Task |
|---|---|---|
| Mask (default) | β¦-Flat-Procedural-Mixed-v0 |
β¦-Rough-Procedural-Mixed-v0 |
| Transformer | β¦-Flat-Procedural-Mixed-Transformer-v0 |
β¦-Rough-Procedural-Mixed-Transformer-v0 |
| GCN | β¦-Flat-Procedural-Mixed-GCN-v0 |
β¦-Rough-Procedural-Mixed-GCN-v0 |
Architecture note: encoder lives in mdp/cross_procedural_mdp.py; all three procedural env
types (ProceduralHumanoidRobotEnv, ProceduralQuadrupedRobotEnv, ProceduralMixedRobotEnv)
inherit from CrossProceduralEnv which provides the unified morphology-params interface.
# ββ Flat β Mask (default) ββββββββββββββββββββββββββββββββββββββββββββββββ
# Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Mixed-v0 \
--num_envs 4096 \
--headless
# Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Mixed-Play-v0 \
--num_envs 32
# ββ Flat β Transformer βββββββββββββββββββββββββββββββββββββββββββββββββββ
# Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Mixed-Transformer-v0 \
--num_envs 4096 \
--headless
# Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Mixed-Play-v0 \
--num_envs 32
# ββ Flat β GCN βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Mixed-GCN-v0 \
--num_envs 4096 \
--headless
# Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Flat-Procedural-Mixed-GCN-Play-v0 \
--num_envs 32
# ββ Rough β Mask (default) βββββββββββββββββββββββββββββββββββββββββββββββ
# Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Mixed-v0 \
--num_envs 4096 \
--headless
# Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Mixed-Play-v0 \
--num_envs 32
# ββ Rough β Transformer ββββββββββββββββββββββββββββββββββββββββββββββββββ
# Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Mixed-Transformer-v0 \
--num_envs 4096 \
--headless
# Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Mixed-Play-v0 \
--num_envs 32
# ββ Rough β GCN ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Train
python scripts/rsl_rl/train.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Mixed-GCN-v0 \
--num_envs 4096 \
--headless
# Play
python scripts/rsl_rl/play.py \
--task LeggedRLLab-Isaac-CrossEmboided-Rough-Procedural-Mixed-GCN-Play-v0 \
--num_envs 32Place the following datasets in the corresponding directories:
source/legged_rl_lab/legged_rl_lab/data/motion/
βββ LAFAN1_Retargeting_Dataset/ # Motion capture retargeted CSV (30 FPS)
β βββ g1_walk/ # 12 CSV, ~86k frames
β βββ g1_run/ # 4 CSV, ~28k frames
β βββ g1_sprint/ # 2 CSV, ~16k frames
β βββ g1_dance/ # 8 CSV, ~45k frames
β βββ g1_jump/ # 3 CSV, ~22k frames
β βββ g1_fall/ # 6 CSV, ~28k frames
β βββ g1_fight/ # 5 CSV, ~36k frames
βββ AMASS_Retargeted_for_G1/ # Large-scale motion capture NPZ (25 sub-libraries, 17,714 files)
βββ g1/
βββ CMU/
βββ KIT/
βββ ...
- LAFAN1 retargeted data: LAFAN1_Retargeting_Dataset
- AMASS retargeted data: AMASS_Retargeted_for_G1
# Train with AMASS (default)
python scripts/amp/train.py \
--task LeggedRLLab-Isaac-AMP-Flat-Unitree-G1-v0 \
--num_envs 4096 \
--headless
# Train with LAFAN1 walk
python scripts/amp/train.py \
--task LeggedRLLab-Isaac-AMP-Flat-Unitree-G1-v0 \
--motion_file source/legged_rl_lab/legged_rl_lab/data/motion/LAFAN1_Retargeting_Dataset/g1_walk \
--num_envs 4096 --headless
# Resume training
python scripts/amp/train.py \
--task LeggedRLLab-Isaac-AMP-Flat-Unitree-G1-v0 \
--motion_file source/legged_rl_lab/legged_rl_lab/data/motion/LAFAN1_Retargeting_Dataset/g1_walk \
--resume --load_run <run_folder> --checkpoint model_xxx.pt \
--num_envs 4096 --headless
python -m torch.distributed.run \
--nproc_per_node=4 \
scripts/amp/train.py \
--task LeggedRLLab-Isaac-AMP-Flat-Unitree-G1-v0 \
--motion_file source/legged_rl_lab/legged_rl_lab/data/motion/LAFAN1_Retargeting_Dataset/g1_walk \
--num_envs 4096 --headless \
--distributed#Play
python scripts/amp/play.py \
--task LeggedRLLab-Isaac-AMP-Flat-Unitree-G1-Play-v0 \
--motion_file source/legged_rl_lab/legged_rl_lab/data/motion/LAFAN1_Retargeting_Dataset/g1_walk \
--num_envs 32| Task ID | Description |
|---|---|
Tracking-Flat-G1-v0 |
Standard, with state estimation |
Tracking-Flat-G1-Wo-State-Estimation-v0 |
No state estimation (closer to real deployment) |
Tracking-Flat-G1-Low-Freq-v0 |
Half-frequency control |
# Step 1 β Convert retargeted CSV to NPZ (runs FK via Isaac Sim to compute full body states)
python scripts/csv_to_npz.py \
--input_file source/legged_rl_lab/legged_rl_lab/data/motion/LAFAN1_Retargeting_Dataset/g1_fall/fallAndGetUp1_subject1.csv \
--input_fps 30 \
--headless# Step 2 β (Optional) Replay NPZ in Isaac Sim to verify
python scripts/replay_npz.py \
--file /path/to/npz_file# Step 3 β Train
python scripts/rsl_rl/train.py \
--task Tracking-Flat-G1-v0 \
--motion_file /path/to/motion.npz \
--num_envs 4096 --headless
# Resume
python scripts/rsl_rl/train.py \
--task Tracking-Flat-G1-v0 \
--motion_file /path/to/motion.npz \
--resume --load_run <run_folder> --checkpoint model_xxx.pt \
--num_envs 4096 --headless# Step 4 β Play
python scripts/rsl_rl/play.py \
--task Tracking-Flat-G1-v0 \
--motion_file /path/to/motion.npz \
--num_envs 16
python scripts/rsl_rl/play.py \
--task Tracking-Flat-G1-v0 \
--motion_file source/legged_rl_lab/legged_rl_lab/data/motion/LAFAN1_Retargeting_Dataset/g1_jump/jumps1_subject1.npz \
--num_envs 16 \
--checkpoint logs/rsl_rl/g1_flat/2026-04-02_02-32-52/model_11000.pt
Terrain Generator: use the terrain generator script, see terrain_tool for details.
python3 deploy/utils/terrain_tool/terrain_generator.pyGo1 Walk
See deploy/go1_deploy/README.md for details.
pip install mujoco
python deploy/go1_deploy/sim2sim_walk.py --model go1_flat.ptGo2 Walk / Handstand
See deploy/go2_deploy/README.md for details.
pip install mujoco
# Walk
python deploy/go2_deploy/sim2sim_walk.py --model go2_rough.pt
# Handstand
python deploy/go2_deploy/sim2sim_handstand.py --model go2_handstand.ptG1 Walk
See deploy/g1_deploy/README.md for details.
pip install mujoco
python deploy/g1_deploy/sim2sim_walk.py --model g1_flat_1.onnx --config g1_walk.yamlGo1 Walk
See deploy/go1_deploy/README.md for details.
# Dependency: unitree_legged_sdk (see README)
python deploy/go1_deploy/sim2real_walk.py --mode real --model policy.ptGo2 Walk
See deploy/go2_deploy/README.md for details.
python deploy/go2_deploy/sim2real_walk.py --mode real --model policy.ptG1 Walk
See deploy/g1_deploy/README.md for details.
# Dependency: cyclonedds + unitree_sdk2_python (see README)
python deploy/g1_deploy/sim2real_walk.pyIn some VsCode versions, the indexing of part of the extensions is missing.
In this case, add the path to your extension in .vscode/settings.json under the key "python.analysis.extraPaths".
{
"python.analysis.extraPaths": [
"<path-to-ext-repo>/source/legged_rl_lab"
]
}pkill -f "python.*train.py"


