Vision-Only Autonomy / 2026
Autonomous Drone Racer
A recorded simulator flight, with the engineering decisions behind it.
Active learning project: built heavily with AI assistance, V2 incomplete
My contribution
Developing an autonomous drone-racing entry, using simulation runs and flight-log analysis to investigate perception, estimation, and control.
Virtual Qualifier flight replay
Recorded simulation / June 3, 2026A side-profile reconstruction from the included trajectory. Position samples drive the animation; the displayed speed is an estimate. This is not a live flight.
Evidence & scope
How it was built
Built heavily with AI assistance. This is an active learning project, with incomplete work called out below.
Available to inspect
A replay of the included 411-point trajectory and six gate positions. Dataset metadata identifies the June 3, 2026 Virtual Qualifier log and its reported 37.192-second result.
Current limits
This is a simulator replay, not a physical flight or proof of vision-only V2 completion. The simplified replay derives timing and speed from downsampled positions; full-rate telemetry is not included. Official qualification remains pending.
The spark
The AI Grand Prix is a real autonomous drone racing league: standardized drones, unknown tracks, and a hard rule that the aircraft flies itself with no connectivity. I entered because GPS-denied navigation is the purest version of a problem I've worked on my whole career: how do you know where you are, and where to go, when the infrastructure you'd normally rely on is gone?
The problem
The AI Grand Prix racing league requires fully autonomous drones to thread race gates at speed with no GPS, no absolute position, and no human input: one camera and an IMU.
- Who it affects
- A competition entry, so the affected party is me and the leaderboard. The vision round forbids absolute position outright: monocular camera, IMU, and motor telemetry only.
- Previous workflow
- Most approaches lean on simulator-perfect state. The ruleset that matters removes it: no pose, no GPS, no map, and any external connectivity is a disqualification.
- What it costs
- Naive approaches crash or get disqualified. One early run was DQ'd for arming too early; another sat stuck 38 degrees nose-down for 19 seconds. Every failure got logged, diagnosed from telemetry, and encoded back into the stack.
The solution
Built the full autonomy stack: classical computer-vision gate detection, state estimation, spline trajectory planning, a 90 Hz geometric flight controller over MAVLink, and a reinforcement-learning agent for the simulation phase.
Outcome
Flew a verified clean Virtual Qualifier run: 6/6 gates in 00:37.192, official qualification pending. The SAC agent solved the mock simulator with 10/10 finishes on random tracks across 25+ documented training runs.
What I learned
Negative results are deliverables. Proving that forward velocity can't be recovered from monocular vision below 1 m/s at race range saved weeks of tuning a dead end and reshaped the design. And competition rules are requirements engineering: one early-start disqualification became DQ-safe arming logic baked into the code.
Technical decisions
- Python + NumPy/SciPy
- The whole stack, ~14,600 lines: perception, state estimation, planning, and control
- OpenCV
- HSV gate detection, solvePnP pose recovery, optical flow, and subpixel corner refinement
- stable-baselines3 (SAC)
- Soft actor-critic solved the racing task where PPO plateaued; the comparison is documented run by run
- pymavlink
- 90 Hz SET_ATTITUDE_TARGET control loop against the official competition simulator
- Gymnasium + custom 6-DOF simulator
- Purpose-built mock sim and RL environment for fast iteration before the official binary dropped
The hard part
Knowing how fast you're moving when nothing tells you where you are. The drone gets one 640x360 camera and an IMU; integrating acceleration drifts within seconds, and optical flow is contaminated by the aircraft's own rotation. Built an estimation pipeline that de-rotates optical flow with an exact Rodrigues homography (cutting residual flow by roughly 75%), anchors velocity against detected gates, and coasts on a thrust model between sightings. Just as important was disproving a too-good result: a headline velocity-accuracy number turned out to be cross-validation leakage, confirmed by three independent reviews before it could mislead the architecture.
Next steps
- Vision-only Virtual Qualifier 2 run on the position-free architecture
- Sim-to-real transfer to the standardized physical competition drone
- Public engineering writeup with the 3D race replay viewer