Gate detector
YOLO11n · 4-corner pose
Trained on the synthetic gates dataset with corner keypoint labels. Inference well under budget.
- weights
- runs/detect/apex_yolo11n/weights/best.pt
- size
- 5.3 MB · 150 epochs
- trained
- 2026-05-17
Virtual Qualifier 1 · Status
AIGP launches VQ1 at the end of next week (week of May 25). Detector trained, PnP wired, PID tuned. Sim adapter is the last external dependency — it ships with the AIGP package.
Late next week
week of May 25
T − 24h
before launch
8 min
per attempt · unlimited tries
< 50 ms
YOLO11n on RTX 5080
01 · Stack
YOLO11n · 4-corner pose
Trained on the synthetic gates dataset with corner keypoint labels. Inference well under budget.
4 corners → SE(3)
SOLVEPNP_IPPE_SQUARE on known 1.5 m gate geometry — returns gate center in camera frame.
Heading · Altitude · Pitch
Conservative gains tuned for VQ1 completion. 30-frame lost-detection fallback → search behavior.
UDP:5600 · MAVSDK telemetry
Schemas defined per VADR-TS-002. StubSimClient raises NotImplementedError — swap once the official adapter drops.
vq1_completion_pilot.py
Detector → PnP → PID closed loop. CLI flags: --detector --intrinsics --dry-run.
PySide6 · overnight pipeline
Native desktop monitor: NVML telemetry, phase status, live loss curves. Spawns detached overnight trainer.
02 · Sequence
Roster freezes 24 h before launch. No changes during the qualifier phase. Physical Qualifier teams get another window later.
Validate imports, weights paths, PnP geometry, and PID init without the sim.
python race/vq1_completion_pilot.py --dry-run
Re-benchmark on held-out synthetic set; eyeball val_batch0_pred.jpg.
python race/benchmark_models.py
Replace StubSimClient with the real adapter. Schemas pre-wired — estimated 2–4 hours once the binary lands.
Closed-loop run against AIGP sim. Log all attempts; iterate gains on whatever fails first.
Validate manifest and submission frame format before final upload.
python submit_check.py
03 · Unknowns
VADR-TS-002 pins most of the spec, but three items aren't real until the binary arrives.
VADR-TS-002 enumerates fields (attitude quaternion, body rates, accel, sim time). Real packet ordering, units, and rate need confirmation on first connect.
Likely 100–500 Hz. PID is fine across that range, but the search-mode fallback timer is currently frame-indexed — re-tune if the sim ticks faster than vision.
Unknown whether AIGP wants a Docker image, Python entry-point, or a standalone executable. Keep vq1_completion_pilot.py self-contained either way.
04 · Reference
The complete data contract between the AIGP sim and the pilot. What gets sent, in which direction, in what shape. Everything below is fixed by VADR-TS-002 except where marked otherwise.
Three independent UDP sockets on loopback. The pilot is a normal user-space process that can be killed and restarted without touching the sim — no shared memory, no privileged callbacks.
Wall-clock time flows top to bottom. Telemetry streams continuously; vision drives the control output. One frame in, one control packet out.
JPEG-encoded 640×360 RGB frame over UDP:5600 at ≈30 Hz. Below: an annotated decode showing detector output, principal point, and the 20° tilt offset.
Best-guess wire layout: 48 bytes, little-endian, four fields. VADR-TS-002 fixes the field set; byte order confirmed on first recvfrom().
Three frames. PnP measures in the camera frame; we transform to body, combine with telemetry, then issue body-frame commands. World frame is conceptual — no absolute position in VQ1.
Max thrust is roughly 2·m·g — hover sits at throttle = 0.55, not 0.5. A PID biased around 0.5 will slowly sink. Set the hover offset, add the controller delta on top.
≈17 ms typical · 50 ms hard cap. Vision dominates; PnP and PID are nearly free. Headroom absorbs GPU contention and logging jitter.
Two states. TRACK is the happy path. SEARCH is a graceful fallback that buys ~1 second of fresh observation angles when detection fails.