microduck-backflip / README.md
nocrab's picture
publish backflip: README.md
756acdd verified
|
Raw History Blame Contribute Delete
2.84 kB
---
library_name: onnx
pipeline_tag: reinforcement-learning
tags: [microduck, microduck-policy, mjlab, robotics]
license: apache-2.0
---
# backflip
Backflip from a stand (head-spring style) and land on its feet; starts when twist[0] goes to 1. SIM ONLY.
<video controls muted loop src="https://huggingface.co/nocrab/microduck-backflip/resolve/main/media/preview.mp4" style="max-width:640px;width:100%"></video>
**Command** — twist slots of the 13-D command block (head / body slots: unused (zeros), unused (zeros)); idle = `[0, 0, 0]`
| slot | meaning |
|---|---|
| twist[0] | start switch: 1 for ~0.2-0.5 s starts the flip, then 0 while it flies and lands (install with --command 1,0,0) |
| twist[1] | unused (0) |
| twist[2] | unused (0) |
## ⚠️ Simulation only
Never run on a real robot. The flip uses the **head as a spring**: the duck sits back, pushes off the floor with its head (~0.1–0.3 s), flies upside down for ~0.15 s and lands on its feet. Landings peak around 2.6 g. A pure standing backflip is out of reach for this robot (best measured jump: 0.40 m/s takeoff, ~0.08 s in the air).
## What it does
From a two-foot stand, a short pulse on `twist[0]` starts a full 360° backward flip; it lands and stands. With `twist[0]` held at 0 it just stands (it was trained to wait for the switch, so it doesn't flip by itself when installed as a skill).
## Try it (duck-sim, the real robot software)
```bash
scripts/duck-sim ctl policy --file ~/.cache/duck-sim/robotd-duck-a.toml add backflip nocrab/microduck-backflip --command 1,0,0
scripts/duck-sim ctl robot do backflip
```
`--command 1,0,0` is required: the manifest can't carry the start switch, and `policy add` feeds zeros by default (then it only stands). Hold (0.3 s) and unwind (2.5 s on zeros) come from the manifest.
## Results
| test | result |
|---|---|
| training env, switch on at 1.0 s for 0.3 s (64 starts) | 100 % flip and land |
| switch at 0.3 s / 2.5 s | 100 % / 100 % |
| switch window 0.2 s / 0.5 s | 100 % / 98 % |
| switch never on | 0 flips, 100 % standing |
| duck-sim, `robot do backflip` ×30 | 29/30 full flips, 30/30 standing, no fall/limp |
`media/preview.mp4`: one flip under real robotd in duck-sim, real time then 4× slow motion.
**Contract** `obs[1,61] f32 → actions[1,14] f32`, normalizer baked in, 50 Hz, targets around HOME × 1.0. Kind episodic, entry pose standing.
**Provenance** `Mjlab-Backflip-Flat-MicroDuck` — pollen-robotics/microduck_rl @ `4757d6ae`, run `local 2026-10-26_15-47-20_run2, model_2999 (3000 it, 4096 envs, RTX 5080, 1h34m)`; exported with `scripts/export.py`.
**Files** `policy.onnx` · `manifest.json` (all of the above, machine-readable) · `media/preview.mp4` (sim rollout)
Format: [Microduck policy sharing](https://github.com/pollen-robotics/microduck_rl/blob/main/docs/sharing-policies.md).