Arquitectura · Software & Cloud
Un panel de control (PWA) y la infraestructura cloud detrás de él
Toda esta arquitectura de hardware, comunicaciones y datos está gobernada por un desarrollo abierto, sobre el que se ha construido el software que recoge los datos de los sensores, controla el dron y gestiona el vídeo y la IA — con una arquitectura pensada para ir sumando funcionalidades de forma escalable, apoyada en la flexibilidad que da la nube para desplegar cada servicio que necesita el sistema: el broker de mensajería, el streaming de vídeo, el puente IoT o los servidores web del panel de control.
El panel de control
Una PWA para operar el dron desde el móvil
Guardian Eye no se controla solo con la emisora de radio: hemos construido un panel de control en forma de página web, instalable como aplicación (PWA) en el móvil o el escritorio, desde el que operar el dron a distancia.
¿Qué es una PWA? Una Progressive Web App es una página web que se comporta como una aplicación instalada: se añade a la pantalla de inicio con su propio icono, se abre a pantalla completa sin la barra del navegador, y funciona igual de bien en el móvil que en el escritorio. Es tan cómoda precisamente por eso — una sola página web hace de web y de app, sin tener que programar ni mantener dos versiones distintas del panel.
El panel no se limita a las operaciones principales de vuelo. También permite interactuar con los sensores y con la propia Raspberry Pi — reconfigurar en caliente un colector o apagar el equipo en remoto — sin necesidad de tocar el dron físicamente ni reiniciar ningún proceso a bordo.
Vuelo
Armar y desarmar motores, despegar a una altitud concreta, iniciar una misión, mantener posición, aterrizar o volver al punto de partida (RTL).
Cámara
El vídeo en directo del dron se ve dentro del propio panel, sin salir de la app ni abrir otra herramienta, con botones para empezar y detener la grabación.
Sistema y sensores
No todo son órdenes de vuelo: también se puede reconfigurar en caliente el intervalo de envío del sensor ambiental, el throttling del vídeo, o apagar la Raspberry Pi en remoto.
Cómo llega un comando hasta el dron
De un botón en el móvil a una orden MAVLink
El panel no habla con el dron directamente: la orden atraviesa varias capas antes de llegar al autopiloto.
Al pulsar un botón, el panel hace una petición HTTP a una API REST (Flask) que corre en el mismo servidor en la nube. Esa API no envía la orden directamente al dron: la publica como un mensaje en el broker MQTT, siguiendo la misma arquitectura de publicador/suscriptor que el resto del sistema — el mismo patrón que la telemetría, pero en sentido contrario. La Raspberry Pi, a bordo del dron, ejecuta un proceso suscrito a ese canal de comandos: en cuanto llega un mensaje nuevo, lo interpreta y lo traduce a una instrucción MAVLink, el protocolo con el que se habla con la controladora de vuelo Pixhawk — que es quien realmente arma los motores, despega o aterriza.
AWS Cloud
Raspberry Pi · a bordo del dron
Código real de cada capa, en los repositorios abiertos del proyecto: panel (PWA), API REST y receptor.py.
TFG · Drone-SAR
Control · dron
Panel de teleoperación (simulación)
Dron
Motores
Despegue
Navegación
Control de vuelo
Regreso
Cámara
Sistema (Raspberry Pi)
Vídeo en directo
La infraestructura cloud
Qué corre en AWS, pieza por pieza
Aquí está el inventario de lo que corre en la nube — sin repetir lo que ya se explica en el resto de páginas de Arquitectura.
El panel, la API, el broker y la base de datos no viven en abstracto: hoy corren en el mismo servidor EC2, por simplicidad — no porque el software dependa de que sea así. Cada proceso habla con el resto por red (HTTP, MQTT) y resuelve la dirección de cada pieza desde su configuración (un host en el .env), no desde un valor fijo en el código. Repartir mañana esos servicios entre varias máquinas —o mover InfluxDB a su propio servidor— es un cambio de configuración, no una reescritura del software.
Tampoco hace falta que sea en la nube: no es estrictamente necesario montar todo esto en AWS ni en ningún otro proveedor cloud. Flask, Mosquitto, InfluxDB y nginx son software estándar que funcionaría igual de bien en un servidor propio, físico — no hay ninguna pieza aquí que dependa de un servicio exclusivo de AWS. Hemos optado por la nube por la flexibilidad y la escalabilidad que ofrece —añadir o redimensionar recursos bajo demanda, sin mantenimiento físico—, no porque el proyecto dependa técnicamente de estar ahí.
AWS EC2 + Flask
Instancia t3.small dentro de una VPC — toda la gestión del sistema vive en la nube de Amazon (AWS), lo que da una base escalable y gestionable desde cualquier sitio, sin depender de estar físicamente junto al dron. Aquí corre el broker MQTT, la API REST del panel de control descrita arriba, y el puente hacia InfluxDB.
MQTT · Mosquitto
Broker autoalojado en el EC2, puerto 1883, QoS 1 (el mensaje se entrega al menos una vez, con confirmación). Jerarquía de topics dronsar/{dron_id}/{dominio}, con comodines como dronsar/+/deteccion.
InfluxDB
Base de datos de series temporales: cada dominio se guarda como una measurement, con el identificador del dron como tag indexado — pensada específicamente para datos con marca de tiempo de alta frecuencia, a diferencia de una base de datos relacional genérica.
nginx + Cloudflare
Proxy inverso que sirve el panel de control web y gestiona HTTPS, con Cloudflare como DNS sobre el dominio del proyecto.
Grafana
Paneles de monitorización sobre InfluxDB: permite consultar visualmente las series temporales de telemetría y sensores, sin tener que escribir una consulta contra la base de datos cada vez.
Acceso seguro · Tailscale
El EC2 y el resto de piezas de esta página son alcanzables desde la red privada de Tailscale, sin exponer puertos públicos innecesarios — detalle completo en Comunicaciones.
Código abierto
Los tres repositorios del stack están publicados en GitHub — ver detalle en Impacto y futuro.
Qué publica cada uno de los cuatro procesos a bordo (sensor.py, sistema.py, vuelo.py, deteccion.py) y por qué están separados está explicado en detalle en Datos e IoT.
Está previsto ampliar el panel con análisis semántico sobre las detecciones apoyado en modelos de lenguaje en la nube (AWS Bedrock) — es una línea de trabajo futura, no una funcionalidad ya validada.