This project provides a set of reinforcement learning environments for Unitree robots, built on top of IsaacLab.
Currently supports Unitree Go2, H1 and G1-29dof robots.
Install Isaac Lab by following the installation guide.
Install the Unitree RL IsaacLab standalone environments.
Clone or copy this repository separately from the Isaac Lab installation (i.e. outside the
IsaacLabdirectory):git clone https://github.com/unitreerobotics/unitree_rl_lab.git
Use a python interpreter that has Isaac Lab installed, install the library in editable mode using:
conda activate env_isaaclab ./unitree_rl_lab.sh -i # restart your shell to activate the environment changes.
Download unitree robot description files
Method 1: Using USD Files
Download unitree usd files from unitree_model, keeping folder structure
git clone https://huggingface.co/datasets/unitreerobotics/unitree_model
Config
UNITREE_MODEL_DIRinsource/unitree_rl_lab/unitree_rl_lab/assets/robots/unitree.py.UNITREE_MODEL_DIR = "</home/user/projects/unitree_usd>"
Method 2: Using URDF Files [Recommended] Only for Isaacsim >= 5.0
- Download unitree robot urdf files from unitree_ros
git clone https://github.com/unitreerobotics/unitree_ros.git - Config
UNITREE_ROS_DIRinsource/unitree_rl_lab/unitree_rl_lab/assets/robots/unitree.py.UNITREE_ROS_DIR = "</home/user/projects/unitree_ros/unitree_ros>" - [Optional]: change robot_cfg.spawn if you want to use urdf files
Verify that the environments are correctly installed by:
Listing the available tasks:
./unitree_rl_lab.sh -l # This is a faster version than isaaclabRunning a task:
./unitree_rl_lab.sh -t --task Unitree-G1-29dof-Velocity # support for autocomplete task-name# same as python scripts/rsl_rl/train.py --headless --task Unitree-G1-29dof-Velocity
Inference with a trained agent:
./unitree_rl_lab.sh -p --task Unitree-G1-29dof-Velocity # support for autocomplete task-name# same as python scripts/rsl_rl/play.py --task Unitree-G1-29dof-Velocity
After the model training is completed, we need to perform sim2sim on the trained strategy in Mujoco to test the performance of the model. Then deploy sim2real.
# Install dependencies
sudo apt install -y libyaml-cpp-dev libboost-all-dev libeigen3-dev libspdlog-dev libfmt-dev
# Install unitree_sdk2
git clone git@github.com:unitreerobotics/unitree_sdk2.git
cd unitree_sdk2
mkdir build &&cd build
cmake .. -DBUILD_EXAMPLES=OFF # Install on the /usr/local directory
sudo make install
# Compile the robot_controllercd unitree_rl_lab/deploy/robots/g1_29dof # or other robots
mkdir build &&cd build
cmake .. && makeInstalling the unitree_mujoco.
- Set the
robotat/simulate/config.yamlto g1 - Set
domain_idto 0 - Set
enable_elastic_handto 1 - Set
use_joystckto 1.
# start simulationcd unitree_mujoco/simulate/build
./unitree_mujoco
# ./unitree_mujoco -i 0 -n eth0 -r g1 -s scene_29dof.xml # alternativecd unitree_rl_lab/deploy/robots/g1_29dof/build
./g1_ctrl
# 1. press [L2 + Up] to set the robot to stand up# 2. Click the mujoco window, and then press 8 to make the robot feet touch the ground.# 3. Press [R1 + X] to run the policy.# 4. Click the mujoco window, and then press 9 to disable the elastic band.You can use this program to control the robot directly, but make sure the on-borad control program has been closed.
./g1_ctrl --network eth0 # eth0 is the network interface name.This repository is built upon the support and contributions of the following open-source projects. Special thanks to:
- IsaacLab: The foundation for training and running codes.
- mujoco: Providing powerful simulation functionalities.
- robot_lab: Referenced for project structure and parts of the implementation.
- whole_body_tracking: Versatile humanoid control framework for motion tracking.


