Cellular VTOL drone¶
A fixed-wing VTOL (ArduPlane QuadPlane) that flies autonomous missions only, supervised over 4G/LTE from a password-protected browser app. Live video and telemetry come down; no manual control goes up. A local ELRS radio can always take over (ADR-0008).
flowchart LR
B["Browser console<br/>(React, MapLibre)"] -- "WebRTC<br/>telemetry · control · video" --- A["Drone agent<br/>(Go + Pion, Orange Pi 5)"]
A -- "MAVLink2 (UART)" --- FC["ArduPlane QuadPlane<br/>flight controller"]
RC["ELRS radio<br/>(always wins)"] --> FC
B -. "login + signalling" .- S["VPS<br/>auth · signalling · TURN"]
A -. "signalling" .- S
Where to start¶
- Status: what's done, what's next, and what's waiting on hardware, with progress counted straight from the plan.
- Progress log: what each working session delivered, by date.
- Plan: the phased checklist. The one place items get ticked off.
- Decisions: the ADRs: why things are the way they are.
The rules that shape everything¶
- The aircraft is safe with no link. The whole mission lives on the flight controller; losing LTE, the browser or the companion computer never changes the flight (ADR-0020).
- ArduPilot is the reference. Every mission item, command and telemetry field maps onto ArduPlane / MAVLink2 (mapping, ADR-0017). Where the mock and SITL disagree, SITL is right.
- Frontend first, against a mock. The UI only talks to the
VehicleLinkinterface, so the same screens run on the in-browser mock, SITL and the real drone (frontend contract, ADR-0009). - Software in the simulator before hardware, hardware on the bench before flying.
Running things¶
| What | Command |
|---|---|
| Web console against the mock | cd web && npm run dev |
| ArduPlane SITL | cd sim && docker compose up -d |
| Agent against SITL | cd agent && go run ./cmd/agent -fc tcp:127.0.0.1:5760 -video-cmd "" -server-pubkey <key> (keys: server/README.md) |
| Browser → agent → SITL e2e | cd web && npm run e2e:sitl |
| This site | pip install -r requirements-docs.txt && mkdocs serve |
Public mock demo: https://drone.tomwildoer.com. These docs: https://drone.tomwildoer.com/docs/ (rebuilt with each demo deploy, npm run deploy in web/), with a copy on GitHub Pages that rebuilds on every push.