English | 中文 | Technical Docs
RPO_IsaacLab is a reinforcement learning training workspace for the RPO bipedal robot locomotion, built on NVIDIA Isaac Lab and RSL-RL. It provides a complete pipeline from motion retargeting to sim-to-sim validation and real-robot deployment — supporting walking, dancing, parkour, fall recovery, and more human-style locomotion skills.
Demo video: dance_play:
dance_play.mov
dance_sim2sim:
dance_sim2sim.mov
- AMP (Adversarial Motion Priors) — Stylized locomotion learning with discriminator-guided style rewards (walking, dancing)
- BeyondMimic — Reference trajectory imitation with fall recovery
- Parkour — Complex terrain traversal
- Attention Encoder — Adaptive locomotion with terrain-aware attention
- Interrupt Recovery — Robust recovery from external perturbations
- GMR Motion Retargeting — BVH/FBX to robot-specific motion data pipeline
- MuJoCo Sim2Sim — Policy transfer validation in MuJoCo
- Atom01 Deployment — ONNX export and ROS2 inference for real robot deployment
| Task | Description |
|---|---|
RPO-AMP / RPO-AMP-Play |
AMP walking style training / inference |
RPO-AMP-Dance / RPO-AMP-Dance-Play |
AMP dance style training (LAFAN1 dataset) |
RPO-BeyondMimic |
Reference trajectory imitation + fall recovery |
RPO-Getup-Mimic |
Get-up motion learning |
RPO-Parkour / RPO-Parkour-Play |
Parkour over complex terrain |
RPO-Flat |
Flat terrain locomotion |
RPO-Rough |
Rough terrain locomotion |
RPO-AttnEnc |
Attention encoder training |
RPO-Interrupt |
Interrupt recovery training |
- Python 3.11
- Isaac Sim 5.1.0
- Isaac Lab v2.3
- RSL-RL 3.3.0
- CUDA 12.8+ (Blackwell GPU requires cu128 torch build)
- Ubuntu 22.04 x64
- NVIDIA Driver >= 535
# Clone the repository
git clone --recursive https://github.com/<your-username>/RPO_IsaacLab.git
cd RPO_IsaacLab
# Create conda environment
conda create -n rpo_isaaclab python=3.11 -y
conda activate rpo_isaaclab
# Install Isaac Sim 5.1
pip install torch==2.7.0 torchvision==0.22.0 --index-url https://download.pytorch.org/whl/cu128
pip install "isaacsim[all,extscache]==5.1.0" --extra-index-url https://pypi.nvidia.com
# Install Isaac Lab extensions (from IsaacLab v2.3 source)
cd /path/to/IsaacLab_RPO
./isaaclab.sh --install none
# Install project dependencies
cd RPO_IsaacLab
pip install -e ./rsl_rl
pip install -e ./robolabVerify installation:
python robolab/scripts/tools/list_envs.pypython robolab/scripts/tools/list_envs.pyAll tasks share the same entry point robolab/scripts/rsl_rl/train.py. Logs are saved to logs/rsl_rl/<experiment_name>/<timestamp>/, with a separate directory per task (e.g., rpo_amp, rpo_amp_dance).
# AMP walking (flat terrain)
python robolab/scripts/rsl_rl/train.py --task=RPO-AMP --headless --num_envs=4096
# AMP walking (rough terrain)
python robolab/scripts/rsl_rl/train.py --task=RPO-AMP-Rough --headless --num_envs=4096
# AMP dancing (LAFAN1)
python robolab/scripts/rsl_rl/train.py --task=RPO-AMP-Dance --headless --num_envs=2048
# AMP dancing (single motion)
python robolab/scripts/rsl_rl/train.py --task=RPO-AMP-Dance-Single --headless --num_envs=2048
# BeyondMimic reference tracking + fall recovery
python robolab/scripts/rsl_rl/train.py --task=RPO-BeyondMimic --headless --num_envs=4096
# Getup-Mimic
python robolab/scripts/rsl_rl/train.py --task=RPO-Getup-Mimic --headless --num_envs=4096
# Parkour
python robolab/scripts/rsl_rl/train.py --task=RPO-Parkour --headless --num_envs=4096
# Direct RL flat terrain
python robolab/scripts/rsl_rl/train.py --task=RPO-Flat --headless --num_envs=4096
# Direct RL rough terrain
python robolab/scripts/rsl_rl/train.py --task=RPO-Rough --headless --num_envs=4096
# Attention encoder
python robolab/scripts/rsl_rl/train.py --task=RPO-AttnEnc --headless --num_envs=4096
# Interrupt recovery
python robolab/scripts/rsl_rl/train.py --task=RPO-Interrupt --headless --num_envs=4096Common options:
--max_iterations <N>overrides the default iteration limit;--resume --load_run=<dir>resumes from a checkpoint;--logger=tensorboardenables TensorBoard;--distributedenables multi-GPU training (or launch viatorchrun).
# AMP walking
python robolab/scripts/rsl_rl/play_amp.py --task=RPO-AMP-Play --num_envs=1
# AMP rough terrain
python robolab/scripts/rsl_rl/play_amp.py --task=RPO-AMP-Rough-Play --num_envs=1
# AMP dancing
python robolab/scripts/rsl_rl/play_amp.py --task=RPO-AMP-Dance-Play --num_envs=1
# AMP dancing (single motion)
python robolab/scripts/rsl_rl/play_amp.py --task=RPO-AMP-Dance-Single-Play --num_envs=1
# BeyondMimic
python robolab/scripts/rsl_rl/play_bm.py --task=RPO-BeyondMimic --num_envs=1
# Getup-Mimic
python robolab/scripts/rsl_rl/play_bm.py --task=RPO-Getup-Mimic --num_envs=1
# Direct RL (Flat / Rough / AttnEnc / Interrupt)
python robolab/scripts/rsl_rl/play.py --task=RPO-Flat --num_envs=1
python robolab/scripts/rsl_rl/play.py --task=RPO-Rough --num_envs=1
python robolab/scripts/rsl_rl/play.py --task=RPO-AttnEnc --num_envs=1
python robolab/scripts/rsl_rl/play.py --task=RPO-Interrupt --num_envs=1
# Parkour (add --exportonnx to export ONNX)
python robolab/scripts/rsl_rl/play_parkour.py --task=RPO-Parkour-Play --num_envs=1 --exportonnxUse
--load_run=<dir>to specify the training log directory, or--checkpoint=<path>to load a specific checkpoint. Playback automatically exports JIT/ONNX models to theexported/directory.
# Direct RL (Flat / Rough / AttnEnc / Interrupt)
python robolab/scripts/mujoco/sim2sim_rpo.py --load_model <exported/policy.pt>
python robolab/scripts/mujoco/sim2sim_rpo.py --load_model <path> --terrain
python robolab/scripts/mujoco/sim2sim_rpo_attn_enc.py --load_model <path>
python robolab/scripts/mujoco/sim2sim_rpo_interrupt.py --load_model <path>
# AMP / AMP-Rough (requires --terrain to load the full MJCF)
python robolab/scripts/mujoco/sim2sim_rpo_amp.py --load_model <path> --terrain
# BeyondMimic (load reference motion NPZ)
python robolab/scripts/mujoco/sim2sim_rpo_bm.py \
--load_model <path> --motion_file <motion.npz>
# Parkour (separate ONNX graphs: encoder + actor)
python robolab/scripts/mujoco/sim2sim_rpo_parkour.py \
--depth_encoder <0-depth_encoder.onnx> --actor <actor.onnx>
# Motion CSV visualization
python robolab/scripts/mujoco/play_motion_csv.py --motion_file <motion.csv>Add
--headlessto disable the GUI and record a video.--load_modelshould point to the TorchScriptexported/policy.pt, not the training checkpointmodel_*.pt.
AMP and BeyondMimic require motion data in .pkl format. Use the GMR tool to retarget BVH/FBX mocap data to the RPO robot skeleton, then reorder joints for Isaac Lab:
# Batch GMR -> Isaac Lab retargeting
python robolab/scripts/tools/retarget/dataset_retarget.py \
--robot rpo \
--input_dir robolab/data/motions/rpo_gmr \
--output_dir robolab/data/motions/rpo_lab \
--config_file robolab/scripts/tools/retarget/config/rpo.yaml
# Single-file retargeting (supports --frame_range)
python robolab/scripts/tools/retarget/single_retarget.py \
--robot rpo \
--input_file <input.pkl> \
--output_file <output.pkl> \
--config_file robolab/scripts/tools/retarget/config/rpo.yaml
# BeyondMimic NPZ motion replay (visualization)
python robolab/scripts/tools/beyondmimic/replay_npz.py -f <motion.npz>
# CSV -> NPZ conversion
python robolab/scripts/tools/beyondmimic/csv_to_npz.py -f <input.csv> --input_fps 60See atom01_deploy/README_CN.md for ONNX export, ROS2 inference node setup, and real robot deployment instructions.
RPO_IsaacLab/
├── robolab/ # Isaac Lab extensions (environments, assets, scripts)
│ ├── robolab/
│ │ ├── assets/robots/ # RPO robot definition
│ │ ├── tasks/ # RL environments (AMP, BeyondMimic, Parkour, etc.)
│ │ ├── utils/ # Math, buffers, noise, warp
│ │ └── scripts/ # Train, play, retarget, mujoco
│ └── data/motions/ # Motion datasets (.pkl)
├── rsl_rl/ # RSL-RL 3.3.0 (PPO, AMP, symmetry)
├── atom01_deploy/ # Real robot deployment (ROS2, ONNX)
├── external/ # GMR retargeting tool, dance data
└── TECHNICAL_DOC_CN.md # Full technical documentation (Chinese)
- Empty
robolab/rsl_rldirectories: Rungit submodule update --init --recursive - Isaac Lab imports not found: Activate the correct Python environment first
- Task name not found: Run
python robolab/scripts/tools/list_envs.pyfor the actual task IDs - Blackwell GPU (RTX 50xx) CUDA errors: Ensure torch is built for CUDA 12.8:
python -c "import torch;print(torch.version.cuda)"
- IsaacLab — NVIDIA robot simulation framework
- rsl_rl — Legged robot RL library
- RoboParty — Open-source robot learning projects
- legged_gym — Legged robot training environments
- legged_lab — Isaac Lab legged training extension
- robot_lab — Isaac Lab robot training framework
- InstinctLab — Instinctive policy framework
AMP algorithm from Adversarial Motion Priors for Stylized Locomotion (Peng et al., SIGGRAPH 2021).
Maintainer: Robot-Nav | Support: GitHub Issues