Unitree Simulation Stack¶
Unitree repos and tools for simulating, training, validating, and eventually deploying G1 policies.
Guides: Developer Workflow · RL Training Guide · Policy Experiments · TensorBoard - Training Monitoring · Sim-to-Real Deploy · Operator Tools
Repo Overview¶
| Repo | What it is | Main role in this project |
|---|---|---|
| unitree_ros | Robot model source files: URDFs, meshes, Xacro files, and older ROS/Gazebo packages. | Source for the G1 29DOF URDF used in training. |
| unitree_model | Preconverted Unitree 3D models, mainly USDs for Isaac/Omniverse. The current asset dataset is on Hugging Face; the old GitHub repo is deprecated. | Official source for Unitree-provided USD assets. Its card points back to unitree_ros for robot-model details and describes URDF conversion settings. |
| unitree_rl_lab | Isaac Lab RL training framework for Unitree robots. | Train/play/export the G1 29DOF locomotion policy. |
| unitree_sim_isaaclab | Rich Isaac Lab/Isaac Sim application with DDS, sensors, teleop, replay, and task scenes. | Warehouse validation/control after training. |
| unitree_mujoco | Lightweight MuJoCo simulator built on SDK2. | Sim-to-real validation gate before hardware. |
| unitree_sdk2 / unitree_sdk2_python | Real robot C++/Python control SDKs over Unitree DDS/CycloneDDS. | Physical robot control path. |
| unitree_ros2 | ROS 2 message/package layer for Unitree DDS topics. | ROS 2 integration with real or simulated Unitree DDS topics. |
| xr_teleoperate / unitree_lerobot | XR teleoperation and imitation-learning/data workflows. | Data collection and downstream learning for manipulation. |
How they relate¶
unitree_ros URDF/meshes or Hugging Face unitree_model USDs
-> canonical G1 29DOF robot asset
-> unitree_rl_lab training
-> exported policy
-> unitree_sim_isaaclab warehouse validation/control
-> unitree_mujoco / SDK2 / ROS 2 real-robot gates
Isaac Sim is the simulator. Isaac Lab is the robot-learning framework built on top of Isaac Sim. unitree_rl_lab and unitree_sim_isaaclab are Unitree projects built on Isaac Lab, but they have different jobs: unitree_rl_lab is the cleaner locomotion training surface, while unitree_sim_isaaclab is the richer validation/control/data app.
For source-of-truth purposes, split the layers. unitree_ros remains the URDF/mechanics source used for our G1 29DOF training run. Hugging Face unitree_model is the current official place for Unitree's preconverted USD assets. GitHub remains the source for the actual code repos such as unitree_rl_lab, unitree_sim_isaaclab, SDK2, and ROS2.
For the full repo-by-repo map, see Developer Workflow.
unitree_rl_lab¶
Purpose: Train and evaluate RL locomotion policies for Unitree robots.
Supported robots: Go2, H1, G1-29DOF
Key commands:
# Train a G1 locomotion policy (headless, ~30 min on RTX 3090)
cd ~/GIT/unitree_rl_lab
python scripts/rsl_rl/train.py --headless --task Unitree-G1-29dof-Velocity
# Play back trained policy with GUI
python scripts/rsl_rl/play.py --task Unitree-G1-29dof-Velocity
# Monitor training (TensorBoard)
tensorboard --logdir logs/rsl_rl/ --host 0.0.0.0
# Then open http://workstation:6006
Training details:
- Runs 4096 parallel G1 robots on the GPU
- Uses PPO (Proximal Policy Optimization) via RSL-RL
- Checkpoints saved every 100 iterations to
logs/rsl_rl/unitree_g1_29dof_velocity/<timestamp>/ - Produces both
.pt(PyTorch) and.onnx(portable) policy files - The
.onnxgets deployed on the real G1's Jetson Orin
What the locomotion policy does:
The policy converts a velocity command ("walk forward at 0.5 m/s") into the 29 joint positions/torques needed to walk without falling. Input source doesn't matter — keyboard, joystick, VR headset, or autonomous planner.
unitree_sim_isaaclab¶
Purpose: Full simulation environment for sim-to-real transfer. Uses the same DDS communication protocol as the physical G1.
Key features:
- Manipulation tasks (pick-and-place, stacking) with G1 + dexterous hands
- DDS communication (same as real robot — code transfers directly)
- Pre-trained ONNX locomotion policy for walking (lower body)
- Teleoperation pipeline (VR headset, keyboard via DDS)
- Data collection and replay for imitation learning
- Camera streaming (for vision-based policies)
Pre-trained models: Downloaded via fetch_assets.sh from HuggingFace. These are Unitree-provided test assets, not our trained G1 policy.
When to use: Full sim-to-real pipeline with DDS, manipulation, or teleoperation. For locomotion training only, use unitree_rl_lab.
For our warehouse demo, assets/model/our_policy.pt was copied from the unitree_rl_lab training run, and the custom Isaac-Locomotion-G129-Warehouse task used a plain G1 29DOF USD generated from the same unitree_ros URDF used for training.
Current camera/SLAM workflow: RTAB-Map consumes the raw RGB-D topics from the simulated head camera, while Foxglove should normally stay on the compressed preview and lightweight map/pose topics. The full colored RTAB point cloud (/rtabmap/cloud_map) is an accumulated PointCloud2 and measured about 12 MB per message during testing, so it should be treated as an inspection/debug view, not the normal browser driving view. For the colored 3D map, use RViz2 or rtabmap_viz on the workstation and view it through Moonlight.
Useful scripts in unitree_sim_isaaclab:
./scripts/restart_camera_stack.sh # sim + camera + cmd_vel, no RTAB
./scripts/start_rtabmap.sh # start RGB-D RTAB-Map
./scripts/stop_rtabmap.sh # stop RTAB-Map
./scripts/start_foxglove_light.sh 8765 # lightweight driving/overview bridge
For one-command policy playback videos, use the workstation-level isaac-clip tool. The current attached-wheelchair preset renders the latest checkpoint and sends the MP4:
unitree_ros¶
Purpose: URDF robot description files for all Unitree robots.
A URDF describes a robot's physical structure: links, joints, meshes, and physical properties such as mass and inertia. Isaac Sim can import URDFs directly or convert them into USD assets.
G1 URDF variants available:
| File | DOF | Description |
|---|---|---|
g1_23dof.urdf |
23 | Base G1 without wrist joints |
g1_29dof_rev_1_0.urdf |
29 | Plain G1 29DOF Rev 1.0. This is the one used for our locomotion policy. |
g1_29dof_with_hand_rev_1_0.urdf |
29+ | G1 with Inspire dexterous hands |
g1_29dof_lock_waist.urdf |
29 | Waist locked (for arm-only tasks) |
Installation¶
Prerequisites¶
- Isaac Sim 5.1 (pip install in
isaaclabconda env) - Isaac Lab 2.3.2 (pip install in same env)
Step 1: Clone repos¶
cd ~/GIT
git clone https://github.com/unitreerobotics/unitree_rl_lab.git
git clone https://github.com/unitreerobotics/unitree_ros.git
git clone https://github.com/unitreerobotics/unitree_sim_isaaclab.git # optional
Step 2: Configure URDF path¶
Edit unitree_rl_lab/source/unitree_rl_lab/unitree_rl_lab/assets/robots/unitree.py:
Switch the G1 29DOF config from USD to URDF spawner: uncomment UnitreeUrdfFileCfg, comment out UnitreeUsdFileCfg, and point it at robots/g1_description/g1_29dof_rev_1_0.urdf.
This is intentional for the current G1 29DOF velocity policy because unitree_rl_lab recommends URDF files for Isaac Sim 5.x and the selected URDF exactly matches the plain 29DOF task.
Step 3: Install unitree_rl_lab¶
Step 4 (optional): Install unitree_sim_isaaclab dependencies¶
conda activate isaaclab
pip install -r ~/GIT/unitree_sim_isaaclab/requirements.txt
# Fix cryptography version conflict:
pip install cryptography==44.0.0
Download assets (USD models + pre-trained ONNX policy):
cd ~/GIT/unitree_sim_isaaclab
sudo apt install -y git-lfs # if not already installed
bash fetch_assets.sh # downloads ~1.2 GB from HuggingFace
Key Concepts¶
Policy formats¶
| Format | Extension | Used for | Can resume training? |
|---|---|---|---|
| PyTorch checkpoint | .pt |
Sim playback, fine-tuning | Yes |
| ONNX | .onnx |
Real robot deployment, portable inference | No |
Both contain the same neural network. ONNX is a portable export format (like PDF for documents). PyTorch is the native training format.
DDS (Data Distribution Service)¶
The networking layer under ROS 2. Normally invisible. Matters here because:
- Isaac Sim host uses FastDDS (default in ROS 2 Jazzy)
- G1 robot uses CycloneDDS
- unitree_sim_isaaclab uses DDS directly (bypasses ROS 2 for lower latency)
- Host-to-container communication requires FastDDS shared memory disabled (UDP-only)
URDF vs USD¶
| URDF | USD | |
|---|---|---|
| Format | XML text + mesh files | Binary 3D scene (Pixar/NVIDIA) |
| Origin | ROS ecosystem | Omniverse / film industry |
| Contains | Robot structure only | Full scene with materials |
| Standard in | Robotics | NVIDIA simulation |
Isaac Sim supports both. We used URDF for training because it matched the Unitree G1 29DOF velocity task cleanly. We used USD for the warehouse validation scene because Isaac Sim worlds, sensors, cameras, lidar, and scene assets are USD-native.
The critical rule is asset/interface parity: same robot variant, same joint names/order, same action count, same default pose, same actuator setup, same observation shape, and compatible physics settings.