Instructions to use AdsumSOK/microduck-bow with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use AdsumSOK/microduck-bow with Microduck:
# Replace SLOT with the slot specified in the model card (walk, stand, sitstand, ground_pick, kick_left, kick_right, roulade). sudo robotctl policy load SLOT AdsumSOK/microduck-bow
- Notebooks
- Google Colab
- Kaggle
bow v7: révérence, phase 10 s, geste 6.1 s
Browse files- README.md +40 -0
- manifest.json +57 -0
- policy.onnx +3 -0
README.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
tags: [microduck, policy, bow]
|
| 4 |
+
---
|
| 5 |
+
|
| 6 |
+
# microduck-bow
|
| 7 |
+
|
| 8 |
+
Révérence pour le Microduck (Pollen Robotics). Politique épisodique pilotée en phase (cycle 10 s, geste 6.1 s, coupure à 7 s),
|
| 9 |
+
entraînée avec `pollen-robotics/microduck_rl` (tâche maison `Mjlab-Bow-Flat-MicroDuck`).
|
| 10 |
+
|
| 11 |
+
Geste : descente du bec jusqu'au sol, contact léger, relevé de 2 cm, tête à 85° à gauche et
|
| 12 |
+
retour, plié des genoux, remontée.
|
| 13 |
+
|
| 14 |
+
## Installation sur le robot
|
| 15 |
+
|
| 16 |
+
Politique en encodage `phase` : elle se charge dans le slot `ground_pick` (le bouton du ground
|
| 17 |
+
pick la déclenche), pas comme skill (`policy add` refuse les encodages non constants).
|
| 18 |
+
|
| 19 |
+
```
|
| 20 |
+
sudo robotctl policy load ground_pick <user>/microduck-bow
|
| 21 |
+
```
|
| 22 |
+
|
| 23 |
+
Retour au ground pick officiel : `sudo robotctl policy reset ground_pick`.
|
| 24 |
+
|
| 25 |
+
Le daemon pilote la phase avec la période de `robotd.toml` et rend la main à φ = 0.7 (valeur du
|
| 26 |
+
set officiel, non réglable). La politique est entraînée sur un cycle de 10 s dont le geste occupe
|
| 27 |
+
les 6.1 premières secondes : avec `ground_pick_period = 10.0`, la coupure tombe à 7 s, après la
|
| 28 |
+
remontée.
|
| 29 |
+
|
| 30 |
+
```
|
| 31 |
+
sudo robotctl policy load ground_pick <user>/microduck-bow
|
| 32 |
+
# puis dans /etc/robot/robotd.toml : ground_pick_period = 10.0
|
| 33 |
+
```
|
| 34 |
+
|
| 35 |
+
## Répétition en simulation
|
| 36 |
+
|
| 37 |
+
```
|
| 38 |
+
uv run scripts/infer_policy.py --walking alpha_walking.onnx --standing alpha_stand.onnx \
|
| 39 |
+
--ground-pick policy.onnx --ground-pick-period 10.0 --ground-pick-end-phase 0.7 --new-cmd-obs
|
| 40 |
+
```
|
manifest.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema_version": 2,
|
| 3 |
+
"model_api": 1,
|
| 4 |
+
"obs_len": 61,
|
| 5 |
+
"action_len": 14,
|
| 6 |
+
"robot": {
|
| 7 |
+
"model": "microduck",
|
| 8 |
+
"hw_rev": 1,
|
| 9 |
+
"servos": "xl330",
|
| 10 |
+
"control_hz": 50
|
| 11 |
+
},
|
| 12 |
+
"name": "bow",
|
| 13 |
+
"kind": "episodic",
|
| 14 |
+
"duration_s": 7.0,
|
| 15 |
+
"chain": false,
|
| 16 |
+
"entry_pose": "standing",
|
| 17 |
+
"slot": "ground_pick",
|
| 18 |
+
"description": "Révérence : descend le bec jusqu'au sol (contact léger ~1.4 N), le décolle de 2 cm, tourne la tête de ~84° à gauche et revient, plie les genoux (~60°), puis se relève. Geste de 6.1 s sur un cycle de phase de 10 s ; le daemon rend la main à φ = 0.7 (7 s), après la remontée. À charger dans le slot ground_pick avec ground_pick_period = 10.0 dans robotd.toml, pas comme skill.",
|
| 19 |
+
"command": {
|
| 20 |
+
"encoding": "phase",
|
| 21 |
+
"slots": "twist.vx,twist.vy",
|
| 22 |
+
"period_s": 10.0,
|
| 23 |
+
"end_phase": 0.7,
|
| 24 |
+
"idle": [
|
| 25 |
+
0.0,
|
| 26 |
+
0.0,
|
| 27 |
+
0.0
|
| 28 |
+
],
|
| 29 |
+
"twist": "[cos 2πφ, sin 2πφ, 0], φ de 0 à 1 sur 10 s (segments : descente 0-0.15, contact 0.15-0.18, relevé 0.18-0.21, rotation 0.21-0.31, retour 0.31-0.41, plié 0.41-0.46, remontée 0.46-0.61, repos 0.61-1.0 ; coupure daemon à 0.7)",
|
| 30 |
+
"head": "unused (zeros)",
|
| 31 |
+
"body": "unused (zeros)"
|
| 32 |
+
},
|
| 33 |
+
"training": {
|
| 34 |
+
"task_id": "Mjlab-Bow-Flat-MicroDuck",
|
| 35 |
+
"repo": "pollen-robotics/microduck_rl",
|
| 36 |
+
"commit": "b02fdea49",
|
| 37 |
+
"branch": "develop",
|
| 38 |
+
"dirty": true,
|
| 39 |
+
"run": "logs/rsl_rl/bow/2026-10-27_17-35-33_v7_resume (wandb offline, local)",
|
| 40 |
+
"checkpoint": 748,
|
| 41 |
+
"source_file": "model_748.pt",
|
| 42 |
+
"exported": "2026-10-27T16:50:00Z",
|
| 43 |
+
"lineage": "v6_resume/model_748 -> v7_period10 (warm start, période 10 s) -> v7_resume (250 it., yaw_std 0.12)"
|
| 44 |
+
},
|
| 45 |
+
"eval": {
|
| 46 |
+
"sim": "mjlab 1.3.0 / MuJoCo Warp, BAM XL330, scripts/bow_eval.py, 256 envs x 20 s, sans poussées",
|
| 47 |
+
"falls": "0 %",
|
| 48 |
+
"beak_contact": "100 % des cycles, force moyenne 1.46 N (bande 0.3-2 N 94 % du temps)",
|
| 49 |
+
"head_yaw_max_deg": 83.8,
|
| 50 |
+
"knees_end_of_crouch_deg": [
|
| 51 |
+
60.7,
|
| 52 |
+
-59.0
|
| 53 |
+
],
|
| 54 |
+
"trunk_tilt_at_contact_deg": 36,
|
| 55 |
+
"note": "lignée v1 -> v2 (plafond force, pieds stricts, cible glissante) -> v4 (bande de force) -> v5 (sans second contact) -> v6 (plié des genoux) -> v7 (période 10 s pour la coupure du daemon à 0.7)"
|
| 56 |
+
}
|
| 57 |
+
}
|
policy.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:71e606f1ede3cf8a7b4070e0228947aab93c35f1c836321eb0386b7bb8b0c497
|
| 3 |
+
size 793739
|