The lyrebird is Australia's most famous mimic — it can reproduce camera shutters, chainsaws and other birds' calls so convincingly that even the animals listening are fooled. That's exactly what this project does to a DJI drone. Lyrebird, from the SDU UAS Center, is an open-source Android application (Kotlin, DJI Mobile SDK V5) that runs on the DJI remote controller and teaches the aircraft to speak MAVLink 2 — so convincingly that QGroundControl, MAVSDK or any standard ground station can't tell it apart from a real PX4 vehicle.El lyrebird es el imitador más famoso de Australia — reproduce disparos de cámara, motosierras y cantos de otras aves con tal fidelidad que hasta los animales que lo escuchan se dejan engañar. Eso es exactamente lo que este proyecto le hace a un dron DJI. Lyrebird, del SDU UAS Center, es una aplicación Android open-source (Kotlin, DJI Mobile SDK V5) que corre en el mando de DJI y enseña a la aeronave a hablar MAVLink 2 — con tanta fidelidad que QGroundControl, MAVSDK o cualquier ground station estándar no la distingue de un PX4 real.
The result: any ground station, in any language, can fly a DJI drone without touching DJI's proprietary SDK. Lyrebird is a renamed continuation of WildBridge, which grew out of the WildDrone project — and it's been through real missions, not just demos.El resultado: cualquier ground station, en cualquier lenguaje, puede volar un dron DJI sin tocar el SDK propietario de DJI. Lyrebird es la continuación renombrada de WildBridge, nacido del proyecto WildDrone — y ha pasado por misiones reales, no solo demos.


Looks like PX4 to everything elseParece un PX4 para todo lo demás
The headline trick: each drone presents itself as a complete MAVLink 2 vehicle — not a telemetry feed, a full control surface. QGroundControl connects, shows telemetry and video, and flies it with no plugin and no configuration file. Because the aircraft reports itself as PX4, swarm software, mission planners and research pipelines built for a PX4 fleet can fly a DJI aircraft alongside genuine PX4 vehicles in the same swarm, unmodified.El truco estrella: cada dron se presenta como un vehículo MAVLink 2 completo — no un feed de telemetría, una superficie de control entera. QGroundControl se conecta, muestra telemetría y vídeo, y lo vuela sin plugins ni archivos de configuración. Como la aeronave se identifica como PX4, el software de enjambres, planificadores de misión y pipelines de investigación construidos para flotas PX4 pueden volar un DJI junto a PX4 reales en el mismo enjambre, sin modificar nada.
Missions go end-to-end: build a plan in QGC's Plan view (waypoints, take-off, land/RTL, camera, gimbal, change speed, region of interest), upload it, and Lyrebird flies it — translating onto its own onboard PID sequencer or DJI's native wayline engine. The upload handshake stores every item exactly as MAVLink sent it, in wire format, so a later download returns precisely what was uploaded, regardless of how it was flown. MAVLink 2 is on by parameter, following PX4's own pattern — and every flight command is gated twice before it moves the aircraft.Las misiones van de punta a punta: diseña un plan en la vista Plan de QGC (waypoints, despegue, aterrizaje/RTL, cámara, gimbal, cambio de velocidad, región de interés), súbelo, y Lyrebird lo vuela — traduciéndolo a su propio secuenciador PID embarcado o al motor de waylines nativo de DJI. El handshake de subida guarda cada ítem exactamente como lo envió MAVLink, en formato de red, así que una descarga posterior devuelve exactamente lo subido, sin importar cómo se voló. MAVLink 2 se activa por parámetro, siguiendo el patrón de PX4 — y cada comando de vuelo pasa un doble gate antes de mover la aeronave.
Protocols, not SDKsProtocolos, no SDKs
Every aircraft exposes the full stack over open protocols:Cada aeronave expone el stack completo sobre protocolos abiertos:
- HTTP API (port 8080) — every control and status endpoint, with the two-computer safety model built into the request flow.API HTTP (puerto 8080) — todos los endpoints de control y estado, con el modelo de seguridad de dos computadores integrado en el flujo de peticiones.
- TCP telemetry (port 8081) — a newline-delimited JSON stream, field by field: attitude, GPS, home point, battery, satellite count, flight mode, zoom, recording state, even the operator phone's own location, pressure and Wi-Fi RSSI.Telemetría TCP (puerto 8081) — un stream JSON delimitado por saltos de línea, campo a campo: actitud, GPS, home point, batería, número de satélites, modo de vuelo, zoom, grabación, incluso la localización, presión y RSSI Wi-Fi del propio teléfono del operador.
- Video — WHIP/WHEP publishing through MediaMTX, plus a multi-drone video dashboard. Auto-discovery over UDP broadcast (port 30000) finds every drone on the LAN by name.Vídeo — publicación WHIP/WHEP vía MediaMTX, además de un dashboard multi-drone. Auto-descubrimiento por broadcast UDP (puerto 30000) encuentra cada dron de la LAN por su nombre.

Two-computer safetySeguridad con dos computadores
Autonomy needs a kill switch you can actually trust. Lyrebird's safety model is latch-based: two computers can drive the same drone over HTTP, and which one is in command is decided purely by an X-Safety-Token header on each request. The Pilot Computer holds control at startup; the first command from the Safety Computer seizes authority, cancels whatever autonomous loop the Pilot left running, and holds the aircraft in place. From then on, every Pilot command is rejected — persistently, with no timeout. If the Safety Computer goes silent, the Pilot does not regain control; the only way back is /releaseSafetyControl, callable only by the Safety Computer. While it holds authority, a red SAFETY COMPUTER IN CONTROL banner sits over the video feed. An app restart resets to Pilot control — restart means fresh mission.La autonomía necesita un kill switch de verdad. El modelo de seguridad de Lyrebird es un latch: dos computadores pueden pilotar el mismo dron por HTTP, y cuál está al mando lo decide únicamente la cabecera X-Safety-Token de cada petición. El Pilot Computer tiene el control al arrancar; el primer comando del Safety Computer arrebata la autoridad, cancela el bucle autónomo que el Pilot dejara corriendo y mantiene la aeronave en su sitio. A partir de ahí, cada comando del Pilot es rechazado — de forma persistente, sin timeout. Si el Safety Computer se queda en silencio, el Pilot no recupera el control; la única vuelta atrás es /releaseSafetyControl, que solo puede llamar el Safety Computer. Mientras tiene la autoridad, un banner rojo SAFETY COMPUTER IN CONTROL aparece sobre el feed de vídeo. Reiniciar la app vuelve al control del Pilot — reinicio significa misión nueva.

Ground station and ROS 2Ground station y ROS 2
The Python interface (DJIInterface) wraps every HTTP command and the TCP telemetry socket in a thread-safe background receiver, with auto-discovery if you don't want to hardcode an IP. For the robotics crowd, the ROS 2 Humble package publishes 45+ topics per drone under dynamic namespaces (/mini1/, /mini2/, …) and subscribes to command topics; the node publishes only when the drone actually sends a new snapshot, so topic rate follows the aircraft, not a polling loop. The auto_discovery_native.launch.py launch file spins up one namespaced controller per discovered drone and re-scans periodically — zero config.La interfaz Python (DJIInterface) envuelve cada comando HTTP y el socket de telemetría TCP en un receptor en segundo plano thread-safe, con auto-descubrimiento si no quieres hardcodear una IP. Para la gente de robótica, el paquete ROS 2 Humble publica 45+ topics por dron bajo namespaces dinámicos (/mini1/, /mini2/, …) y se suscribe a topics de comando; el nodo publica solo cuando el dron envía un snapshot nuevo, así que la tasa del topic sigue a la aeronave, no a un bucle de polling. El launch file auto_discovery_native.launch.py levanta un controller namespaced por dron descubierto y re-escanea periódicamente — configuración cero.

Mission-provenProbado en misión
Lyrebird (and its WildBridge predecessor) has flown in three published research applications (Rolland et al., RiTA 2025):Lyrebird (y su predecesor WildBridge) ha volado en tres aplicaciones de investigación publicadas (Rolland et al., RiTA 2025):
| StudyEstudio | UAVs | FeaturesFuncionalidades | VideoVídeo |
|---|---|---|---|
| Drone swarm for wildlife monitoringEnjambre para monitorización de fauna | 2× Mini 3, 1× M3E | Telemetry, video, waypointsTelemetría, vídeo, waypoints | ▶ Watch |
| Drone swarm for wildfire detectionEnjambre para detección de incendios | 1× M3E, 1× M4T, 2× M300 | Thermal detection, coordinated take-off, payload drop — XPRIZE Wildfire finalistDetección térmica, despegue coordinado, lanzamiento de carga — finalista XPRIZE Wildfire | ▶ Watch |
| Atmospheric wind-field profilingPerfilado de campo de viento atmosférico | 3× Mini 3 | Vertical wind profiles validated against LiDARPerfiles verticales de viento validados contra LiDAR | ▶ Watch |
| Custom PID position controllerControlador PID de posición propio | — | On-device PID controllerControlador PID en el dispositivo | ▶ Watch |
Hardware and getting startedHardware y primeros pasos
Supported aircraft: DJI Mini 3 / Mini 4 Pro, Mavic 3 Enterprise, and the Matrice 30 / 300 RTK / 350 RTK / 4 Thermal, flown from the RC Pro, RC Plus or RC-N3. Enterprise sensors are supported too — thermal capture and temperature, laser rangefinder, and payload drop. Everything is MIT-licensed: install the app on your RC or build from source, and the docs cover the HTTP API, telemetry, MAVLink 2, missions, ROS 2, and a field-test procedure that walks the link, settings and payload checks before your first flight.Aeronaves soportadas: DJI Mini 3 / Mini 4 Pro, Mavic 3 Enterprise, y las Matrice 30 / 300 RTK / 350 RTK / 4 Thermal, voladas desde el RC Pro, RC Plus o RC-N3. Los sensores enterprise también funcionan — captura térmica y temperatura, telémetro láser y lanzamiento de carga. Todo con licencia MIT: instala la app en tu mando o compílala desde el código, y la documentación cubre la API HTTP, la telemetría, MAVLink 2, las misiones, ROS 2 y un procedimiento de campo que repasa el link, los ajustes y las comprobaciones antes del primer vuelo.
📡 Project site · 🐙 GitHub · 🎥 Demo videos · 📖 WildBridge (predecessor)📡 Web del proyecto · 🐙 GitHub · 🎥 Vídeos demo · 📖 WildBridge (predecesor)