mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-30 07:59:43 +00:00
sync recent changes
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
# Standalone MuJoCo Simulator for Unitree G1
|
||||
|
||||
This is a standalone MuJoCo physics simulator for the Unitree G1 robot, extracted from the GR00T-WholeBodyControl repository.
|
||||
|
||||
## Features
|
||||
|
||||
- **Physics Simulation**: Runs G1 robot in MuJoCo at 500Hz (2ms timestep)
|
||||
- **DDS Communication**: Uses Unitree SDK2 DDS for robot communication
|
||||
- **Compatible**: Works with existing `unitree_g1.py` control code via DDS
|
||||
- **Visualization**: Real-time 3D visualization of robot motion
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
mujoco_sim_g1/
|
||||
├── requirements.txt # Python dependencies
|
||||
├── run_sim.py # Main launcher script
|
||||
├── config.yaml # Simulation configuration
|
||||
├── sim/ # Simulation modules
|
||||
│ ├── base_sim.py
|
||||
│ ├── simulator_factory.py
|
||||
│ ├── unitree_sdk2py_bridge.py
|
||||
│ └── ...
|
||||
└── assets/ # Robot models
|
||||
├── g1_29dof_with_hand.xml
|
||||
└── meshes/*.STL
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Create Virtual Environment (Recommended)
|
||||
|
||||
```bash
|
||||
cd mujoco_sim_g1
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||
```
|
||||
|
||||
### 2. Install Dependencies
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
**Note**: If you encounter issues with `rclpy`, you can comment out the ROS2 imports in `sim/base_sim.py` (lines 11, 609-617) if you don't need camera publishing.
|
||||
|
||||
## Usage
|
||||
|
||||
### Basic Usage
|
||||
|
||||
```bash
|
||||
# Activate environment
|
||||
source venv/bin/activate
|
||||
|
||||
# Run the simulator
|
||||
python run_sim.py
|
||||
```
|
||||
|
||||
The simulator will:
|
||||
1. Load the G1 robot model
|
||||
2. Initialize DDS communication on domain 0
|
||||
3. Open a MuJoCo visualization window
|
||||
4. Start listening for motor commands via DDS
|
||||
|
||||
### Running with Your Robot Control Code
|
||||
|
||||
Once the simulator is running, you can control it from another terminal:
|
||||
|
||||
```bash
|
||||
# In another terminal
|
||||
cd /home/yope/Documents/lerobot
|
||||
conda activate unitree_lerobot
|
||||
|
||||
# Run your existing control code
|
||||
python test_locomotion_minimal.py
|
||||
```
|
||||
|
||||
Your `unitree_g1.py` code will automatically connect to the simulator via DDS!
|
||||
|
||||
## Configuration
|
||||
|
||||
Edit `config.yaml` to customize:
|
||||
|
||||
- **SIMULATE_DT**: Simulation timestep (default: 0.002s = 500Hz)
|
||||
- **DOMAIN_ID**: DDS domain ID (default: 0)
|
||||
- **ENABLE_ONSCREEN**: Show visualization (default: true)
|
||||
- **USE_JOYSTICK**: Enable gamepad control (default: false)
|
||||
- **ROBOT_SCENE**: Path to MuJoCo XML scene
|
||||
|
||||
### PD Gains
|
||||
|
||||
The simulator uses the following PD gains (matching NVIDIA GR00T):
|
||||
|
||||
**Legs (indices 0-11):**
|
||||
- Hip joints: KP=150, KD=2
|
||||
- Knee joints: KP=300, KD=4
|
||||
- Ankle joints: KP=40, KD=2
|
||||
|
||||
**Waist (indices 12-14):**
|
||||
- All waist joints: KP=250, KD=5
|
||||
|
||||
**Arms (indices 15-28):**
|
||||
- Shoulders: KP=100, KD=2-5
|
||||
- Elbows/Wrists: KP=20-40, KD=1-2
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### ImportError: cannot import name 'ChannelFactoryInitialize'
|
||||
|
||||
```bash
|
||||
pip install --upgrade unitree-sdk2py
|
||||
```
|
||||
|
||||
### ROS2/rclpy errors
|
||||
|
||||
If you don't need camera publishing, edit `sim/base_sim.py`:
|
||||
- Comment out line 11: `import rclpy`
|
||||
- Comment out lines 609-617 (ROS2 initialization)
|
||||
|
||||
### Meshes not found
|
||||
|
||||
Make sure mesh paths in `assets/g1_29dof_with_hand.xml` are relative:
|
||||
```xml
|
||||
<mesh file="meshes/pelvis.STL"/> <!-- Not absolute path -->
|
||||
```
|
||||
|
||||
### Robot falls immediately
|
||||
|
||||
Check that:
|
||||
1. PD gains match NVIDIA's values (see config.yaml)
|
||||
2. Velocity command scaling is correct (ang_vel_scale=0.25, cmd_scale=[2.0, 2.0, 0.25])
|
||||
3. Observations for missing joints are zeroed out (indices 12, 14, 20, 21, 27, 28)
|
||||
|
||||
## Technical Details
|
||||
|
||||
### Communication
|
||||
|
||||
The simulator publishes:
|
||||
- **`rt/lowstate`**: Robot state (joint positions, velocities, IMU, etc.)
|
||||
- **`rt/wirelesscontroller`**: Wireless remote controller state (if joystick enabled)
|
||||
|
||||
The simulator subscribes to:
|
||||
- **`rt/lowcmd`**: Motor commands (position, velocity, torque, KP, KD)
|
||||
|
||||
### Coordinate Frames
|
||||
|
||||
- **World frame**: Z-up
|
||||
- **Joint ordering**: 29 DOF (12 legs + 3 waist + 14 arms)
|
||||
- **IMU**: Quaternion in [w, x, y, z] format
|
||||
|
||||
### Performance
|
||||
|
||||
- Simulation runs at ~500Hz (2ms timestep)
|
||||
- Viewer updates at ~50Hz (20ms)
|
||||
- Typical CPU usage: 20-40% on single core
|
||||
|
||||
## Files from GR00T-WholeBodyControl
|
||||
|
||||
This standalone simulator was extracted from:
|
||||
- `gr00t_wbc/control/envs/g1/sim/` (simulation modules)
|
||||
- `gr00t_wbc/control/robot_model/model_data/g1/` (robot model files)
|
||||
- `gr00t_wbc/control/main/teleop/configs/g1_29dof_gear_wbc.yaml` (configuration)
|
||||
|
||||
## License
|
||||
|
||||
Follows the license of the original GR00T-WholeBodyControl repository.
|
||||
|
||||
Reference in New Issue
Block a user