The training task list
Last updated
uv run list-envs prints the task registry that is actually in effect — that output is authoritative; the tables below are a tidied-up version of it.
Tasks marked flat/rough have both a flat and a rough-terrain variant.
A page per task
Below is the quick reference. What each task takes to train, where it gets hard, and what it is good for lives on its own page:
| Task | What it is |
|---|---|
| Velocity | The main task, walking on velocity commands. Train this first |
| VelStand | Walking and fall recovery trained together |
| StandUp | Getting up from face-down, face-up or seated |
| SitStand | Commanded sit ↔ stand |
| GroundPick | Crouching to touch the ground with the beak tip |
| BallKick | Kicking a ball the policy cannot see |
| Roulade | The forward roll |
| Rollers | Velocity tracking on wheels, the main roller task |
| Swizzle | The symmetric swizzle step |
| RollerCrouch | Crouching while rolling |
| RollerSlope | Rolling down a slope |
| RollerStandUp | Getting up off the ground onto the wheels |
| Spin | Spinning in place |
Walking and standing
| Task id | Terrain | What it does |
|---|---|---|
Mjlab-Velocity-{Flat,Rough}-MicroDuck |
flat / rough | The main task: walking on velocity commands plus head-pose commands |
Mjlab-VelStand-{Flat,Rough}-MicroDuck |
flat / rough | Walking and fall recovery in a single policy |
Mjlab-StandUp-{Flat,Rough}-MicroDuck |
flat / rough | Getting up from face-down / face-up / seated, then holding a controlled stance |
Mjlab-SitStand-{Flat,Rough}-MicroDuck |
flat / rough | Commanded sit ↔ stand, gently, with the head still controllable |
Start your first training run with Mjlab-Velocity-Flat-MicroDuck.
Skills
| Task id | Terrain | What it does |
|---|---|---|
Mjlab-GroundPick-{Flat,Rough}-MicroDuck |
flat / rough | Crouch, touch the ground with the beak tip, return to standing |
Mjlab-BallKick-Flat-MicroDuck |
flat | Kick a 70 mm / 15 g ball forward (the actor cannot see the ball) |
Mjlab-Roulade-Flat-MicroDuck |
flat | Roll forward over the head and land back on both feet |
That “the actor cannot see the ball” in BallKick is worth noticing: the policy does not observe the ball’s position at all. It relies on the repeatability of the motion itself.
Rollers
The whole family of tasks for a duck with passive wheels under its feet:
| Task id | Terrain | What it does |
|---|---|---|
Mjlab-Velocity-Flat-MicroDuck-Rollers |
flat | Velocity tracking on wheels |
Mjlab-Velocity-Swizzle-MicroDuck |
flat | The classic symmetric swizzle glide |
Mjlab-RollerCrouch-Flat-MicroDuck |
flat | Crouching while rolling |
Mjlab-RollerSlope-Flat-MicroDuck |
slope | Rolling down a slope |
Mjlab-RollerStandUp-Flat-MicroDuck |
flat | Getting up off the ground onto the wheels |
Mjlab-Spin-Flat-MicroDuck |
flat | Spinning fast in place |
The Backlash twins: modelling gear play
Every main task has a Backlash twin, trained on a model with gear play: ±1° (2° total) in series with each of the 14 servo joints.
You ask for it by inserting -Backlash before MicroDuck in the task id:
Mjlab-Velocity-Flat-Backlash-MicroDuck
This modelling matters for sim2real, and the official implementation gets three details right:
- Each servo gains a non-actuated
passive_<joint>_backlashhinge. - Because the real encoder sits on the output side of the play, the firmware PD emulation (
BacklashEncoderBamActuator) and thejoint_pos/joint_velobservations all read through the backlash — that is,qpos[servo] + qpos[backlash]. - Neither the observation nor the action dimension changes, so the ONNX export and the onboard runtime need no modification at all.
The implementation is in src/mjlab_microduck/tasks/backlash.py.
The actuator model
Every task uses the M6 actuator model from BAM for the Dynamixel XL330: voltage control law, back-EMF, Coulomb/Stribeck/load-dependent friction.
On top of that comes per-environment domain randomisation:
- battery voltage
- voltage sag under load
- command delay
- friction magnitude
That lives in FrictionDRBamActuator under src/mjlab_microduck/actuator/.