YouDuck.ai

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:

  1. Each servo gains a non-actuated passive_<joint>_backlash hinge.
  2. Because the real encoder sits on the output side of the play, the firmware PD emulation (BacklashEncoderBamActuator) and the joint_pos / joint_vel observations all read through the backlash — that is, qpos[servo] + qpos[backlash].
  3. 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/.