Skip to content

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 VehicleLink interface, 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.