# Troubleshooting Common issues and solutions. If your problem isn't listed here, check the [GitHub issues](https://github.com/NVlabs/GR00T-WholeBodyControl/issues) page. --- ## 1. `ModuleNotFoundError: No module named 'isaaclab'` **Symptom:** Training or eval script exits immediately with an import error. **Cause:** Isaac Lab is not installed, or you're running in the wrong Python environment. Isaac Lab is not a pip dependency — it must be installed separately. **Fix:** 1. Install Isaac Lab following the [official guide](https://isaac-sim.github.io/IsaacLab/main/source/setup/installation/index.html). 2. Make sure you activate the correct conda/venv environment before running: ```bash conda activate env_isaaclab # or whatever you named it python -c "import isaaclab; print(isaaclab.__version__)" ``` --- ## 2. Mesh files are tiny text files (Git LFS not installed) **Symptom:** Simulation crashes or renders an invisible/broken robot. Mesh files (`.stl`, `.STL`) are ~130 bytes and contain text like `version https://git-lfs.github.com/spec/v1`. **Cause:** The repo was cloned without Git LFS. Large files (meshes, ONNX models) are stored via Git LFS and need to be fetched separately. **Fix:** ```bash sudo apt install git-lfs git lfs install git lfs pull ``` Verify: `ls -la gear_sonic/data/assets/robot_description/urdf/g1/main.urdf` should be ~60KB+, not ~130 bytes. --- ## 3. `RuntimeError: size mismatch` when loading a checkpoint **Symptom:** Training or eval crashes with errors like: ``` size mismatch for actor_module.decoders.g1_dyn.module.0.weight: copying a param with shape torch.Size([2048, 994]) from checkpoint, the shape in current model is torch.Size([4096, 994]) ``` **Cause:** The experiment config defines a different network architecture than what the checkpoint was trained with. Common when the config overrides `hidden_dims` to a different size. **Fix:** Make sure the experiment config matches the checkpoint's architecture. Check the `config.yaml` saved alongside the checkpoint for the correct `hidden_dims`, encoder/decoder settings, etc. The released `sonic_release` checkpoint uses: ```yaml decoders: g1_dyn: params: module_config_dict: layer_config: hidden_dims: [2048, 2048, 1024, 1024, 512, 512] ``` --- ## 4. `trl` / `transformers` version conflict during pip install **Symptom:** `pip install -e "gear_sonic/[training]"` fails with a dependency resolution error about incompatible `transformers` versions. **Cause:** `trl==0.28.0` requires `transformers>=4.56.2`. If you have an older `transformers` pinned or installed, pip cannot resolve. **Fix:** ```bash pip install -e "gear_sonic/[training]" --upgrade ``` Or install in a fresh environment. If you need a specific `transformers` version for another project, use a separate venv for SONIC training. --- ## 5. TensorRT build fails (`TensorRT_ROOT` not set) **Symptom:** CMake error during C++ deployment build: ``` Could not find a package configuration file provided by "TensorRT" ``` **Cause:** The `TensorRT_ROOT` environment variable is not set, or TensorRT is not installed. **Fix:** 1. Download the correct TensorRT version (TAR package, not DEB): | Platform | TensorRT Version | |---|---| | x86_64 (Desktop) | **10.13** (required) | | Jetson / G1 onboard Orin | **10.7** (required; JetPack 6) | 2. Extract and set the environment variable: ```bash export TensorRT_ROOT=$HOME/TensorRT echo 'export TensorRT_ROOT=$HOME/TensorRT' >> ~/.bashrc ``` --- ## 6. Motion file path errors (`FileNotFoundError` or empty motion library) **Symptom:** Training crashes with `FileNotFoundError` on a motion path, or starts but logs `0 motions loaded`. **Cause:** The experiment config has placeholder paths (e.g., `data/motion_lib_bones_seed/robot_filtered`) that don't exist on your machine. Motion data paths must be provided on the command line. **Fix:** Always pass motion data paths explicitly: ```bash python gear_sonic/train_agent_trl.py \ +exp=manager/universal_token/all_modes/sonic_release \ ++manager_env.commands.motion.motion_lib_cfg.motion_file= \ ++manager_env.commands.motion.motion_lib_cfg.smpl_motion_file= ``` For quick testing, download the sample data from HuggingFace: ```bash hf download nvidia/GEAR-SONIC --include "sample_data/*" --local-dir . ``` --- ## 7. Body name errors (`RuntimeError: body 'xxx' not found`) **Symptom:** Isaac Lab crashes with an error about a body/joint name not found in the robot's articulation. **Cause:** A config YAML references a body name that doesn't exist on your robot. This commonly happens when using G1 configs with a different robot (e.g., H2). **Fix:** Check which body name failed and find where it's referenced: ```bash grep -rn "the_failing_body_name" gear_sonic/config/ ``` Override the body name in your experiment config, or check the [Training on New Embodiments](new_embodiments.md) guide for the full list of config files that reference body names. --- ## 8. Robot explodes or falls immediately on first frame **Symptom:** The robot ragdolls, flies away, or collapses instantly when simulation starts. **Cause:** Usually one of: - **Init state height is wrong** — the robot spawns inside the ground or too high. Check `init_state.pos` in your robot config (the z-value is spawn height). - **KP/KD values are wrong** — if stiffness (KP) is too low, joints have no holding torque. If too high, the simulation becomes unstable. See [Training on New Embodiments](new_embodiments.md) for tuning guidance. - **Action scale is too large** — the policy outputs move joints too aggressively. Reduce `action_scale` values. - **Default joint angles are wrong** — the robot starts in an impossible pose. Check `init_state.joint_pos` matches a stable standing configuration. **Debug:** Run with `num_envs=1 headless=False` and watch the first few frames. --- ## 9. Robot behaves weirdly during deployment (wrong TensorRT version) **Symptom:** The robot stands but moves erratically, drifts, or produces unnatural motions during C++ deployment — even though the same checkpoint works correctly in Isaac Lab or MuJoCo simulation. **Cause:** You are using a different TensorRT version than required. TensorRT version mismatches produce **silently wrong inference results** — the model runs without errors but outputs incorrect actions. **Fix:** You **must** use the exact TensorRT versions: | Platform | Required Version | |---|---| | x86_64 (Desktop) | **TensorRT 10.13** | | Jetson / G1 onboard Orin | **TensorRT 10.7** (JetPack 6) | Verify your version: ```bash echo $TensorRT_ROOT ls $TensorRT_ROOT/lib/libnvinfer.so* ``` If the version is wrong, download the correct one from [NVIDIA Developer](https://developer.nvidia.com/tensorrt/download/10x) and rebuild the C++ deployment binary. --- ## 10. `ChannelFactory create domain error` in MuJoCo sim **Symptom:** `run_sim_loop.py` crashes with: ``` [ChannelFactory] create domain error. msg: Occurred upon initialisation of a cyclonedds.domain.Domain ``` **Cause:** CycloneDDS domain initialization conflict. The SimulatorFactory reinitializes a channel that was already created. **Fix:** This is a known issue ([#77](https://github.com/NVlabs/GR00T-WholeBodyControl/issues/77)). Workaround: comment out the duplicate channel init in the simulator factory, or ensure no other DDS process is using the same domain on your machine. --- ## 11. SMPL tracking is unstable or drifts **Symptom:** The robot follows G1 motion tracking well but drifts or becomes unstable when using SMPL encoder inputs. **Cause:** SMPL data may have mismatched coordinate conventions (y-up vs z-up), incorrect joint ordering, or the SMPL-to-robot retargeting quality is poor. **Fix:** - Verify `smpl_y_up: true` is set in your config if your SMPL data uses y-up coordinates. - Check that the SMPL PKL files have the correct shape: `smpl_joints` should be `(T, 24, 3)`. - Try training with `smpl_motion_file: dummy` first to confirm the robot encoder works before adding SMPL. --- ## 12. MuJoCo viewer renders incorrectly in Docker **Symptom:** MuJoCo window is black, garbled, or shows rendering artifacts when running inside Docker on a machine with an Intel display controller. **Cause:** GPU passthrough or display driver conflict between the Intel iGPU and NVIDIA dGPU inside Docker. **Fix:** Force NVIDIA GPU rendering: ```bash export __NV_PRIME_RENDER_OFFLOAD=1 export __GLX_VENDOR_LIBRARY_NAME=nvidia ``` Or run with `--gpus all -e DISPLAY=$DISPLAY` in your Docker run command. See [#25](https://github.com/NVlabs/GR00T-WholeBodyControl/issues/25) for details. --- ## 13. `deploy.sh` fails to bind ZMQ port 5557 on Orin **Symptom:** `deploy.sh` exits with a ZMQ bind error on port 5557. **Cause:** A Unitree system service (`iphone_server.service`) is already listening on port 5557. **Fix:** ```bash sudo systemctl stop iphone_server.service ``` Then re-run the deployment. The service restarts on the next boot; to keep it stopped across reboots use `sudo systemctl disable iphone_server.service`. --- ## Still stuck? - Search [existing issues](https://github.com/NVlabs/GR00T-WholeBodyControl/issues) - Open a [new issue](https://github.com/NVlabs/GR00T-WholeBodyControl/issues/new) with your error message, Python version, and OS