WBC-Mjlab: Whole Body Control in MuJoCo Lab
One shared MDP for whole-body motion tracking on mjlab — train once on a motion library, deploy one policy for many skills.
Recent works (ZEST, BeyondMimic, SONIC, OmniXtreme) is all WBC / large-scale tracking, with overlapping ideas (keybody rewards, adaptive sampling, multi-clip training) but different design choices — each still tends to ship as its own codebase. In wbc-mjlab, paper-specific knobs are --task switches on a shared stack:
- Multi-motion by design — train on multi-clip datasets (LAFAN, SEED, custom NPZ libraries); one controller generalizes across the library. At runtime, provide reference - via playing clip, teleop, or higher level policy.
- Shared MDP — rewards, terminations, motion command, RSI, and playback live in
env/once; robots and papers plug in via task configs. - Tasks, not forks — ZEST, BeyondMimic-style RSI, deploy obs, etc. are
--taskswitches (Wbc-G1,Wbc-G1-Zest,Wbc-G1-BinaryFailure, …) with the same CLI and log layout for fair comparison. - Motion data pipeline — versioned libraries under
data/, GMR PKL ingest, batch GPU CSV→NPZ, optional motion-bundle cache. - Building blocks — paper presets in
presets/and G1 task builders inrobots/g1/tasks.py; add a paper setup or tune your own WBC without forking the core MDP. - Plug-in robots — external packages register via
register_wbc_extension(same MDP, same CLIs); see wbc-mjlab-extension-h2 for a reference layout. - One policy, many skills — one policy for walk, jog, run, crawl, fight, get-up, lie-down, flips, and more.
- Sim → real — train/play export
policy.onnx+config.yamlaligned with the deploy runtime.
Details: Documentation · CONTRIBUTING.md
Quick start
Requires mjlab (≥ 1.5) and an NVIDIA GPU for training.
git clone https://github.com/wbc-mjlab/wbc-mjlab.git && cd wbc-mjlab
uv run wbc-mjlab-list-envs
uv run syncs from uv.lock on first use. For CUDA/CPU PyTorch and dev deps: make sync / make sync-cpu. See the installation guide.
Convert trajectory samples (13 source CSVs manifest & credits) to npz - calculating FK for body targets, velocities etc:
uv run wbc-mjlab-data-to-npz --robot g1 --dataset samples --batch-size 8
Demo — live web demo (trained policy in the browser); local play with bundled checkpoint (convert samples first):
uv run wbc-mjlab-demo
Train on converted npz library (check mjlab train args for resuming, number of envs etc):
uv run wbc-mjlab-train --task Wbc-G1 --dataset samples
Evaluation of last exported log on library (check args for viewer, choosing chekpoint, motion etc):
uv run wbc-mjlab-play --task Wbc-G1 --dataset samples
Related repos
| Repo | Role |
|---|---|
| wbc-mjlab/wbc-mjlab | Training library (this repo) — shared MDP, presets, extension API |
| wbc-mjlab/wbc-mjlab-extension-h2 | Reference robot extension (Unitree H2) — plug-in WBC without forking core |
| wbc-mjlab/wbc-g1-deploy | Optional G1 runtime (ONNX + motion clips) |
| mujocolab/mjlab | Simulation and RL stack |
Metadata
Release files for wbc-mjlab 0.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wbc_mjlab-0.0.6.tar.gz | 15.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wbc_mjlab-0.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.6 MB
Release files / wbc_mjlab-0.0.6.tar.gz
| Download URL | wbc_mjlab-0.0.6.tar.gz |
|---|---|
| Size | 15.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6034ce2cddf51d55a15414053d1e1bf7d416e7d4da01bb9e14b725c9278ea46
|
|
BLAKE2b-256 checksum How to use checksums |
a0c4b281a60c7646003919bf7250d89502fb86015f1ae30775f8ea622253421c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / wbc_mjlab-0.0.6-py3-none-any.whl
| Download URL | wbc_mjlab-0.0.6-py3-none-any.whl |
|---|---|
| Size | 15.3 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
21ba49f4c06c62c227655a69b18ae4b62aab2d71e0cc9aafd4325e34bebd1ae0
|
|
BLAKE2b-256 checksum How to use checksums |
908aead75edf03934f26b52938950671eef8abca15aa47675f1d53dd78fd24df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|