Skip to content
@wbc-mjlab

Whole Body Control in MJLab

WBC-Mjlab

One shared MDP for whole-body motion tracking on mjlab.

Built on mjlab's sim + RL stack. Recent humanoid WBC work (ZEST, BeyondMimic, SONIC, …) tends to ship as separate codebases — wbc-mjlab unifies that line on one training surface: paper-specific choices as --task switches (RSI, observations, rewards, DR). On deploy: one policy, many motion clips — swap at runtime, no checkpoint change.

Modular by design: one shared MDP and presets in the core repo; robots plug in via register_wbc_extension in a separate package (same wbc-mjlab-train / play CLIs, stock apply_wbc preset — no fork, no new preset per robot).

WBC-MJLab — whole-body motion tracking on mjlab (Unitree G1)

Documentation · Live demo · Sim rollout video

Repos

Repo Role
wbc-mjlab Training — shared MDP, presets, G1 tasks, GMR PKL + batch NPZ conversion, ONNX export (PyPI · docs)
wbc-mjlab-extension-h2 Reference robot extension (Unitree H2) — plug-in package via register_wbc_extension, no core fork
wbc-g1-deploy Reference G1 runtime — one ONNX policy, clip library via manifest.yaml
wbc-demo In-browser live demo — MuJoCo WASM + ONNX, deploy-aligned clip UX

Upstream: mujocolab/mjlab (extension, not a fork).

One policy, many skills

The bundled deploy policy already covers walk, jog, run, crawl, fight, get up from the floor, lie down, and flips — selected from a clip library with the joystick.

Live demo (browser)
wbc-demo — live MuJoCo + ONNX in the browser
MuJoCo + ONNX in the browser — idle, walk, fight, get up, lie down, … (wbc-demo)
Unitree G1 — one policy, many skills
Unitree G1 — get-up, idle, dance, fight, sprint, sideflip
Get-up · idle · dance · fight · sprint · sideflip — same deploy policy, clip library switching (wbc-g1-deploy)

More skills coming (backflips, …). See wbc-demo and wbc-g1-deploy.

Tasks, not forks

Paper knobs are presets stacked on one MDP, not separate codebases:

Layer Where Role
Shared MDP env/ Rewards, terminations, motion command, RSI, playback
Presets presets/ Paper recipes as functions — apply_zest, apply_wbc, apply_binary_failure, apply_se_actor
Robot tasks robots/g1/tasks.py Preset stacks + registered --task ids (Wbc-G1, Wbc-G1-Zest, …)
External robots wbc-mjlab-extension-h2 Separate repo: MJCF + register_wbc_extensionWbc-H2 on the same MDP

Add a paper setup: new preset in presets/, wire it in robots/<id>/tasks.py, register a WbcTaskConfig — same CLI, same log layout, comparable runs.

Add a robot (external): copy the H2 extension layout — robot assets, base.py, entry-point registration; reuse apply_wbc with no preset fork. Details: documentation · CONTRIBUTING.md.

Already wired: ZEST-style rewards + reward-aligned RSI, BeyondMimic binary-failure sampling, multi-clip motion libraries, deploy-style obs export, Viser play overlays (motion context + adaptive RSI bins).

Sim → real (G1)

  1. Train / export in wbc-mjlab (params/policy.onnx + params/config.yaml)
  2. Copy into wbc-g1-deploy config/policy/
  3. Build and run wbc_g1_ctrldeploy README

What's next

Tech report, SONIC-style task, and external preset modules as separate repos.

Status & community

Public on PyPI; APIs and tasks still evolving. Feedback, issues, and PRs welcome on any repo.

Pinned Loading

  1. wbc-g1-deploy wbc-g1-deploy Public

    Reference G1 deploy for WBC

    C++ 6

  2. wbc-mjlab wbc-mjlab Public

    One policy. Any motion. Train universal whole-body tracking in mjlab—swap clips, not checkpoints.

    Python 107 2

  3. wbc-mjlab-extension-h2 wbc-mjlab-extension-h2 Public

    The example of using wbc-mjlab as external module to build standalone WBC for you robot

    Python 1 1

Repositories

Showing 5 of 5 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…