Instructions to use juicenv/duckwing-v90-laguna with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Microduck
How to use juicenv/duckwing-v90-laguna 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 juicenv/duckwing-v90-laguna
- Notebooks
- Google Colab
- Kaggle
DuckWing V90 Laguna — racing research bundle
Racing validation passed; combined mode-transition validation failed. V90 Laguna adds a learned racing command controller to the unchanged V89 braking-control actor and published 180°, 360° and 720° trick controller. It is a research bundle. V89 remains the recommended general-purpose release.
This repository mirrors microduck-lab at GitHub commit 8cd540bf. release-sync.json records the source commit and file hashes. This card reports published evidence, not the live status of private training jobs.
Measured Laguna improvement
| Evaluation cohort | Earlier course driver over V89 | V90 Laguna |
|---|---|---|
| Original: clean laps | 15/64 | 55/64 |
| Original: fastest clean lap | 5:49.06 | 5:44.00 |
| Fresh −3° initial heading: clean laps | 12/48 | 42/48 |
| Fresh −3° initial heading: fastest clean lap | 5:47.58 | 5:39.24 |
| Fresh +3° initial heading: clean laps | 11/48 | 42/48 |
| Fresh +3° initial heading: fastest clean lap | 5:51.84 | 5:40.26 |
Fresh completion rose from 25.0% and 22.9% to 87.5% each. Off-track failures fell from 1 to 0 at −3° and from 2 to 1 at +3°; all four fresh cohorts had zero body contacts. These compare course controllers over the same V89 base, not V89 manual driving or Pollen on Laguna. No Pollen Laguna comparison was run.
The fastest fresh-validation lap was 5:39.24. A separate later cohort re-evaluated the retained V90 model at 60/64 clean laps, fastest 5:35.68. The subsequent continuation regressed to 44/64 and 5:43.14; its weights were rejected and are excluded. The 5:35.68 lap is a separate-cohort observation, not the paired original-comparison result. See evaluation-summary.json.
Course and qualification limits
The course is an approximately 59.84 m flat robot-scale layout, 0.70 m wide, with 200 ordered checkpoints and a 360-second timeout. It does not reproduce Corkscrew elevation or the full-size Laguna Seca circuit. Clean success requires ordered lap completion without off-track, body-contact or excessive-tilt termination. See course geometry and course diagram.
Racing was evaluated in GPU MuJoCo-Warp under 200 Hz physics, 50 Hz low-level control, wheel frictionloss=0.003 and the motor torque limit equivalent to 1.75 A. Published standalone V89 driving/tricks use CPU MuJoCo. One trained seed and multiple simulated worlds do not establish cross-seed robustness. Results are simulation-only; physical validation and the 5 mph target remain open. This release establishes no new general-purpose speed, braking or agility record.
The combined skate → trick → race → skate GPU behavior test passed 10/48, although command-mode handoffs were correct. It covered open-floor transitions, not arbitrary mid-corner track rejoining. Keeping the component weights does not prove reliable transitions. Automatic trick-to-race recovery and arbitrary on-track trick activation are not qualified; per-case failures remain in the evaluation summary.
Distributed components
- policy.onnx: alias of the unchanged V89 base actor.
- releases/v90-laguna/: actor-only racing parameters, mode/trick controllers, course, tests, measured evidence and checksums.
- releases/v89/ and releases/v89-tricks-2/: preserved base and standalone-trick releases.
- tools/evaluation_policy.py: V89 observation-history adapter.
The base actor SHA-256 is 09663852ae1db90fdcf321dedc4e39810eb65ffc6998df3cd8fc34d3231f84f7, byte-identical to V89 Tricks 2. The included trick controller is also unchanged. Standalone 180°, 360° and 720° CPU tests each passed 16/16 trials in both directions; those results are component evidence, not successful combined racing transitions. Watch the labeled simulation trick compilation, or read the standalone trick contract.
V89's published braking and Pollen comparison remain evidence for the unchanged base, not new V90 measurements. See V89 metrics and Pollen comparison provenance.
Inference integration
Requires Python, NumPy and an ONNX Runtime appropriate to the caller. Verify root/release SHA256SUMS, then run:
python3 releases/v90-laguna/test_adapter.py
Import Controller from controller.py. It starts in skate, passing through 13 user commands. set_mode('race') selects route control; start_trick(heading, degrees=180, direction=1) selects a trick. Cancellation is explicit. Treat automatic combined-mode operation as experimental because its behavior gate failed.
The caller builds V89's float32 [1,15616] input: 256 frames of 61 observations, in term-major order, oldest to newest within each term (3,3,14,14,14,3,4,6). Repeat the first frame on reset, update once at 50 Hz and preserve history through modes. Single-frame consumers require the history adapter. Controllers supply commands to the observation builder, not direct joint positions.
Evaluate route control at 10 Hz and hold its commands across the 50 Hz base-policy ticks. The 14 route observations are: the next three checkpoint offsets in body-frame XY divided by 3 (six values), body-frame forward/lateral velocity, body yaw rate, three body-frame gravity components, checkpoint index divided by point count, and nearest-polyline distance in metres. The caller supplies localization, route state and guidance from course.json; this is not camera-based navigation.
The racing actor is a 14→64→64→2 network with tanh hidden layers. Its bounded residual changes forward/yaw guidance commands. The exported NumPy actor matched Torch to a maximum absolute error of 3.73×10⁻⁸ over 100 sampled observations. Full guidance formulas and caller requirements are in the release integration notes.
Training, licensing and compute
Ray scheduled GPU simulation and PPO training. The racing controller used 12 full-lap rounds with 64 worlds, 3,600 driver steps per attempt, completion/time reward, potential shaping and a separate critic. These changes were applied together; their individual effects were not isolated. Failed apex/trail-braking experiments and the rejected continuation are excluded. Public artifacts contain inference parameters only, without critic/optimizer state, credentials or private endpoints. See manifest.json.
Ray compute places work by resources and validated capabilities, including eligible head-node compute. Optional MinIO/S3 stores private artifacts by SHA-256 with verified downloads. Follow the privacy guide. Infrastructure validation does not qualify robot behavior.
Code and model licensing follow Apache-2.0. The course is adapted from AlexJ's public-domain Laguna Seca layout; width and robot scale are simulation choices. The canonical GitHub workbench and research ledger retain the full published provenance.
When using compute/rayctl directly from an HF download, run chmod +x compute/rayctl first; the HF upload API preserves its bytes but may not retain Git executable mode.
- Downloads last month
- 40