Promote robust iteration 12195 running policy
Browse files- .gitattributes +3 -0
- README.md +99 -80
- SHA256SUMS +22 -6
- checkpoint.pt +2 -2
- config.json +2 -1
- eval/checkpoint-onnx-parity.json +13 -0
- eval/high-grip-plain.json +37 -0
- eval/nominal-backlash.json +37 -0
- eval/nominal-plain.json +37 -0
- eval/released_12195.json +129 -0
- eval/stress-backlash.json +37 -0
- eval/stress-plain.json +37 -0
- legacy/iteration-8749/checkpoint.pt +3 -0
- legacy/iteration-8749/manifest.json +103 -0
- legacy/iteration-8749/media/preview.mp4 +3 -0
- legacy/iteration-8749/policy.onnx +3 -0
- lineage/iteration-11748/checkpoint.pt +3 -0
- lineage/iteration-11748/evaluations.tar.gz +0 -0
- lineage/iteration-11748/manifest.json +13 -0
- lineage/iteration-11748/policy.onnx +3 -0
- lineage/iteration-11748/preview.mp4 +3 -0
- manifest.json +58 -38
- media/preview.mp4 +2 -2
- policy.onnx +2 -2
.gitattributes
CHANGED
|
@@ -1,3 +1,6 @@
|
|
| 1 |
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 2 |
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 3 |
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 2 |
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 3 |
|
| 4 |
+
checkpoint.pt filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
legacy/iteration-8749/checkpoint.pt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
lineage/iteration-11748/checkpoint.pt filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -6,43 +6,53 @@ license: apache-2.0
|
|
| 6 |
|
| 7 |
# microduck-running
|
| 8 |
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
| 11 |
|
| 12 |
-
**Status: simulation
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
|
| 17 |
-
## Normal simulation rollout
|
| 18 |
|
| 19 |
<video src="https://huggingface.co/HannesVonEssen/microduck-running/resolve/main/media/preview.mp4" width="720" controls autoplay loop muted playsinline preload="metadata"></video>
|
| 20 |
|
| 21 |
[Open the full silent MP4](media/preview.mp4).
|
| 22 |
|
| 23 |
-
## Run-into-mat edit
|
| 24 |
|
| 25 |
<video src="https://huggingface.co/HannesVonEssen/microduck-running/resolve/main/media/run-into-mat.mp4" controls loop muted playsinline></video>
|
| 26 |
|
| 27 |
[Open the full silent run-into-mat MP4](media/run-into-mat.mp4).
|
| 28 |
|
| 29 |
-
The
|
| 30 |
-
collision
|
| 31 |
-
sparks are scripted demonstration elements. The
|
| 32 |
-
perception and did not learn to
|
| 33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
## Command
|
| 36 |
|
| 37 |
The 13-D command block is `[twist(3), head_pose(4), body_pose(6)]`.
|
| 38 |
|
| 39 |
-
|
|
| 40 |
|---|---|
|
| 41 |
-
| `twist[0]` | forward-velocity command;
|
| 42 |
-
| `twist[1]` | lateral command; use 0 (only
|
| 43 |
-
| `twist[2]` | yaw-rate command; use 0 (only
|
| 44 |
-
| `head_pose[0:4]` | unused
|
| 45 |
-
| `body_pose[0:6]` | unused
|
| 46 |
|
| 47 |
An exact-zero standing bucket made up 3% of training environments, so
|
| 48 |
`twist = [0, 0, 0]` is the intended idle command. The speed objective rewards
|
|
@@ -51,35 +61,43 @@ limiter.
|
|
| 51 |
|
| 52 |
## Try it in simulation
|
| 53 |
|
| 54 |
-
The matching
|
| 55 |
-
[`Vottivott/microduck-playground`](https://github.com/Vottivott/microduck-playground)
|
| 56 |
-
at commit
|
| 57 |
-
[`c5fcc50`](https://github.com/Vottivott/microduck-playground/commit/c5fcc50219fef01ac9931d0079c583ccbb29b689):
|
| 58 |
|
| 59 |
```bash
|
| 60 |
git clone https://github.com/Vottivott/microduck-playground.git
|
| 61 |
cd microduck-playground
|
| 62 |
-
git checkout
|
| 63 |
uv sync
|
| 64 |
|
| 65 |
hf download HannesVonEssen/microduck-running policy.onnx config.json --local-dir policies/running
|
| 66 |
uv run scripts/infer_policy.py \
|
| 67 |
--walking policies/running/policy.onnx \
|
| 68 |
--new-cmd-obs \
|
| 69 |
-
--lin-vel-x
|
| 70 |
```
|
| 71 |
|
| 72 |
## Continue training
|
| 73 |
|
| 74 |
-
`checkpoint.pt` is the complete iteration-
|
| 75 |
-
|
| 76 |
-
counter. Place it at
|
| 77 |
-
`logs/rsl_rl/running/release-8749/model_8749.pt`, then resume with:
|
| 78 |
|
| 79 |
```bash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
uv run train Mjlab-Running-Flat-MicroDuck \
|
| 81 |
-
--agent.resume True --agent.load-run release-
|
| 82 |
-
--agent.load-checkpoint
|
| 83 |
```
|
| 84 |
|
| 85 |
PyTorch checkpoints use pickle internally; load them only from a repository
|
|
@@ -92,83 +110,84 @@ and revision you trust.
|
|
| 92 |
- control rate: 50 Hz
|
| 93 |
- action scale: 1.0, joint-position targets around MicroDuck HOME
|
| 94 |
- observation normalizer: baked into `policy.onnx`
|
|
|
|
| 95 |
- entry pose: standing
|
| 96 |
- robot: MicroDuck hardware revision 1, 14 Dynamixel XL330 servos
|
| 97 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
|
| 99 |
## Simulation evaluation
|
| 100 |
|
| 101 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
| mean body-forward speed | 1.6073 m/s |
|
| 107 |
-
| mean displacement speed along initial heading | 1.3277 m/s |
|
| 108 |
-
| mean absolute heading error | 25.22° |
|
| 109 |
-
| mean absolute lateral displacement | 3.87 m |
|
| 110 |
-
| flight fraction | 65.72% |
|
| 111 |
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
measurement. `WALKING BASELINE 0.4 m/s` refers to the walking task's configured
|
| 117 |
-
command ceiling, not a matched measured baseline.
|
| 118 |
|
| 119 |
-
## Sim-to-real
|
| 120 |
|
| 121 |
-
The
|
| 122 |
-
recipe:
|
| 123 |
|
| 124 |
-
- BAM XL330 M6 voltage control, back-EMF, current limiting,
|
| 125 |
-
|
| 126 |
- 3–6 physics-step actuator delay, 0–1-step IMU delay, and one-control-step
|
| 127 |
joint-velocity lag;
|
| 128 |
- foot friction randomized from 0.7–1.3;
|
| 129 |
-
- trunk mass/inertia ±5%,
|
| 130 |
-
|
| 131 |
-
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
- weaker upright, pose, angular-motion, foot-slip, and action-rate
|
| 141 |
-
regularization; head/body pose tracking disabled;
|
| 142 |
-
- motor-gain randomization and randomized initial base tilt were already
|
| 143 |
-
disabled in the inherited base recipe.
|
| 144 |
-
|
| 145 |
-
This combination makes transfer plausible, not proven. The main known concerns
|
| 146 |
-
are impact loading, unmodeled gearbox backlash/compliance, real foot contact,
|
| 147 |
-
heading drift, and the relaxed robustness training.
|
| 148 |
|
| 149 |
## Hardware safety
|
| 150 |
|
| 151 |
For a first robot test, use a support/catch rig, keep a remote torque-off path,
|
| 152 |
start with low commands and ramp conservatively, and log servo current,
|
| 153 |
temperature, voltage, fall state, and commanded/applied twist. Do not begin at
|
| 154 |
-
|
| 155 |
systematic forward pitching.
|
| 156 |
|
| 157 |
## Provenance and files
|
| 158 |
|
| 159 |
-
Training task `Mjlab-Running-Flat-MicroDuck`; PPO with `rsl_rl`;
|
| 160 |
-
|
| 161 |
-
[`Vottivott/microduck-playground@
|
| 162 |
based on
|
| 163 |
[`pollen-robotics/microduck_rl@d424a0c`](https://github.com/pollen-robotics/microduck_rl/commit/d424a0c899f6b33cbd3daeb279913134349c0b63).
|
| 164 |
Exported with `scripts/export.py`, which bakes the observation normalizer into
|
| 165 |
the ONNX graph.
|
| 166 |
|
| 167 |
-
- `policy.onnx` — deployment policy
|
| 168 |
-
- `checkpoint.pt` — resumable PPO checkpoint
|
| 169 |
- `manifest.json` — machine-readable contract, evaluation, and provenance
|
| 170 |
-
- `
|
| 171 |
-
- `media/
|
|
|
|
|
|
|
|
|
|
| 172 |
- `SHA256SUMS` — artifact integrity hashes
|
| 173 |
|
| 174 |
Format inspired by
|
|
@@ -176,7 +195,7 @@ Format inspired by
|
|
| 176 |
|
| 177 |
<a href="https://hfviewer.com/HannesVonEssen/microduck-running?utm_source=huggingface&utm_medium=embedded_model_card&utm_campaign=HannesVonEssen__microduck-running_card&utm_content=embedded_card_open_viewer&from=embedded-model-card" target="_blank" rel="noopener">
|
| 178 |
<img
|
| 179 |
-
src="https://hfviewer.com/api/card.svg?source=HannesVonEssen%2Fmicroduck-running&granularity=auto&v=
|
| 180 |
alt="Architecture graph for HannesVonEssen/microduck-running. Open in hfviewer"
|
| 181 |
width="100%"
|
| 182 |
/>
|
|
|
|
| 6 |
|
| 7 |
# microduck-running
|
| 8 |
|
| 9 |
+
A robustified forward-running policy for the stock MicroDuck on flat ground.
|
| 10 |
+
The default artifact is iteration **12,195**, continued from the 1.687 m/s
|
| 11 |
+
speed frontier with progressively stronger velocity pushes, centre-of-mass
|
| 12 |
+
variation, and initial tilt.
|
| 13 |
|
| 14 |
+
**Status: simulation-only hardware candidate; not validated on hardware.** It
|
| 15 |
+
retains 1.651 m/s mean body-forward speed in the nominal simulation battery and
|
| 16 |
+
1.612 m/s under the combined backlash-plus-disturbance battery. Heading and
|
| 17 |
+
lateral drift remain substantial.
|
| 18 |
|
| 19 |
+
## Normal simulation rollout — iteration 12,195
|
| 20 |
|
| 21 |
<video src="https://huggingface.co/HannesVonEssen/microduck-running/resolve/main/media/preview.mp4" width="720" controls autoplay loop muted playsinline preload="metadata"></video>
|
| 22 |
|
| 23 |
[Open the full silent MP4](media/preview.mp4).
|
| 24 |
|
| 25 |
+
## Run-into-mat edit — legacy iteration 8,749
|
| 26 |
|
| 27 |
<video src="https://huggingface.co/HannesVonEssen/microduck-running/resolve/main/media/run-into-mat.mp4" controls loop muted playsinline></video>
|
| 28 |
|
| 29 |
[Open the full silent run-into-mat MP4](media/run-into-mat.mp4).
|
| 30 |
|
| 31 |
+
The mat video uses the preserved iteration-8,749 controller, not the new root
|
| 32 |
+
policy. Its obstacle, collision augmentation, camera treatment, post-impact
|
| 33 |
+
motor cutoff, and sparks are scripted demonstration elements. The policy has
|
| 34 |
+
no obstacle perception and did not learn to react to a mat. Both videos are
|
| 35 |
+
silent.
|
| 36 |
+
|
| 37 |
+
## Versions
|
| 38 |
+
|
| 39 |
+
| Role | Iteration | Files | Note |
|
| 40 |
+
|---|---:|---|---|
|
| 41 |
+
| Default robust candidate | 12,195 | [`policy.onnx`](policy.onnx), [`checkpoint.pt`](checkpoint.pt) | Recommended starting point for further simulation and cautious hardware research |
|
| 42 |
+
| Speed-focused parent | 11,748 | [`lineage/iteration-11748/`](lineage/iteration-11748/) | 1.687 m/s frontier used to start robustification |
|
| 43 |
+
| Legacy mat-video policy | 8,749 | [`legacy/iteration-8749/`](legacy/iteration-8749/) | Exact controller used in the run-into-mat edit |
|
| 44 |
|
| 45 |
## Command
|
| 46 |
|
| 47 |
The 13-D command block is `[twist(3), head_pose(4), body_pose(6)]`.
|
| 48 |
|
| 49 |
+
| Slot | Meaning |
|
| 50 |
|---|---|
|
| 51 |
+
| `twist[0]` | forward-velocity command; trained and evaluated through 2.20 m/s |
|
| 52 |
+
| `twist[1]` | lateral command; use 0 (only ±0.02 m/s was seen in training) |
|
| 53 |
+
| `twist[2]` | yaw-rate command; use 0 (only ±0.05 rad/s was seen in training) |
|
| 54 |
+
| `head_pose[0:4]` | unused; zeros |
|
| 55 |
+
| `body_pose[0:6]` | unused; zeros |
|
| 56 |
|
| 57 |
An exact-zero standing bucket made up 3% of training environments, so
|
| 58 |
`twist = [0, 0, 0]` is the intended idle command. The speed objective rewards
|
|
|
|
| 61 |
|
| 62 |
## Try it in simulation
|
| 63 |
|
| 64 |
+
The matching source is
|
| 65 |
+
[`Vottivott/microduck-playground@828d950`](https://github.com/Vottivott/microduck-playground/commit/828d950134e29a8d04cbb51720a22c8729047fb7):
|
|
|
|
|
|
|
| 66 |
|
| 67 |
```bash
|
| 68 |
git clone https://github.com/Vottivott/microduck-playground.git
|
| 69 |
cd microduck-playground
|
| 70 |
+
git checkout 828d950134e29a8d04cbb51720a22c8729047fb7
|
| 71 |
uv sync
|
| 72 |
|
| 73 |
hf download HannesVonEssen/microduck-running policy.onnx config.json --local-dir policies/running
|
| 74 |
uv run scripts/infer_policy.py \
|
| 75 |
--walking policies/running/policy.onnx \
|
| 76 |
--new-cmd-obs \
|
| 77 |
+
--lin-vel-x 2.2
|
| 78 |
```
|
| 79 |
|
| 80 |
## Continue training
|
| 81 |
|
| 82 |
+
`checkpoint.pt` is the complete iteration-12,195 PPO state: actor, critic,
|
| 83 |
+
optimizer, observation normalizers, and curriculum counter.
|
|
|
|
|
|
|
| 84 |
|
| 85 |
```bash
|
| 86 |
+
mkdir -p logs/rsl_rl/running/release-12195
|
| 87 |
+
cp checkpoint.pt logs/rsl_rl/running/release-12195/model_12195.pt
|
| 88 |
+
|
| 89 |
+
MICRODUCK_RUNNING_TARGET_MAX_SPEED=2.2 \
|
| 90 |
+
MICRODUCK_RUNNING_SPEED_CAP=2.4 \
|
| 91 |
+
MICRODUCK_RUNNING_HIGH_SPEED_STAGE_INTERVAL=750 \
|
| 92 |
+
MICRODUCK_RUNNING_ACTION_RATE_WEIGHT=-0.10 \
|
| 93 |
+
MICRODUCK_RUNNING_FORWARD_PROGRESS_WEIGHT=5.0 \
|
| 94 |
+
MICRODUCK_RUNNING_ROBUST_PUSH_MPS=0.10 \
|
| 95 |
+
MICRODUCK_RUNNING_ROBUST_TRUNK_COM_M=0.008 \
|
| 96 |
+
MICRODUCK_RUNNING_ROBUST_HEAD_COM_M=0.006 \
|
| 97 |
+
MICRODUCK_RUNNING_ROBUST_INITIAL_TILT_DEG=2.0 \
|
| 98 |
uv run train Mjlab-Running-Flat-MicroDuck \
|
| 99 |
+
--agent.resume True --agent.load-run release-12195 \
|
| 100 |
+
--agent.load-checkpoint model_12195.pt --agent.max-iterations 100
|
| 101 |
```
|
| 102 |
|
| 103 |
PyTorch checkpoints use pickle internally; load them only from a repository
|
|
|
|
| 110 |
- control rate: 50 Hz
|
| 111 |
- action scale: 1.0, joint-position targets around MicroDuck HOME
|
| 112 |
- observation normalizer: baked into `policy.onnx`
|
| 113 |
+
- output clipping: none; training also used unclipped actor outputs
|
| 114 |
- entry pose: standing
|
| 115 |
- robot: MicroDuck hardware revision 1, 14 Dynamixel XL330 servos
|
| 116 |
+
- hardware modifications: none
|
| 117 |
+
|
| 118 |
+
Checkpoint-to-ONNX parity over zero and deterministic random observations had
|
| 119 |
+
a maximum absolute action error of 7.63e-6. See
|
| 120 |
+
[`eval/checkpoint-onnx-parity.json`](eval/checkpoint-onnx-parity.json).
|
| 121 |
|
| 122 |
## Simulation evaluation
|
| 123 |
|
| 124 |
+
All batteries used a 2.20 m/s command, 1-second warm-up, and 10-second
|
| 125 |
+
measurement horizon.
|
| 126 |
+
|
| 127 |
+
| Evaluation | Environments | Body-forward speed | Survival |
|
| 128 |
+
|---|---:|---:|---:|
|
| 129 |
+
| Ordinary model, nominal | 512 | 1.651 m/s | 99.22% |
|
| 130 |
+
| Ordinary model, push/CoM/tilt stress | 512 | 1.635 m/s | 98.83% |
|
| 131 |
+
| Backlash model, nominal | 256 | 1.636 m/s | 98.83% |
|
| 132 |
+
| Backlash model, push/CoM/tilt stress | 256 | 1.612 m/s | 98.44% |
|
| 133 |
+
| High grip plus full stress | 512 | 1.642 m/s | 96.68% |
|
| 134 |
|
| 135 |
+
Stress means ±0.10 m/s planar pushes every 3–6 seconds, ±10 mm trunk CoM,
|
| 136 |
+
±6 mm head CoM, and ±2° initial pitch/roll. The high-grip case widens foot
|
| 137 |
+
friction from 0.7–1.3 to 0.7–1.8. Raw outputs are under [`eval/`](eval/).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
|
| 139 |
+
The candidate was trained with the ordinary robot model, then evaluated
|
| 140 |
+
unchanged with the backlash model. A separately backlash-trained continuation
|
| 141 |
+
performed worse and was rejected. Robustification costs about 2.1% nominal
|
| 142 |
+
speed relative to iteration 11,748 but gives the stronger overall release.
|
|
|
|
|
|
|
| 143 |
|
| 144 |
+
## Sim-to-real boundary
|
| 145 |
|
| 146 |
+
The policy retains substantial deployment-oriented modeling:
|
|
|
|
| 147 |
|
| 148 |
+
- BAM XL330 M6 voltage control, back-EMF, current limiting, 6.5–8.2 V battery
|
| 149 |
+
variation, and load-dependent sag;
|
| 150 |
- 3–6 physics-step actuator delay, 0–1-step IMU delay, and one-control-step
|
| 151 |
joint-velocity lag;
|
| 152 |
- foot friction randomized from 0.7–1.3;
|
| 153 |
+
- trunk mass/inertia ±5%, armature ±10%, BAM joint friction ±10%, encoder bias
|
| 154 |
+
±0.015 rad, IMU misalignment up to 6°, and actor-observation noise;
|
| 155 |
+
- in the final stage: ±0.10 m/s pushes, ±8 mm trunk CoM, ±6 mm head CoM, and
|
| 156 |
+
±2° initial pitch/roll.
|
| 157 |
+
|
| 158 |
+
Important remaining relaxations are flat terrain, ordinary non-backlash
|
| 159 |
+
training, disabled head/body pose tracking, weaker posture and angular-motion
|
| 160 |
+
regularization, and no motor-gain randomization. Backlash was tested, not part
|
| 161 |
+
of the selected policy's training distribution. Transfer is plausible, not
|
| 162 |
+
proven; heading drift, impact loading, real contact, servo thermal limits, and
|
| 163 |
+
unmodeled compliance remain concerns.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 164 |
|
| 165 |
## Hardware safety
|
| 166 |
|
| 167 |
For a first robot test, use a support/catch rig, keep a remote torque-off path,
|
| 168 |
start with low commands and ramp conservatively, and log servo current,
|
| 169 |
temperature, voltage, fall state, and commanded/applied twist. Do not begin at
|
| 170 |
+
2.20 m/s. Stop on repeated saturation, overheating, unexpected oscillation, or
|
| 171 |
systematic forward pitching.
|
| 172 |
|
| 173 |
## Provenance and files
|
| 174 |
|
| 175 |
+
Training task `Mjlab-Running-Flat-MicroDuck`; PPO with `rsl_rl`; checkpoint
|
| 176 |
+
iteration 12,195. Source:
|
| 177 |
+
[`Vottivott/microduck-playground@828d950`](https://github.com/Vottivott/microduck-playground/commit/828d950134e29a8d04cbb51720a22c8729047fb7),
|
| 178 |
based on
|
| 179 |
[`pollen-robotics/microduck_rl@d424a0c`](https://github.com/pollen-robotics/microduck_rl/commit/d424a0c899f6b33cbd3daeb279913134349c0b63).
|
| 180 |
Exported with `scripts/export.py`, which bakes the observation normalizer into
|
| 181 |
the ONNX graph.
|
| 182 |
|
| 183 |
+
- `policy.onnx` — default robust deployment policy
|
| 184 |
+
- `checkpoint.pt` — default resumable PPO checkpoint
|
| 185 |
- `manifest.json` — machine-readable contract, evaluation, and provenance
|
| 186 |
+
- `eval/` — raw evaluation records and checkpoint/ONNX parity record
|
| 187 |
+
- `media/preview.mp4` — robust policy's 10-second close rollout
|
| 188 |
+
- `media/run-into-mat.mp4` — scripted legacy iteration-8,749 demonstration
|
| 189 |
+
- `lineage/iteration-11748/` — speed-parent model, checkpoint, video, and evals
|
| 190 |
+
- `legacy/iteration-8749/` — exact mat-video policy, checkpoint, and clean video
|
| 191 |
- `SHA256SUMS` — artifact integrity hashes
|
| 192 |
|
| 193 |
Format inspired by
|
|
|
|
| 195 |
|
| 196 |
<a href="https://hfviewer.com/HannesVonEssen/microduck-running?utm_source=huggingface&utm_medium=embedded_model_card&utm_campaign=HannesVonEssen__microduck-running_card&utm_content=embedded_card_open_viewer&from=embedded-model-card" target="_blank" rel="noopener">
|
| 197 |
<img
|
| 198 |
+
src="https://hfviewer.com/api/card.svg?source=HannesVonEssen%2Fmicroduck-running&granularity=auto&v=20260903-robust12195"
|
| 199 |
alt="Architecture graph for HannesVonEssen/microduck-running. Open in hfviewer"
|
| 200 |
width="100%"
|
| 201 |
/>
|
SHA256SUMS
CHANGED
|
@@ -1,7 +1,23 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
13f3eaf36601928125a001c1e5f444285a7294b70dc53a186da195d8cb50bc9a media/run-into-mat.mp4
|
| 7 |
-
|
|
|
|
| 1 |
+
69c602a90098db9642a213367371153a8451e0b66e21eb48d682853f411e5d97 README.md
|
| 2 |
+
052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973 checkpoint.pt
|
| 3 |
+
a9a1e9058642980c5f33b6c9d1ad54f513292429dc3dc57dcea8d3f6f2dc5950 config.json
|
| 4 |
+
d7a92e6ed3b48e72a07973ada6b74f3611bba38aaa8af9747ba0dabaa6ef12e0 eval/checkpoint-onnx-parity.json
|
| 5 |
+
f65329ffd1cfe990c244390ae076532537daee530832cf993f84d95b53e30c78 eval/high-grip-plain.json
|
| 6 |
+
eafe79f0f32f0430efb13bc95bb5896d8aaf1bff575a5dc973ba30aaa2f9d162 eval/nominal-backlash.json
|
| 7 |
+
ef08a1b9c1d4ac51e50d119197d2406d3352b31d7e986190449f7be058ac7236 eval/nominal-plain.json
|
| 8 |
+
16918366d4208f433eabd3c24a1e57ae8923ab9fb064e70328347e64b5fd65b7 eval/released_12195.json
|
| 9 |
+
a9934320b9f4bf29ff4304ec48be01c519540188cfb679b945a13721de83cb24 eval/stress-backlash.json
|
| 10 |
+
abdb838ea7c4795451e97ddb27870404189f53fb1032084fa517a24e674df098 eval/stress-plain.json
|
| 11 |
+
ce7707c985d84affda1befec172a8c0a72fafaa4d3476a26bec11dde9199907f legacy/iteration-8749/checkpoint.pt
|
| 12 |
+
1907518687eaccf35ef242da3326873b4c7849e31dd0dc0a677f747fc5b6a8f3 legacy/iteration-8749/manifest.json
|
| 13 |
+
69ce8b5f8855ac76d2413d90b176e770d22d22a72766dcc2dacf34ccbded58d6 legacy/iteration-8749/media/preview.mp4
|
| 14 |
+
b4e285fb3671f52c28f671bd4733a4e11fa17c21f40d25f52eaf2614f9e2e02a legacy/iteration-8749/policy.onnx
|
| 15 |
+
1e79df200d8bb19b139ee1e74e6910c62434d57e792f632b66b10a73266894eb lineage/iteration-11748/checkpoint.pt
|
| 16 |
+
a81a468c789b890f935e14f478f992c632b01eeb25179da7d3ba252d663625be lineage/iteration-11748/evaluations.tar.gz
|
| 17 |
+
04eccc1fe13a8d00c813cac78e7ada8df65ab3b317757a0b2d0a4ac35574ca8f lineage/iteration-11748/manifest.json
|
| 18 |
+
ccd6757b53b591081fdf75dd3effe9a5743f5fac0c2a513fa48dfd5a32231b65 lineage/iteration-11748/policy.onnx
|
| 19 |
+
256ad675984d544204076986a7e09ea3a66c6070ec15ffb52921212e685e898c lineage/iteration-11748/preview.mp4
|
| 20 |
+
0ef9f79b9105ed28c8b4d718dd669541de6dc906493732c5357e87a8cc92a0a3 manifest.json
|
| 21 |
+
942f0802cc0c6795769bd99a9991f866fee682890ea9ea6d71077f7d4eb5492b media/preview.mp4
|
| 22 |
13f3eaf36601928125a001c1e5f444285a7294b70dc53a186da195d8cb50bc9a media/run-into-mat.mp4
|
| 23 |
+
007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb policy.onnx
|
checkpoint.pt
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973
|
| 3 |
+
size 4843527
|
config.json
CHANGED
|
@@ -8,6 +8,7 @@
|
|
| 8 |
"observation_size": 61,
|
| 9 |
"action_size": 14,
|
| 10 |
"control_frequency_hz": 50,
|
|
|
|
| 11 |
"source_repository": "Vottivott/microduck-playground",
|
| 12 |
-
"source_revision": "
|
| 13 |
}
|
|
|
|
| 8 |
"observation_size": 61,
|
| 9 |
"action_size": 14,
|
| 10 |
"control_frequency_hz": 50,
|
| 11 |
+
"checkpoint_iteration": 12195,
|
| 12 |
"source_repository": "Vottivott/microduck-playground",
|
| 13 |
+
"source_revision": "828d950134e29a8d04cbb51720a22c8729047fb7"
|
| 14 |
}
|
eval/checkpoint-onnx-parity.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"checkpoint_iteration": 12195,
|
| 3 |
+
"checkpoint_sha256": "052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973",
|
| 4 |
+
"onnx_sha256": "007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb",
|
| 5 |
+
"input_shape": [1, 61],
|
| 6 |
+
"output_shape": [1, 14],
|
| 7 |
+
"samples": "zero plus deterministic random observations",
|
| 8 |
+
"max_absolute_error": 0.00000762939453125,
|
| 9 |
+
"mean_absolute_error": 0.000000862,
|
| 10 |
+
"observation_normalizer_embedded": true,
|
| 11 |
+
"training_action_clipping": false,
|
| 12 |
+
"onnx_output_clip": false
|
| 13 |
+
}
|
eval/high-grip-plain.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"absolute_lateral_displacement_m": {
|
| 3 |
+
"mean": 6.934412002563477,
|
| 4 |
+
"median": 7.661316394805908,
|
| 5 |
+
"p90": 11.148153305053711
|
| 6 |
+
},
|
| 7 |
+
"actor_observation_dim": 61,
|
| 8 |
+
"checkpoint": "/net/gcp/cloud-storage/europe-west/training/hannes/microduck_running/20260830-hardware-robust/v2-mild-r2/stage-c/checkpoint.pt",
|
| 9 |
+
"command_speed_mps": 2.2,
|
| 10 |
+
"duration_s": 10.0,
|
| 11 |
+
"final_absolute_heading_error_deg": {
|
| 12 |
+
"mean": 75.98717957309084,
|
| 13 |
+
"median": 70.41698272002702,
|
| 14 |
+
"p90": 149.06419312575767
|
| 15 |
+
},
|
| 16 |
+
"flight_events_per_second": 6.993881702423096,
|
| 17 |
+
"flight_fraction": 0.6284358501434326,
|
| 18 |
+
"forward_speed_mps": {
|
| 19 |
+
"clean_survivor_mean": 1.6467944383621216,
|
| 20 |
+
"mean": 1.6424154043197632,
|
| 21 |
+
"median": 1.6616889238357544,
|
| 22 |
+
"p10": 1.4980621337890625,
|
| 23 |
+
"p90": 1.7803144454956055
|
| 24 |
+
},
|
| 25 |
+
"initial_heading_displacement_speed_mps": {
|
| 26 |
+
"mean": 1.0247559547424316,
|
| 27 |
+
"median": 1.148021936416626,
|
| 28 |
+
"p10": 0.19742903113365173
|
| 29 |
+
},
|
| 30 |
+
"max_tilt_deg_median": 16.086403476606087,
|
| 31 |
+
"mean_absolute_heading_error_deg": 42.492167524874674,
|
| 32 |
+
"mean_absolute_lateral_speed_mps": 0.10666095465421677,
|
| 33 |
+
"mean_absolute_yaw_rate_radps": 1.3615901470184326,
|
| 34 |
+
"num_envs": 512,
|
| 35 |
+
"survival_fraction": 0.966796875,
|
| 36 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck"
|
| 37 |
+
}
|
eval/nominal-backlash.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"absolute_lateral_displacement_m": {
|
| 3 |
+
"mean": 6.03297233581543,
|
| 4 |
+
"median": 6.301413536071777,
|
| 5 |
+
"p90": 10.287883758544922
|
| 6 |
+
},
|
| 7 |
+
"actor_observation_dim": 61,
|
| 8 |
+
"checkpoint": "/net/gcp/cloud-storage/europe-west/training/hannes/microduck_running/20260830-hardware-robust/v2-mild-r2/stage-c/checkpoint.pt",
|
| 9 |
+
"command_speed_mps": 2.2,
|
| 10 |
+
"duration_s": 10.0,
|
| 11 |
+
"final_absolute_heading_error_deg": {
|
| 12 |
+
"mean": 63.66170706483097,
|
| 13 |
+
"median": 57.51983703861542,
|
| 14 |
+
"p90": 133.31073063533844
|
| 15 |
+
},
|
| 16 |
+
"flight_events_per_second": 7.0286455154418945,
|
| 17 |
+
"flight_fraction": 0.6461542844772339,
|
| 18 |
+
"forward_speed_mps": {
|
| 19 |
+
"clean_survivor_mean": 1.6365820169448853,
|
| 20 |
+
"mean": 1.6362495422363281,
|
| 21 |
+
"median": 1.64719820022583,
|
| 22 |
+
"p10": 1.515997052192688,
|
| 23 |
+
"p90": 1.7456064224243164
|
| 24 |
+
},
|
| 25 |
+
"initial_heading_displacement_speed_mps": {
|
| 26 |
+
"mean": 1.1968926191329956,
|
| 27 |
+
"median": 1.324066162109375,
|
| 28 |
+
"p10": 0.6039830446243286
|
| 29 |
+
},
|
| 30 |
+
"max_tilt_deg_median": 15.47616364030588,
|
| 31 |
+
"mean_absolute_heading_error_deg": 32.83215926473935,
|
| 32 |
+
"mean_absolute_lateral_speed_mps": 0.09709258377552032,
|
| 33 |
+
"mean_absolute_yaw_rate_radps": 1.5131072998046875,
|
| 34 |
+
"num_envs": 256,
|
| 35 |
+
"survival_fraction": 0.98828125,
|
| 36 |
+
"task_id": "Mjlab-Running-Flat-Backlash-MicroDuck"
|
| 37 |
+
}
|
eval/nominal-plain.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"absolute_lateral_displacement_m": {
|
| 3 |
+
"mean": 5.830930709838867,
|
| 4 |
+
"median": 6.121419906616211,
|
| 5 |
+
"p90": 10.318323135375977
|
| 6 |
+
},
|
| 7 |
+
"actor_observation_dim": 61,
|
| 8 |
+
"checkpoint": "/net/gcp/cloud-storage/europe-west/training/hannes/microduck_running/20260830-hardware-robust/v2-mild-r2/stage-c/checkpoint.pt",
|
| 9 |
+
"command_speed_mps": 2.2,
|
| 10 |
+
"duration_s": 10.0,
|
| 11 |
+
"final_absolute_heading_error_deg": {
|
| 12 |
+
"mean": 59.87216784914615,
|
| 13 |
+
"median": 52.358908535713354,
|
| 14 |
+
"p90": 119.16307293954588
|
| 15 |
+
},
|
| 16 |
+
"flight_events_per_second": 7.0729241371154785,
|
| 17 |
+
"flight_fraction": 0.6566617488861084,
|
| 18 |
+
"forward_speed_mps": {
|
| 19 |
+
"clean_survivor_mean": 1.6519087553024292,
|
| 20 |
+
"mean": 1.6510932445526123,
|
| 21 |
+
"median": 1.6662672758102417,
|
| 22 |
+
"p10": 1.5096769332885742,
|
| 23 |
+
"p90": 1.760268211364746
|
| 24 |
+
},
|
| 25 |
+
"initial_heading_displacement_speed_mps": {
|
| 26 |
+
"mean": 1.2437968254089355,
|
| 27 |
+
"median": 1.3523855209350586,
|
| 28 |
+
"p10": 0.7378867864608765
|
| 29 |
+
},
|
| 30 |
+
"max_tilt_deg_median": 15.38079883156687,
|
| 31 |
+
"mean_absolute_heading_error_deg": 31.326498703723402,
|
| 32 |
+
"mean_absolute_lateral_speed_mps": 0.09913850575685501,
|
| 33 |
+
"mean_absolute_yaw_rate_radps": 1.3830451965332031,
|
| 34 |
+
"num_envs": 512,
|
| 35 |
+
"survival_fraction": 0.9921875,
|
| 36 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck"
|
| 37 |
+
}
|
eval/released_12195.json
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 1,
|
| 3 |
+
"experiment": "running",
|
| 4 |
+
"policy": {
|
| 5 |
+
"huggingface_repo": "HannesVonEssen/microduck-running",
|
| 6 |
+
"checkpoint_iteration": 12195,
|
| 7 |
+
"resumed_from_iteration": 11748,
|
| 8 |
+
"policy_onnx_sha256": "007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb",
|
| 9 |
+
"checkpoint_pt_sha256": "052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973"
|
| 10 |
+
},
|
| 11 |
+
"training": {
|
| 12 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 13 |
+
"simulator": "mjlab / MuJoCo Warp",
|
| 14 |
+
"algorithm": "PPO (rsl_rl)",
|
| 15 |
+
"seed": 42,
|
| 16 |
+
"num_envs": 4096,
|
| 17 |
+
"common": {
|
| 18 |
+
"target_max_speed_m_s": 2.2,
|
| 19 |
+
"speed_reward_cap_m_s": 2.4,
|
| 20 |
+
"high_speed_stage_interval_iterations": 750,
|
| 21 |
+
"action_rate_reward_weight": -0.1,
|
| 22 |
+
"forward_progress_reward_weight": 5.0,
|
| 23 |
+
"symmetry_enabled": false,
|
| 24 |
+
"heading_feedback_enabled": false,
|
| 25 |
+
"push_interval_s": [3.0, 6.0],
|
| 26 |
+
"foot_friction_range": [0.7, 1.3]
|
| 27 |
+
},
|
| 28 |
+
"stages": [
|
| 29 |
+
{
|
| 30 |
+
"iterations": 100,
|
| 31 |
+
"push_velocity_m_s": 0.03,
|
| 32 |
+
"trunk_com_offset_m": 0.003,
|
| 33 |
+
"head_com_offset_m": 0.003,
|
| 34 |
+
"initial_pitch_roll_deg": 1.0
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"iterations": 150,
|
| 38 |
+
"push_velocity_m_s": 0.06,
|
| 39 |
+
"trunk_com_offset_m": 0.005,
|
| 40 |
+
"head_com_offset_m": 0.005,
|
| 41 |
+
"initial_pitch_roll_deg": 1.5
|
| 42 |
+
},
|
| 43 |
+
{
|
| 44 |
+
"iterations": 200,
|
| 45 |
+
"push_velocity_m_s": 0.1,
|
| 46 |
+
"trunk_com_offset_m": 0.008,
|
| 47 |
+
"head_com_offset_m": 0.006,
|
| 48 |
+
"initial_pitch_roll_deg": 2.0
|
| 49 |
+
}
|
| 50 |
+
]
|
| 51 |
+
},
|
| 52 |
+
"evaluation": {
|
| 53 |
+
"command_forward_m_s": 2.2,
|
| 54 |
+
"duration_s": 10.0,
|
| 55 |
+
"warmup_s": 1.0,
|
| 56 |
+
"cases": [
|
| 57 |
+
{
|
| 58 |
+
"name": "nominal",
|
| 59 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 60 |
+
"num_envs": 512,
|
| 61 |
+
"survival_fraction": 0.9921875,
|
| 62 |
+
"mean_body_forward_speed_m_s": 1.6510932445526123,
|
| 63 |
+
"mean_initial_heading_displacement_speed_m_s": 1.2437968254089355,
|
| 64 |
+
"mean_absolute_heading_error_deg": 31.326498703723402
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"name": "push-com-tilt-stress",
|
| 68 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 69 |
+
"num_envs": 512,
|
| 70 |
+
"survival_fraction": 0.98828125,
|
| 71 |
+
"mean_body_forward_speed_m_s": 1.6349653005599976,
|
| 72 |
+
"mean_initial_heading_displacement_speed_m_s": 1.0107059478759766,
|
| 73 |
+
"mean_absolute_heading_error_deg": 43.2924983559655
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"name": "backlash-nominal",
|
| 77 |
+
"task_id": "Mjlab-Running-Flat-Backlash-MicroDuck",
|
| 78 |
+
"num_envs": 256,
|
| 79 |
+
"survival_fraction": 0.98828125,
|
| 80 |
+
"mean_body_forward_speed_m_s": 1.6362495422363281,
|
| 81 |
+
"mean_initial_heading_displacement_speed_m_s": 1.1968926191329956,
|
| 82 |
+
"mean_absolute_heading_error_deg": 32.83215926473935
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"name": "backlash-push-com-tilt-stress",
|
| 86 |
+
"task_id": "Mjlab-Running-Flat-Backlash-MicroDuck",
|
| 87 |
+
"num_envs": 256,
|
| 88 |
+
"survival_fraction": 0.984375,
|
| 89 |
+
"mean_body_forward_speed_m_s": 1.6121970415115356,
|
| 90 |
+
"mean_initial_heading_displacement_speed_m_s": 0.9829199910163879,
|
| 91 |
+
"mean_absolute_heading_error_deg": 43.80756975146533
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"name": "high-grip-push-com-tilt-stress",
|
| 95 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 96 |
+
"num_envs": 512,
|
| 97 |
+
"survival_fraction": 0.966796875,
|
| 98 |
+
"mean_body_forward_speed_m_s": 1.6424154043197632,
|
| 99 |
+
"mean_initial_heading_displacement_speed_m_s": 1.0247559547424316,
|
| 100 |
+
"mean_absolute_heading_error_deg": 42.492167524874674,
|
| 101 |
+
"foot_friction_range": [0.7, 1.8]
|
| 102 |
+
}
|
| 103 |
+
],
|
| 104 |
+
"stress_definition": {
|
| 105 |
+
"push_velocity_m_s": 0.1,
|
| 106 |
+
"trunk_com_offset_m": 0.01,
|
| 107 |
+
"head_com_offset_m": 0.006,
|
| 108 |
+
"initial_pitch_roll_deg": 2.0
|
| 109 |
+
}
|
| 110 |
+
},
|
| 111 |
+
"checkpoint_onnx_parity": {
|
| 112 |
+
"observation_shape": [1, 61],
|
| 113 |
+
"action_shape": [1, 14],
|
| 114 |
+
"samples": "zero plus deterministic random observations",
|
| 115 |
+
"maximum_absolute_error": 0.00000762939453125,
|
| 116 |
+
"mean_absolute_error": 0.000000862,
|
| 117 |
+
"action_clipping_during_training": false,
|
| 118 |
+
"observation_normalizer_embedded": true
|
| 119 |
+
},
|
| 120 |
+
"media": {
|
| 121 |
+
"path": "../media/preview.mp4",
|
| 122 |
+
"sha256": "942f0802cc0c6795769bd99a9991f866fee682890ea9ea6d71077f7d4eb5492b",
|
| 123 |
+
"duration_s": 10.0,
|
| 124 |
+
"fps": 50,
|
| 125 |
+
"audio": false
|
| 126 |
+
},
|
| 127 |
+
"known_limit": "Heading and lateral drift remain substantial; this has not been validated on hardware.",
|
| 128 |
+
"status": "simulation-only-hardware-candidate"
|
| 129 |
+
}
|
eval/stress-backlash.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"absolute_lateral_displacement_m": {
|
| 3 |
+
"mean": 6.875430107116699,
|
| 4 |
+
"median": 7.540812969207764,
|
| 5 |
+
"p90": 11.18838882446289
|
| 6 |
+
},
|
| 7 |
+
"actor_observation_dim": 61,
|
| 8 |
+
"checkpoint": "/net/gcp/cloud-storage/europe-west/training/hannes/microduck_running/20260830-hardware-robust/v2-mild-r2/stage-c/checkpoint.pt",
|
| 9 |
+
"command_speed_mps": 2.2,
|
| 10 |
+
"duration_s": 10.0,
|
| 11 |
+
"final_absolute_heading_error_deg": {
|
| 12 |
+
"mean": 78.06403519401661,
|
| 13 |
+
"median": 69.26634856187916,
|
| 14 |
+
"p90": 153.97044094998287
|
| 15 |
+
},
|
| 16 |
+
"flight_events_per_second": 6.991552829742432,
|
| 17 |
+
"flight_fraction": 0.6431052684783936,
|
| 18 |
+
"forward_speed_mps": {
|
| 19 |
+
"clean_survivor_mean": 1.6127194166183472,
|
| 20 |
+
"mean": 1.6121970415115356,
|
| 21 |
+
"median": 1.6359825134277344,
|
| 22 |
+
"p10": 1.4503546953201294,
|
| 23 |
+
"p90": 1.7518620491027832
|
| 24 |
+
},
|
| 25 |
+
"initial_heading_displacement_speed_mps": {
|
| 26 |
+
"mean": 0.9829199910163879,
|
| 27 |
+
"median": 1.1384128332138062,
|
| 28 |
+
"p10": 0.1604430228471756
|
| 29 |
+
},
|
| 30 |
+
"max_tilt_deg_median": 16.76836371428601,
|
| 31 |
+
"mean_absolute_heading_error_deg": 43.80756975146533,
|
| 32 |
+
"mean_absolute_lateral_speed_mps": 0.1000186949968338,
|
| 33 |
+
"mean_absolute_yaw_rate_radps": 1.5083571672439575,
|
| 34 |
+
"num_envs": 256,
|
| 35 |
+
"survival_fraction": 0.984375,
|
| 36 |
+
"task_id": "Mjlab-Running-Flat-Backlash-MicroDuck"
|
| 37 |
+
}
|
eval/stress-plain.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"absolute_lateral_displacement_m": {
|
| 3 |
+
"mean": 6.924654006958008,
|
| 4 |
+
"median": 7.288991451263428,
|
| 5 |
+
"p90": 11.336601257324219
|
| 6 |
+
},
|
| 7 |
+
"actor_observation_dim": 61,
|
| 8 |
+
"checkpoint": "/net/gcp/cloud-storage/europe-west/training/hannes/microduck_running/20260830-hardware-robust/v2-mild-r2/stage-c/checkpoint.pt",
|
| 9 |
+
"command_speed_mps": 2.2,
|
| 10 |
+
"duration_s": 10.0,
|
| 11 |
+
"final_absolute_heading_error_deg": {
|
| 12 |
+
"mean": 75.89308688708473,
|
| 13 |
+
"median": 66.99265371926279,
|
| 14 |
+
"p90": 149.8832694110256
|
| 15 |
+
},
|
| 16 |
+
"flight_events_per_second": 7.019308090209961,
|
| 17 |
+
"flight_fraction": 0.6557417511940002,
|
| 18 |
+
"forward_speed_mps": {
|
| 19 |
+
"clean_survivor_mean": 1.636256456375122,
|
| 20 |
+
"mean": 1.6349653005599976,
|
| 21 |
+
"median": 1.6558061838150024,
|
| 22 |
+
"p10": 1.4708143472671509,
|
| 23 |
+
"p90": 1.7637542486190796
|
| 24 |
+
},
|
| 25 |
+
"initial_heading_displacement_speed_mps": {
|
| 26 |
+
"mean": 1.0107059478759766,
|
| 27 |
+
"median": 1.1746344566345215,
|
| 28 |
+
"p10": 0.1442173719406128
|
| 29 |
+
},
|
| 30 |
+
"max_tilt_deg_median": 16.412852367986844,
|
| 31 |
+
"mean_absolute_heading_error_deg": 43.2924983559655,
|
| 32 |
+
"mean_absolute_lateral_speed_mps": 0.10448182374238968,
|
| 33 |
+
"mean_absolute_yaw_rate_radps": 1.3874105215072632,
|
| 34 |
+
"num_envs": 512,
|
| 35 |
+
"survival_fraction": 0.98828125,
|
| 36 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck"
|
| 37 |
+
}
|
legacy/iteration-8749/checkpoint.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ce7707c985d84affda1befec172a8c0a72fafaa4d3476a26bec11dde9199907f
|
| 3 |
+
size 4843445
|
legacy/iteration-8749/manifest.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 4,
|
| 3 |
+
"model_api": 1,
|
| 4 |
+
"name": "microduck-running",
|
| 5 |
+
"kind": "perpetual",
|
| 6 |
+
"obs_len": 61,
|
| 7 |
+
"action_len": 14,
|
| 8 |
+
"action_scale": 1.0,
|
| 9 |
+
"entry_pose": "standing",
|
| 10 |
+
"duration_s": null,
|
| 11 |
+
"status": "sim-only",
|
| 12 |
+
"description": "Forward-running policy for the stock MicroDuck on flat ground. This is checkpoint 8749 used in the run-into-mat video, not the later faster continuation.",
|
| 13 |
+
"command": {
|
| 14 |
+
"layout": "twist(3), head_pose(4), body_pose(6)",
|
| 15 |
+
"twist": [
|
| 16 |
+
"forward velocity command in m/s; trained through 1.65, recommended simulation evaluation point 1.80; not a hard speed limit",
|
| 17 |
+
"lateral velocity; use 0 (training range was only -0.02 to 0.02 m/s)",
|
| 18 |
+
"yaw rate; use 0 (training range was only -0.05 to 0.05 rad/s)"
|
| 19 |
+
],
|
| 20 |
+
"head": "unused; zeros",
|
| 21 |
+
"body": "unused; zeros",
|
| 22 |
+
"idle": [
|
| 23 |
+
0,
|
| 24 |
+
0,
|
| 25 |
+
0
|
| 26 |
+
],
|
| 27 |
+
"exact_zero_training_fraction": 0.03
|
| 28 |
+
},
|
| 29 |
+
"robot": {
|
| 30 |
+
"model": "microduck",
|
| 31 |
+
"hw_rev": 1,
|
| 32 |
+
"servos": "14x Dynamixel XL330",
|
| 33 |
+
"control_hz": 50,
|
| 34 |
+
"hardware_modifications_required": false
|
| 35 |
+
},
|
| 36 |
+
"training": {
|
| 37 |
+
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 38 |
+
"algorithm": "PPO (rsl_rl)",
|
| 39 |
+
"repo": "Vottivott/microduck-playground",
|
| 40 |
+
"commit": "c5fcc50219fef01ac9931d0079c583ccbb29b689",
|
| 41 |
+
"upstream_base": "pollen-robotics/microduck_rl@d424a0c899f6b33cbd3daeb279913134349c0b63",
|
| 42 |
+
"run": "sweep-speed-r1",
|
| 43 |
+
"checkpoint_iteration": 8749,
|
| 44 |
+
"resumed_from": "highspeed-r6 iteration 6750",
|
| 45 |
+
"continuation_iterations": 2000,
|
| 46 |
+
"environment": {
|
| 47 |
+
"MICRODUCK_RUNNING_TARGET_MAX_SPEED": 1.65,
|
| 48 |
+
"MICRODUCK_RUNNING_SPEED_CAP": 1.8,
|
| 49 |
+
"MICRODUCK_RUNNING_ACTION_RATE_WEIGHT": -0.1,
|
| 50 |
+
"MICRODUCK_RUNNING_ENABLE_SYMMETRY": false,
|
| 51 |
+
"MICRODUCK_RUNNING_ENABLE_HEADING_FEEDBACK": false
|
| 52 |
+
},
|
| 53 |
+
"export": "scripts/export.py; observation normalizer baked into policy.onnx",
|
| 54 |
+
"source_commit": "c5fcc50219fef01ac9931d0079c583ccbb29b689",
|
| 55 |
+
"continuation_checkpoint": {
|
| 56 |
+
"path": "checkpoint.pt",
|
| 57 |
+
"sha256": "ce7707c985d84affda1befec172a8c0a72fafaa4d3476a26bec11dde9199907f",
|
| 58 |
+
"actor_exact_to_released_onnx": true,
|
| 59 |
+
"original_full_ppo_state": true
|
| 60 |
+
}
|
| 61 |
+
},
|
| 62 |
+
"eval": {
|
| 63 |
+
"sim_proxy": "mjlab / MuJoCo Warp with BAM XL330 M6 actuator model",
|
| 64 |
+
"command_speed_m_s": 1.8,
|
| 65 |
+
"num_envs": 256,
|
| 66 |
+
"duration_s": 8.0,
|
| 67 |
+
"survival_fraction": 0.9921875,
|
| 68 |
+
"mean_body_forward_speed_m_s": 1.6072514057159424,
|
| 69 |
+
"mean_initial_heading_displacement_speed_m_s": 1.3276939392089844,
|
| 70 |
+
"mean_absolute_heading_error_deg": 25.215665057096395,
|
| 71 |
+
"mean_absolute_lateral_displacement_m": 3.8727223873138428,
|
| 72 |
+
"flight_fraction": 0.6572428941726685,
|
| 73 |
+
"known_limits": "Heading drift is substantial. At a 2.00 m/s extrapolated command, mean body-forward speed was 1.6452 m/s and survival fell to 0.9336. Never tested on hardware."
|
| 74 |
+
},
|
| 75 |
+
"sim2real": {
|
| 76 |
+
"retained": [
|
| 77 |
+
"BAM XL330 M6 voltage control, back-EMF, current limiting, battery 6.5-8.2 V, and load-dependent sag",
|
| 78 |
+
"3-6 physics-step actuator delay, 0-1-step IMU delay, and one-control-step joint-velocity lag",
|
| 79 |
+
"foot friction 0.7-1.3",
|
| 80 |
+
"trunk mass/inertia +/-5%, trunk/head CoM +/-3 mm, armature +/-10%, BAM joint friction +/-10%",
|
| 81 |
+
"encoder bias +/-0.015 rad, IMU misalignment up to 6 degrees, and actor observation noise"
|
| 82 |
+
],
|
| 83 |
+
"relaxed": [
|
| 84 |
+
"flat terrain only",
|
| 85 |
+
"random push disturbances removed",
|
| 86 |
+
"non-backlash robot model",
|
| 87 |
+
"CoM/head-CoM and head/body pose-command widening curricula removed",
|
| 88 |
+
"weaker posture, angular-motion, foot-slip, and action-rate regularization; head/body pose tracking disabled",
|
| 89 |
+
"motor-gain randomization and randomized initial base tilt disabled in inherited base recipe"
|
| 90 |
+
],
|
| 91 |
+
"hardware_validated": false
|
| 92 |
+
},
|
| 93 |
+
"media": {
|
| 94 |
+
"preview": "media/preview.mp4",
|
| 95 |
+
"run_into_mat": "media/run-into-mat.mp4",
|
| 96 |
+
"run_into_mat_note": "Same policy checkpoint; obstacle, collision augmentation, camera treatment, motor cutoff, and sparks are scripted demo elements. The policy has no obstacle perception.",
|
| 97 |
+
"audio": false
|
| 98 |
+
},
|
| 99 |
+
"source_artifact_sha256": "b4e285fb3671f52c28f671bd4733a4e11fa17c21f40d25f52eaf2614f9e2e02a",
|
| 100 |
+
"artifacts": {
|
| 101 |
+
"policy_onnx_sha256": "b4e285fb3671f52c28f671bd4733a4e11fa17c21f40d25f52eaf2614f9e2e02a"
|
| 102 |
+
}
|
| 103 |
+
}
|
legacy/iteration-8749/media/preview.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:69ce8b5f8855ac76d2413d90b176e770d22d22a72766dcc2dacf34ccbded58d6
|
| 3 |
+
size 3133555
|
legacy/iteration-8749/policy.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b4e285fb3671f52c28f671bd4733a4e11fa17c21f40d25f52eaf2614f9e2e02a
|
| 3 |
+
size 793819
|
lineage/iteration-11748/checkpoint.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1e79df200d8bb19b139ee1e74e6910c62434d57e792f632b66b10a73266894eb
|
| 3 |
+
size 4843527
|
lineage/iteration-11748/evaluations.tar.gz
ADDED
|
Binary file (12.7 kB). View file
|
|
|
lineage/iteration-11748/manifest.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"checkpoint_iteration": 11748,
|
| 3 |
+
"role": "speed-focused parent of the robustified default",
|
| 4 |
+
"command_speed_m_s": 2.2,
|
| 5 |
+
"mean_body_forward_speed_m_s": 1.6873,
|
| 6 |
+
"survival_fraction": 0.9883,
|
| 7 |
+
"num_envs": 1024,
|
| 8 |
+
"duration_s": 10.0,
|
| 9 |
+
"policy_onnx_sha256": "ccd6757b53b591081fdf75dd3effe9a5743f5fac0c2a513fa48dfd5a32231b65",
|
| 10 |
+
"checkpoint_pt_sha256": "1e79df200d8bb19b139ee1e74e6910c62434d57e792f632b66b10a73266894eb",
|
| 11 |
+
"preview_mp4_sha256": "256ad675984d544204076986a7e09ea3a66c6070ec15ffb52921212e685e898c",
|
| 12 |
+
"evaluations_tar_sha256": "a81a468c789b890f935e14f478f992c632b01eeb25179da7d3ba252d663625be"
|
| 13 |
+
}
|
lineage/iteration-11748/policy.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ccd6757b53b591081fdf75dd3effe9a5743f5fac0c2a513fa48dfd5a32231b65
|
| 3 |
+
size 793831
|
lineage/iteration-11748/preview.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:256ad675984d544204076986a7e09ea3a66c6070ec15ffb52921212e685e898c
|
| 3 |
+
size 3244149
|
manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
{
|
| 2 |
-
"schema_version":
|
| 3 |
"model_api": 1,
|
| 4 |
"name": "microduck-running",
|
| 5 |
"kind": "perpetual",
|
|
@@ -8,22 +8,18 @@
|
|
| 8 |
"action_scale": 1.0,
|
| 9 |
"entry_pose": "standing",
|
| 10 |
"duration_s": null,
|
| 11 |
-
"status": "
|
| 12 |
-
"description": "
|
| 13 |
"command": {
|
| 14 |
"layout": "twist(3), head_pose(4), body_pose(6)",
|
| 15 |
"twist": [
|
| 16 |
-
"forward velocity command in m/s; trained through
|
| 17 |
"lateral velocity; use 0 (training range was only -0.02 to 0.02 m/s)",
|
| 18 |
"yaw rate; use 0 (training range was only -0.05 to 0.05 rad/s)"
|
| 19 |
],
|
| 20 |
"head": "unused; zeros",
|
| 21 |
"body": "unused; zeros",
|
| 22 |
-
"idle": [
|
| 23 |
-
0,
|
| 24 |
-
0,
|
| 25 |
-
0
|
| 26 |
-
],
|
| 27 |
"exact_zero_training_fraction": 0.03
|
| 28 |
},
|
| 29 |
"robot": {
|
|
@@ -37,67 +33,91 @@
|
|
| 37 |
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 38 |
"algorithm": "PPO (rsl_rl)",
|
| 39 |
"repo": "Vottivott/microduck-playground",
|
| 40 |
-
"commit": "
|
| 41 |
"upstream_base": "pollen-robotics/microduck_rl@d424a0c899f6b33cbd3daeb279913134349c0b63",
|
| 42 |
-
"
|
| 43 |
-
"
|
| 44 |
-
"
|
| 45 |
-
"
|
| 46 |
-
"
|
| 47 |
-
"MICRODUCK_RUNNING_TARGET_MAX_SPEED":
|
| 48 |
-
"MICRODUCK_RUNNING_SPEED_CAP":
|
| 49 |
"MICRODUCK_RUNNING_ACTION_RATE_WEIGHT": -0.1,
|
|
|
|
|
|
|
| 50 |
"MICRODUCK_RUNNING_ENABLE_SYMMETRY": false,
|
| 51 |
-
"MICRODUCK_RUNNING_ENABLE_HEADING_FEEDBACK": false
|
|
|
|
|
|
|
| 52 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
"export": "scripts/export.py; observation normalizer baked into policy.onnx",
|
| 54 |
-
"source_commit": "c5fcc50219fef01ac9931d0079c583ccbb29b689",
|
| 55 |
"continuation_checkpoint": {
|
| 56 |
"path": "checkpoint.pt",
|
| 57 |
-
"sha256": "
|
| 58 |
"actor_exact_to_released_onnx": true,
|
| 59 |
"original_full_ppo_state": true
|
| 60 |
}
|
| 61 |
},
|
| 62 |
"eval": {
|
| 63 |
"sim_proxy": "mjlab / MuJoCo Warp with BAM XL330 M6 actuator model",
|
| 64 |
-
"command_speed_m_s":
|
| 65 |
-
"
|
| 66 |
-
"
|
| 67 |
-
"
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
},
|
| 75 |
"sim2real": {
|
| 76 |
"retained": [
|
| 77 |
"BAM XL330 M6 voltage control, back-EMF, current limiting, battery 6.5-8.2 V, and load-dependent sag",
|
| 78 |
"3-6 physics-step actuator delay, 0-1-step IMU delay, and one-control-step joint-velocity lag",
|
| 79 |
"foot friction 0.7-1.3",
|
| 80 |
-
"trunk mass/inertia +/-5%, trunk/head CoM +/-
|
|
|
|
| 81 |
"encoder bias +/-0.015 rad, IMU misalignment up to 6 degrees, and actor observation noise"
|
| 82 |
],
|
| 83 |
"relaxed": [
|
| 84 |
"flat terrain only",
|
| 85 |
-
"
|
| 86 |
-
"
|
| 87 |
-
"CoM/head-CoM and head/body pose-command widening curricula removed",
|
| 88 |
"weaker posture, angular-motion, foot-slip, and action-rate regularization; head/body pose tracking disabled",
|
| 89 |
-
"motor-gain randomization
|
| 90 |
],
|
| 91 |
"hardware_validated": false
|
| 92 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
"media": {
|
| 94 |
"preview": "media/preview.mp4",
|
| 95 |
"run_into_mat": "media/run-into-mat.mp4",
|
| 96 |
-
"
|
|
|
|
| 97 |
"audio": false
|
| 98 |
},
|
| 99 |
-
"source_artifact_sha256": "
|
| 100 |
"artifacts": {
|
| 101 |
-
"policy_onnx_sha256": "
|
|
|
|
|
|
|
| 102 |
}
|
| 103 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"schema_version": 5,
|
| 3 |
"model_api": 1,
|
| 4 |
"name": "microduck-running",
|
| 5 |
"kind": "perpetual",
|
|
|
|
| 8 |
"action_scale": 1.0,
|
| 9 |
"entry_pose": "standing",
|
| 10 |
"duration_s": null,
|
| 11 |
+
"status": "simulation-only-hardware-candidate",
|
| 12 |
+
"description": "Robustified iteration-12195 forward-running policy for the stock MicroDuck on flat ground. It is not hardware validated.",
|
| 13 |
"command": {
|
| 14 |
"layout": "twist(3), head_pose(4), body_pose(6)",
|
| 15 |
"twist": [
|
| 16 |
+
"forward velocity command in m/s; curriculum trained through 2.2; evaluated at 2.2; not a hard speed limit",
|
| 17 |
"lateral velocity; use 0 (training range was only -0.02 to 0.02 m/s)",
|
| 18 |
"yaw rate; use 0 (training range was only -0.05 to 0.05 rad/s)"
|
| 19 |
],
|
| 20 |
"head": "unused; zeros",
|
| 21 |
"body": "unused; zeros",
|
| 22 |
+
"idle": [0, 0, 0],
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
"exact_zero_training_fraction": 0.03
|
| 24 |
},
|
| 25 |
"robot": {
|
|
|
|
| 33 |
"task_id": "Mjlab-Running-Flat-MicroDuck",
|
| 34 |
"algorithm": "PPO (rsl_rl)",
|
| 35 |
"repo": "Vottivott/microduck-playground",
|
| 36 |
+
"commit": "828d950134e29a8d04cbb51720a22c8729047fb7",
|
| 37 |
"upstream_base": "pollen-robotics/microduck_rl@d424a0c899f6b33cbd3daeb279913134349c0b63",
|
| 38 |
+
"checkpoint_iteration": 12195,
|
| 39 |
+
"resumed_from": "iteration 11748",
|
| 40 |
+
"num_envs": 4096,
|
| 41 |
+
"seed": 42,
|
| 42 |
+
"common_environment": {
|
| 43 |
+
"MICRODUCK_RUNNING_TARGET_MAX_SPEED": 2.2,
|
| 44 |
+
"MICRODUCK_RUNNING_SPEED_CAP": 2.4,
|
| 45 |
"MICRODUCK_RUNNING_ACTION_RATE_WEIGHT": -0.1,
|
| 46 |
+
"MICRODUCK_RUNNING_HIGH_SPEED_STAGE_INTERVAL": 750,
|
| 47 |
+
"MICRODUCK_RUNNING_FORWARD_PROGRESS_WEIGHT": 5.0,
|
| 48 |
"MICRODUCK_RUNNING_ENABLE_SYMMETRY": false,
|
| 49 |
+
"MICRODUCK_RUNNING_ENABLE_HEADING_FEEDBACK": false,
|
| 50 |
+
"foot_friction_range": [0.7, 1.3],
|
| 51 |
+
"push_interval_s": [3.0, 6.0]
|
| 52 |
},
|
| 53 |
+
"robustification_stages": [
|
| 54 |
+
{"updates": 100, "push_m_s": 0.03, "trunk_com_m": 0.003, "head_com_m": 0.003, "initial_tilt_deg": 1.0},
|
| 55 |
+
{"updates": 150, "push_m_s": 0.06, "trunk_com_m": 0.005, "head_com_m": 0.005, "initial_tilt_deg": 1.5},
|
| 56 |
+
{"updates": 200, "push_m_s": 0.1, "trunk_com_m": 0.008, "head_com_m": 0.006, "initial_tilt_deg": 2.0}
|
| 57 |
+
],
|
| 58 |
"export": "scripts/export.py; observation normalizer baked into policy.onnx",
|
|
|
|
| 59 |
"continuation_checkpoint": {
|
| 60 |
"path": "checkpoint.pt",
|
| 61 |
+
"sha256": "052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973",
|
| 62 |
"actor_exact_to_released_onnx": true,
|
| 63 |
"original_full_ppo_state": true
|
| 64 |
}
|
| 65 |
},
|
| 66 |
"eval": {
|
| 67 |
"sim_proxy": "mjlab / MuJoCo Warp with BAM XL330 M6 actuator model",
|
| 68 |
+
"command_speed_m_s": 2.2,
|
| 69 |
+
"duration_s": 10.0,
|
| 70 |
+
"warmup_s": 1.0,
|
| 71 |
+
"results": {
|
| 72 |
+
"nominal_plain": {"num_envs": 512, "speed_m_s": 1.6510932445526123, "survival": 0.9921875},
|
| 73 |
+
"stress_plain": {"num_envs": 512, "speed_m_s": 1.6349653005599976, "survival": 0.98828125},
|
| 74 |
+
"nominal_backlash": {"num_envs": 256, "speed_m_s": 1.6362495422363281, "survival": 0.98828125},
|
| 75 |
+
"stress_backlash": {"num_envs": 256, "speed_m_s": 1.6121970415115356, "survival": 0.984375},
|
| 76 |
+
"high_grip_stress": {"num_envs": 512, "speed_m_s": 1.6424154043197632, "survival": 0.966796875}
|
| 77 |
+
},
|
| 78 |
+
"stress": {"push_m_s": 0.1, "trunk_com_m": 0.01, "head_com_m": 0.006, "initial_tilt_deg": 2.0},
|
| 79 |
+
"known_limits": "Heading and lateral drift remain substantial. Never tested on hardware."
|
| 80 |
+
},
|
| 81 |
+
"onnx_contract": {
|
| 82 |
+
"observation_normalizer_embedded": true,
|
| 83 |
+
"training_action_clipping": false,
|
| 84 |
+
"onnx_output_clip": false,
|
| 85 |
+
"checkpoint_parity_max_abs_error": 0.00000762939453125
|
| 86 |
},
|
| 87 |
"sim2real": {
|
| 88 |
"retained": [
|
| 89 |
"BAM XL330 M6 voltage control, back-EMF, current limiting, battery 6.5-8.2 V, and load-dependent sag",
|
| 90 |
"3-6 physics-step actuator delay, 0-1-step IMU delay, and one-control-step joint-velocity lag",
|
| 91 |
"foot friction 0.7-1.3",
|
| 92 |
+
"trunk mass/inertia +/-5%, trunk CoM +/-8 mm, head CoM +/-6 mm, armature +/-10%, and BAM joint friction +/-10% in the final training stage",
|
| 93 |
+
"planar velocity pushes up to +/-0.10 m/s and initial pitch/roll up to +/-2 degrees in the final training stage",
|
| 94 |
"encoder bias +/-0.015 rad, IMU misalignment up to 6 degrees, and actor observation noise"
|
| 95 |
],
|
| 96 |
"relaxed": [
|
| 97 |
"flat terrain only",
|
| 98 |
+
"trained on the ordinary non-backlash robot model; backlash is cross-evaluation only",
|
| 99 |
+
"head/body pose-command widening curricula removed",
|
|
|
|
| 100 |
"weaker posture, angular-motion, foot-slip, and action-rate regularization; head/body pose tracking disabled",
|
| 101 |
+
"motor-gain randomization remains disabled in the inherited recipe"
|
| 102 |
],
|
| 103 |
"hardware_validated": false
|
| 104 |
},
|
| 105 |
+
"versions": {
|
| 106 |
+
"default": {"iteration": 12195, "policy": "policy.onnx", "checkpoint": "checkpoint.pt", "preview": "media/preview.mp4"},
|
| 107 |
+
"speed_parent": {"iteration": 11748, "directory": "lineage/iteration-11748"},
|
| 108 |
+
"legacy_mat_policy": {"iteration": 8749, "directory": "legacy/iteration-8749"}
|
| 109 |
+
},
|
| 110 |
"media": {
|
| 111 |
"preview": "media/preview.mp4",
|
| 112 |
"run_into_mat": "media/run-into-mat.mp4",
|
| 113 |
+
"run_into_mat_policy_iteration": 8749,
|
| 114 |
+
"run_into_mat_note": "The mat, collision augmentation, camera treatment, motor cutoff, and sparks are scripted demo elements. The policy has no obstacle perception.",
|
| 115 |
"audio": false
|
| 116 |
},
|
| 117 |
+
"source_artifact_sha256": "007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb",
|
| 118 |
"artifacts": {
|
| 119 |
+
"policy_onnx_sha256": "007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb",
|
| 120 |
+
"checkpoint_pt_sha256": "052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973",
|
| 121 |
+
"preview_mp4_sha256": "942f0802cc0c6795769bd99a9991f866fee682890ea9ea6d71077f7d4eb5492b"
|
| 122 |
}
|
| 123 |
}
|
media/preview.mp4
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:942f0802cc0c6795769bd99a9991f866fee682890ea9ea6d71077f7d4eb5492b
|
| 3 |
+
size 3487586
|
policy.onnx
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb
|
| 3 |
+
size 793744
|