Wheel Leg Robotic / CJ-003

A two-wheel biped that is actually clonable on a Mac.

We searched public wheel-legged stacks, skipped anything that requires NVIDIA Isaac, cloned wheel_legged_genesis, and wired its pretrained PPO policy into MuJoCo.

Albusgive/wheel_legged_genesis MIT policy 286 → 8 6 terrains MuJoCo 3.3 · CPU

What we looked at

Good demos are easy to find. Easy reproduction on Apple Silicon is not. Isaac Gym / Isaac Lab were treated as a hard no.

ProjectDemoWhy not / why yes
DreamWaQ Go2-W / LocoLeggedWheel Strong real-robot Go2-W video NVIDIA Isaac Gym or Isaac Lab.
SUSTech Wheel-Legged-Gym Classic wheeled biped RL Isaac Gym Preview 4.
jaykorea Flamingo (Isaac + Genesis forks) Excellent sim2real Isaac Lab; Genesis fork still heavy.
LimX TRON WF MuJoCo Vendor wheel-foot humanoid Linux SDK wheels only.
Albusgive/wheel_legged_genesis Bilibili locomotion + MuJoCo transfer MIT, in-repo checkpoints, MuJoCo XML, no NVIDIA required for replay.

The robot

CJ-003 is a balancing wheel-legged biped: six position-controlled leg joints and two velocity-controlled wheels. Commands are forward speed, yaw rate, left/right leg length, and a lean term.

The v0.3.2 policy is a TorchScript actor, 286 observations (9 history frames + current 28-D slice + 6 scaled commands) to 8 actions.

nq 19   nv 18   nu 8
slice 28 = ω(3)+g(3)+q_leg(6)+dq(8)+a(8)
dt 0.002 physics · 5× decimation
ckpt logs/wheel-legged-walking-v0.3.2/policy.pt

Motion repertoire

Everything this v0.3.2 actor can track through its 6-D command: vx, vy, yaw, left_leg, right_leg, lean. vy was trained at 0, so there is no lateral strafe. No jump channel either.

Idle stand
Idle · balance in place
Forward
Forward · vx 0.9
Backward
Backward · vx −0.6
Turn left
Turn left · yaw +
Turn right
Turn right · yaw −
Quiet walk
Quiet walk · half speed
Crouch
Crouch · both legs high
Stand tall
Stand tall · legs low
Moonwalk
Moonwalk · alternating legs
Lean left
Lean left · 铁山靠
Lean right
Lean right · 铁山靠
Forward crouch
Forward while crouched
CUDA_VISIBLE_DEVICES=1 /data/ypx/.conda/envs/wl_genesis/bin/python \
  reproduce/run_genesis_motion_demo.py
# full gallery: media/motions/

Trained checkpoint on different terrains

Genesis GPU eval of the official v0.3.2 actor (policy.pt from model_21000.pt). This is the training simulator on CUDA, not MuJoCo. Scripted forward command 0.8 m/s. All three maps stayed upright in this run.

Genesis eval gym
Eval gym · stayed up · 3.37 m · min z 0.67
Genesis train gym
Train gym · stayed up · 3.67 m · min z 0.66
Genesis circular slopes
Circular · stayed up · 3.93 m · min z 0.67
CUDA_VISIBLE_DEVICES=1 /data/ypx/.conda/envs/wl_genesis/bin/python \
  reproduce/run_genesis_terrain_demo.py --seconds 8
# MuJoCo heightfield replay still falls (sim2sim gap):
python reproduce/run_terrain_demo.py

What we reproduced here

Cloned the repo, loaded the shipped policy on CPU PyTorch, patched the MJCF (Linux absolute paths → relative; planar slides → freejoint), and stepped the closed-loop controller in MuJoCo 3.3 from the existing twip_rl conda env.

The loop runs. Visual offscreen recording is blocked in this agent session (no CoreGraphics), and mesh-contact sim2sim still dumps the robot after a few hundred ms — the upstream Python sim2sim file is still the older 6-action observation. The Mac replay script uses the v0.3.2 8-action layout.

On a local Mac display you can open the MuJoCo viewer from reproduce/run_mujoco_demo.py. Official GPU training/eval stays on Linux + Genesis, as the authors specify.

Run it

# motion repertoire (Genesis + CUDA):
CUDA_VISIBLE_DEVICES=1 /data/ypx/.conda/envs/wl_genesis/bin/python \
  reproduce/run_genesis_motion_demo.py
# terrains:
CUDA_VISIBLE_DEVICES=1 /data/ypx/.conda/envs/wl_genesis/bin/python \
  reproduce/run_genesis_terrain_demo.py --seconds 8
# MuJoCo CPU replay (will tip — known sim2sim gap):
python reproduce/run_mujoco_demo.py --seconds 8
Keyboard command map
Upstream keyboard map for Genesis eval.
Gamepad command map
Gamepad map: left stick speed, right stick yaw, triggers for height.