Model or dataset
NVlabs/GR00T-WholeBodyControl avatar
NVlabs/GR00T-WholeBodyControl

GR00T-WholeBodyControl: NVIDIA's Humanoid Controller Stack Explained

Welcome to GR00T Whole-Body Control (WBC)! This is a unified platform for developing and deploying advanced humanoid controllers. This includes: Decoupled WBC models used in NVIDIA Isaac-Gr00t, Gr00t N1.5 and N1.6 and GEAR-SONIC

3,685 stars599 forksPythonNOASSERTION

At a glance

What is it?
GR00T-WholeBodyControl is a Python repository from NVlabs that hosts checkpoints and training and deployment code for two humanoid controller lines, Decoupled WBC and GEAR-SONIC, plus a motion generation model called MotionBricks. It is built for robotics engineers who already have a Unitree G1 and an IsaacLab environment, not for a first robotics project.
Who is it for?
Adopt it if you are working with a Unitree G1, already run IsaacLab 2.3.2, and need a pretrained whole-body controller rather than a controller you train from nothing. Skip it if you have no G1, no GPU simulation environment, or no interest in the SONIC reference representation, because the repository assumes all three.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What GR00T-WholeBodyControl actually ships

The repository is not one controller. The README lists three separate efforts under one roof: Decoupled WBC, the decoupled controller with reinforcement learning for the lower body and inverse kinematics for the upper body, used in NVIDIA GR00T N1.5 and N1.6; the GEAR-SONIC series, described as the latest iteration of generalist humanoid whole-body controllers; and MotionBricks, a real-time latent generative model for interactive motion control in animation and robotics.

The audience is narrow and the README does not pretend otherwise. SONIC checkpoints are released for the Unitree G1. Training code, a deployment framework, and a teleoperation stack are all in the same tree. If you are evaluating this as a general humanoid control library, the first thing to check is whether your robot is a G1, because the model card only lists G1 checkpoints.

One structural detail matters more than it looks. The root pyproject.toml explicitly says it is tooling configuration only, and that packages are installed separately from decoupled_wbc/ and gear_sonic/. There is no single pip install at the root. That split mirrors the project's history: Decoupled WBC shipped in November 2025, SONIC in February 2026, and the two have separate dependency trees.

How SONIC turns motion tracking into a general controller

SONIC's design choice is stated plainly in the README: instead of building separate controllers for predefined motions, it uses motion tracking as a scalable training task, so one unified policy produces whole-body movement across behaviors from walking and crawling to teleoperation. The training signal is human motion data, and the BONES-SEED dataset, open-sourced in March 2026, is described as 142K+ human motions, roughly 288 hours, with G1 MuJoCo trajectories.

The inference path is where the architecture becomes concrete. The default SONIC release consists of model_encoder.onnx, model_decoder.onnx, and observation_config.yaml, with a training checkpoint at sonic_release/last.pt. The encoder takes an SMPL reference input of 10 future frames at 20 ms spacing, about 200 ms of lookahead. That reference horizon is the main tuning knob in the released models: the low-latency teleoperation checkpoint uses 4-frame SMPL reference lookahead instead, trading smoothness for responsiveness.

Deployment runs through a C++ inference stack rather than Python. The March 2026 update added motor error monitoring, TTS alerts, ZMQ protocol v4, and idle-mode readaptation, and it changed the ZMQ header size to 1280 bytes. That is a breaking wire-format change. Any client written against an earlier header size will misparse frames, and the README does not describe a compatibility mode.

Installing the packages and running a first check

There is no root-level install. The pyproject.toml comment gives the commands directly, with extras for the two packages. The decoupled_wbc package has full and dev extras; gear_sonic has teleop and sim extras.

bash
pip install -e decoupled_wbc/        # or decoupled_wbc[full], decoupled_wbc[dev]
pip install -e gear_sonic/           # or gear_sonic[teleop], gear_sonic[sim]

Before installing, the repository ships check_environment.py at the top level, which is the intended way to confirm your environment matches what the project expects. Run it in the same interpreter you plan to install into, and read the output rather than assuming a clean result.

Model weights are not in the git tree. The top-level download_from_hf.py script and the Download Models documentation page are the documented route, and the checkpoints live on Hugging Face under nvidia/GEAR-SONIC. The docs point at separate anchors for the SONIC v1.1 checkpoint and the low-latency teleoperation checkpoint, so pick the one that matches your use case before downloading.

If you only want to see the controller behave, the README links a live web demo at nvlabs.github.io/GEAR-SONIC/demo.html, which the project says uses Kimodo for text-to-motion generation. That requires no installation and is a reasonable first stop before committing to a GPU environment.

The IsaacLab 2.3.2 pin and what it costs you

The README badge pins IsaacLab to version 2.3.2, linking to that specific release tag. This is the single largest adoption constraint in the repository. IsaacLab is not a small dependency, and a pinned version means your existing simulation environment may need to be rebuilt rather than upgraded.

The pin also interacts with the two-package split. Decoupled WBC and GEAR-SONIC are installed independently, but both sit on top of the same simulator version. If you are running an older IsaacLab for another project, you are now maintaining two environments or migrating the other project. The README does not describe a supported path for running against a different IsaacLab release, and no compatibility matrix is given.

The hardware side is equally specific. The deployment stack targets the Unitree G1, and the README mentions additional embodiment support as a SONIC training feature rather than a deployment guarantee. Training a policy for a different robot is presented as possible; deploying a released checkpoint on a different robot is not. Treat those as separate questions, because the model card answers only the second one.

Where the documentation goes quiet

The repository has a GitHub Pages documentation site, and the README routes most detail there rather than into the README itself. That is a reasonable choice for a project this size, but it means the README alone will not tell you how to run a full training job or what the observation_config.yaml fields mean.

Several things are simply not stated. The README does not document rollback if a checkpoint performs worse than the previous one, and it does not describe how to detect that a controller has regressed in deployment beyond the motor error monitoring added in March 2026. The ZMQ header size change to 1280 bytes is announced but no migration note is given for existing clients. The Kp/Kd per-motor scaling added in August 2026 to reduce stumbling is described as a change, not as a tunable with documented ranges.

Licensing is also worth reading carefully. The README badge says Apache 2.0 and links to a LICENSE file, but the repository metadata reports the license as NOASSERTION, meaning GitHub could not classify it automatically. There is a legal/ directory at the top level, which suggests the licence situation is more layered than a single Apache 2.0 file. Read the LICENSE and the legal/ directory yourself; this is not a case where the badge settles the question.

How it compares with LeRobot and Isaac-GR00T

The closest comparison in the search data is LeRobot, and the difference is one of scope rather than quality. LeRobot is a general policy training and deployment framework covering many robot embodiments and a dataset format. GR00T-WholeBodyControl is narrower: it is a controller stack for humanoid whole-body motion, with checkpoints trained on human motion data and a C++ inference path meant for real-time deployment on a G1.

The other comparison is Isaac-GR00T itself. The README describes Decoupled WBC as the controller used in NVIDIA GR00T N1.5 and N1.6, and the May 2026 news item describes an end-to-end VLA workflow on G1: collect teleop data, fine-tune Isaac-GR00T N1.7, and deploy with SONIC whole-body control. So Isaac-GR00T is the vision-language-action model that decides what to do, and this repository supplies the controller that executes it. They are complementary, not alternatives, and the VLA inference documentation is where the two meet.

MotionBricks is a third thing again, a latent generative model for interactive motion control with pretrained VQVAE, pose, and root checkpoints. If your problem is generating motion rather than tracking it, that is the part of the tree to read, and it is documented separately on its own project page.

Editorial conclusion

Adopt it if you are working with a Unitree G1, already run IsaacLab 2.3.2, and need a pretrained whole-body controller rather than a controller you train from nothing. Skip it if you have no G1, no GPU simulation environment, or no interest in the SONIC reference representation, because the repository assumes all three. Verify first that the SONIC v1.1 checkpoint's wrist-pose augmentation matches your teleoperation setup, and confirm the ZMQ header size of 1280 bytes against your own inference client before you wire anything to hardware.

Frequently asked questions

What is GR00T-WholeBodyControl?

It is the codebase for the GR00T Whole-Body Control projects: model checkpoints and scripts for training, evaluating, and deploying whole-body controllers for humanoid robots. It currently covers Decoupled WBC, the GEAR-SONIC series, and MotionBricks.

Is GR00T-WholeBodyControl the same as Isaac-GR00T?

No. The README says Decoupled WBC is the controller used in NVIDIA GR00T N1.5 and N1.6, and the documented VLA workflow is to fine-tune Isaac-GR00T N1.7 and then deploy with SONIC whole-body control. This repository supplies the controller; Isaac-GR00T is the model above it.

Which robots does GR00T-WholeBodyControl support?

The released SONIC checkpoints are three Unitree G1 checkpoints, and the deployment stack targets the G1. The README lists additional embodiment support as a SONIC training feature, but the model card covers G1 only.

How do I install GR00T-WholeBodyControl?

There is no root install. The root pyproject.toml states that packages are installed with pip install -e decoupled_wbc/ or pip install -e gear_sonic/, each with its own extras such as decoupled_wbc[full] and gear_sonic[teleop]. Model weights are downloaded separately from Hugging Face.

Does GR00T-WholeBodyControl need IsaacLab?

The README badge pins IsaacLab to version 2.3.2 and links to that release tag. No compatibility matrix for other IsaacLab versions is given in the README.

Official sources

  1. Issues
  2. NVlabs/GR00T-WholeBodyControl on GitHub
  3. Project website
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/nvlabs-gr00t-wholebodycontrol.svg)](https://hysenlabs.com/projects/nvlabs-gr00t-wholebodycontrol)