MicroDuck Straight Running

September 11, 2026 update: small observed improvement

This PPO policy controls the 14-actuator MicroDuck biped together with the required heading-hold controller. The new checkpoint achieves 1.843 m/s straight progress over 10 seconds and 1.802 m/s over 30 seconds, with 97.6% and 92.8% survival, in the held-out simulation tests.

Against the previous public model evaluated under the same conditions, 30-second straight speed improved by +0.00688 m/s (+0.38%), and survival increased by +1.1719 percentage points. The 10-second speed gain was +0.01101 m/s (+0.60%).

This is a small observed gain, not a demonstrated statistically reliable improvement. It remains below the predeclared +0.02 m/s useful-improvement threshold. The 1.9 m/s target was not reached. This checkpoint is published as a research update with its complete comparison evidence.

Watch the new checkpoint

Download the replay: 10 seconds, 50 fps, seed 2027, command 2.0 m/s, one simulated robot. This is an illustration; the metrics below use 512 environments per seed.

Measured improvement over the previous public model

The table averages three fresh held-out seeds: 22027, 24093, and 28191. Both models used the same 2.0 m/s command, heading controller, physics configuration, 512 environments per seed, and one-second warmup. The candidate was selected before these seeds were evaluated.

Metric Duration Previous public model, reevaluated New Trial B checkpoint Change
Straight-progress speed 10 s 1.83192 m/s 1.84293 m/s +0.01101 m/s (+0.60%)
Straight-progress speed 30 s 1.79518 m/s 1.80205 m/s +0.00688 m/s (+0.38%)
Survival 10 s 96.61458 % 97.59115 % +0.9766 percentage points
Survival 30 s 91.60156 % 92.77344 % +1.1719 percentage points
Body-forward speed 10 s 1.86454 m/s 1.86562 m/s +0.00108 m/s
Body-forward speed 30 s 1.87243 m/s 1.87226 m/s -0.00017 m/s

The parent is the previous public revision, checkpoint SHA-256 b280abb4488afd1811c8ea1582f0f922ab0e01358766557882df4a381c37db77.

The previous model card reported 1.8056 m/s over 30 seconds using a different seed set. Do not compare that older headline directly with this release's 1.8021 m/s. The improvement stated here uses the matched reevaluation in this table, where the parent measured 1.7952 m/s.

Straight progress projects velocity onto the initial heading and gives failed trajectories zero contribution thereafter. Body-forward speed follows the changing robot orientation and is not a substitute for straight progress. Survival uses a 70-degree tilt threshold and finite-state checks.

Both survival gates passed (95% at 10 seconds, 90% at 30 seconds). Neither speed gate passed. target_met=false; useful_improvement=false. Three evaluation seeds and one training seed per recipe do not establish statistical significance or repeatability of these small differences.

Evidence: summary, all held-out results, validation, and screening, including rejected checkpoints.

What changed

Three independent trials started from the same previous public checkpoint. Each had a five-update compatibility smoke run and a separate 200-update training run: 615 updates total. Smoke runs used the respective trial population and were excluded from checkpoint selection.

Trial Training environments Forward-progress reward weight Result
A 512 10 Early checkpoint: 1.7817 m/s in 30-second validation
B, selected 4096 10 Early checkpoint: 1.7936 m/s in 30-second validation
C 4096 15 Early checkpoint: 1.7808 m/s in 30-second validation

The parent's corresponding validation speed was 1.7896 m/s. All nine saved full-trial checkpoints were screened at 30 seconds on seed 123. The best eligible checkpoint from each trial and the parent were validated on seeds 123/456/789 at both durations. The selection was frozen before held-out testing.

The best checkpoint in every trial was saved after its first continuation update. Longer fine-tuning did not improve screening speed. The released Trial B checkpoint therefore represents one update from the previous public parent, not the final 200-update policy. Its iteration label is again model_13600.pt because training resumes at the saved iteration index; use the revision and SHA-256 to distinguish the two files. The restored environment counter advanced from 326856 to 326880.

Common settings: fixed learning rate 2e-5, entropy 0.005, seed 42, 24 rollout steps, action-rate reward 0, squared straight-progress reward, training command maximum 2.5 m/s, and reward speed cap 2.6 m/s. Network and physics were unchanged. The 4096-environment trials collected eight times more samples per update than the 512-environment trial; this comparison fixes update count, not total experience.

The larger batch preserved final-checkpoint performance better than the small batch, but neither increased batch size nor stronger reward established a useful speed gain. This result does not establish a physical speed limit.

Architecture and deployment contract

Component Architecture
Actor Normalization β†’ 61 β†’ 512 ELU β†’ 256 ELU β†’ 128 ELU β†’ 14
Critic, training only Normalization β†’ 76 β†’ 512 ELU β†’ 256 ELU β†’ 128 ELU β†’ 1
Control frequency 50 Hz

The actor uses 48 proprioceptive values and a 13-value command block, with no history encoder. ONNX includes observation normalization; do not normalize twice. Preserve the runtime's joint order, action scaling, and actuator interpretation.

The required RunningStraightCommand heading controller is outside ONNX. After reset it captures the robot heading and supplies yaw-rate correction clamp(0.8 * wrap(target_heading - current_heading), -0.5, 0.5) rad/s, with the runtime's standing mask and reset timing. ONNX alone is not the complete evaluated controller.

Checkpoint and ONNX actions matched on ten identical real rollout observations: maximum absolute error 2.6226e-6, below tolerance 2e-5. See parity evidence.

Run the matching policy

Use Linux/WSL and the CUDA setup from the runtime repository. The runtime source is commit 750feb171b3a7b09e61fc01feea58c98a294b2e2; its src files are identical to those used for this experiment. The experiment launcher source is included in training/run_straight_comparison.py, with provenance in recipe.json.

From the runtime checkout, in its configured environment with huggingface_hub installed:

python -c "from huggingface_hub import snapshot_download; snapshot_download('zhoumiaosen/microduck-straight-running', local_dir='models/microduck-straight-running')"
source models/microduck-straight-running/environment.sh
python scripts/evaluate_running_checkpoint.py \
  --checkpoint-file models/microduck-straight-running/model_13600.pt \
  --speed 2.0 --num-envs 512 --seed 22027 \
  --duration-s 30 --warmup-s 1 --output-file evaluation.json

Use a clean shell without other MICRODUCK_RUNNING_* overrides. Pin the downloaded Hugging Face revision for repeatable artifact selection. Simulation reruns can vary; these commands reproduce the configuration, not an exact guaranteed score.

To reproduce the training study, copy the bundled launcher into scripts/experiments/run_straight_comparison.py in the matching runtime checkout, then run its --experiment batch-reward option with the previous revision's checkpoint as --parent and a new --output-dir. See --dry-run before training. Use the configured runtime Python with the checkout root and src on PYTHONPATH.

Files and integrity

File Contents
model_13600.pt New Trial B PPO checkpoint, including training state
policy.onnx Normalized actor
run.mp4 Ten-second simulation video
recipe.json, environment.sh Experiment provenance and inference settings
evaluation/summary.json Aggregates, checkpoint identity, and acceptance flags
evaluation/raw/*.json All 45 screening, validation, and held-out evaluations
SHA256SUMS.txt Integrity hashes for release files

Verification: 242 CPU tests passed, 2 skipped; wheel/source builds and 75 relative links passed; all 56 stage receipts and output hashes verified. The input parent checkpoint remained unchanged. Local filesystem paths, assistant notes, and private logs are excluded from this release.

New checkpoint SHA-256: ec04380aa4a5b56c50f2a26e6e3aa7d8f88828a5f07ed586249b7ee0485b0f96.

Limitations and attribution

Simulation-only research release. Hardware transfer, physical robot safety, general navigation, and terrain robustness have not been evaluated. The measured gain is small and unproven statistically, and sustained 1.9 m/s remains unmet.

The runtime is an independent refactor of Vottivott/microduck-playground, derived from pollen-robotics/microduck_rl. Original attribution remains with the authors, including Hannes von Essen / Vottivott and the MicroDuck contributors.

Software license: Apache-2.0; see LICENSE and NOTICE. Hardware has separate terms in LICENSE-HARDWARE. No hardware design assets are included.

Downloads last month

-

Downloads are not tracked for this model. How to track
Video Preview
loading