Hi everyone,
I’d like to share MAVLab, a free and open-source Android app for learning drone systems hands-on.
The main idea: it runs a full drone digital twin — 6-DOF physics, a cascaded-PID autopilot with ArduCopter-style flight modes, a mission engine, and a MAVLink v2 server — entirely on the phone. Then unmodified QGroundControl or Mission Planner connects to it (same-phone split-screen, or desktop over Wi-Fi) and drives it as a real vehicle. So a beginner can plan and fly a full autonomous mission with the actual professional GCS, using nothing but the phone in their hand — no Pixhawk, no SITL, no Docker. It’s meant as a first learning layer before ArduPilot/PX4 SITL, not a SITL replacement.
GitHub: https://github.com/Labs-Ascend/MAVLab
Download: https://github.com/Labs-Ascend/MAVLab/releases (v1.5.0 APK)
Technical report: https://doi.org/10.5281/zenodo.21319694Main features:
Presents to a GCS as an ArduPilot-like copter over MAVLink 2.0 (UDP) — verified with both QGroundControl and Mission Planner
Full mission workflow: upload from the GCS → AUTO execution → live progress (MISSION_CURRENT / ITEM_REACHED) reported back
Command surface with COMMAND_ACK: arm/disarm, takeoff, land, mode change, mission start, stream-rate, capability handshake (full list in Appendix A of the report)
Phone sensors as flight input — tilt the phone and the aircraft responds; gyro/accel/mag/GPS fused into attitude
Real-time 3D digital twin that tracks the true vehicle state
Five teaching surfaces: Cockpit (telemetry) · Controller · Mission · SIM (3D) · Ops (diagnostics/setup)
Failure lab: injectable GPS loss/drift, motor failure, battery drain, compass interference, wind, heavy payload — watch the failsafes react
100 Hz physics; runs on modest hardware
A few practical notes:
Same phone: open MAVLab, then QGC in split-screen — QGC auto-detects the vehicle on
127.0.0.1:14550Desktop GCS: put the phone and computer on the same Wi-Fi; the phone’s UDP broadcast links automatically
Start location is configurable in the Ops screen (default is Nairobi)
Works fully offline — no cloud or internet required
Tested: the acceptance workflow — discovery (~5 s), arm/disarm, takeoff/land with acks, mission upload + AUTO with progress, link drop/reconnect, and a sustained-stability run — passes with both QGroundControl and Mission Planner on real Android devices. The written acceptance spec (QGC) is in the repo (
docs/v1_5_qgc_acceptance.md). Not yet done: a formal learning-outcomes study (planned with an IEEE bootcamp cohort, pre-registered) and telemetry-latency instrumentation.A couple of things we got wrong early and fixed, in case it helps anyone building MAVLink endpoints: using 0.0.0.0 as a UDP destination (it’s a bind address, not a broadcast target); underestimating how early a GCS wants command/param/stream-interval acks; and system-ID collisions when a whole classroom of phones shares one network (now stable per-install IDs).
Feedback, bug reports, and PRs welcome — the technical report doubles as architecture onboarding.
Some images:




