Sistema de control de drones con streaming de vídeo WebRTC, reconstrucción 3D automática y detección de objetos YOLO — todo desde el navegador.
Arquitectura · Instalación · Estructura del proyecto · Configuración · Visor PLY · Troubleshooting· Agradecimientos
|
Hexsoon EDU-450 |
![]() DJI RoboMaster TT (Tello Talent) |
| Dron | Uso | Protocolo | Librería |
|---|---|---|---|
| Hexsoon EDU-450 | Vuelos exteriores | MAVLink (ArduPilot) | dronLink/ |
| DJI RoboMaster TT (Tello Talent) | Vuelos interiores | SDK Tello (Wi-Fi UDP) | telloLink/ |
El Hexsoon EDU-450 es un quadrotor de 450 mm de distancia entre ejes que monta una controladora compatible con ArduPilot (ArduCopter). Se comunica con el Ordenador 2 via MAVLink sobre puerto serie o UDP, gestionado por dronLink/ y pymavlink.
El DJI RoboMaster TT (Tello Talent) es la variante programable del Tello, con soporte para la SDK oficial de Tello. Se comunica con el Ordenador 2 via Wi-Fi UDP en la red 192.168.10.x, gestionado por telloLink/ y djitellopy.
| Interfaz de control | Nube de puntos 3D |
|---|---|
![]() | ![]() |
DEMO Interior - DJI RoboMaster TT - LingBot-Map: Ver demo
https://github.com/user-attachments/assets/15316532-2248-4f3b-9dc9-f83f9c7394cf
DEMO Interior - DJI RoboMaster TT - DA3: Ver demo
DEMO Interior - DJI RoboMaster TT - LingBot-Map: Ver demo
DEMO Exterior - Hexsoon EDU-450 - LingBot-Map: Ver demo
https://github.com/user-attachments/assets/7b510468-1b10-41ab-9ad5-08ca1745d716
| Característica | Descripción |
|---|---|
| Control de drones | ArduPilot (MAVLink) y DJI Tello desde una sola interfaz |
| Video en tiempo real | Streaming WebRTC de baja latencia con corrección fisheye |
| Reconstrucción 3D | LingBot-Map (streaming) + Depth Anything 3 (batch) |
| Detección YOLO | Detección de objetos COCO en tiempo real sobre el vídeo |
| Control por voz | Comandos de voz integrados en la interfaz web |
| Comunicación segura | MQTT sobre WSS + SSL autogenerado (NordVPN Meshnet) |
| Exportación PLY | Nubes de puntos exportables y visualizables en el navegador |
El sistema está diseñado para funcionar en dos ordenadores conectados a la misma red (o via NordVPN Meshnet):

[Usuario]
│ 1. Abre https://<IP_SERVIDOR>:5002
▼
[Navegador Web]
│ 2. Conecta MQTT → broker.hivemq.com:8884
│ 3. Envía comando (ej. "takeOff" → autopilot_queue)
▼
[HiveMQ Broker] ──── MQTT ────► [AutopilotService.py]
│
│ 4. Traduce comando → dronLink / telloLink
▼
[Hexsoon EDU-450 / DJI RoboMaster TT]
│
│ 5. Telemetría de vuelta
▼
[AutopilotService] ──── MQTT ────► [Navegador]
[CameraService.py]
│ 6. Captura vídeo (local camera / Tello stream)
│ Aplica corrección fisheye + detección YOLO
│ 7. Conecta WebRTC → WSS :8108 (señalización)
▼
[serverMQTT_https.py]
│ 8. Relay SDP/ICE ↔ Navegador
▼
[Navegador] ◄─── WebRTC P2P ──── [CameraService]
│
│ 9. Envía frames de vídeo → WSS :8108
▼
[model_worker.py]
│ 10a. LingBot-Map: procesa frame a frame → nube incremental
│ 10b. DA3: acumula frames → procesa al finalizar → PLY global
▼
[Navegador] ← nubes de puntos 3D renderizadas en Three.js
| Componente | Mínimo | Recomendado |
|---|---|---|
| Python | 3.10 | 3.11 |
| GPU | CUDA 12.1+ (NVIDIA) | CUDA 12.1+ (NVIDIA) |
| VRAM | 6 GB | 12 GB |
| OS | Windows / Linux | Windows / Linux |
| Componente | Requisito |
|---|---|
| Python | 3.10+ |
| Conexión al dron | Wi-Fi (RoboMaster TT) / MAVLink serial o UDP (Hexsoon EDU-450) |
| Cámara | Webcam, cámara IP, o cámara del Tello Talent |
wss://<IP_SERVIDOR>:8108# 1. Clonar el repositorio
git clone https://github.com/fedepompeo/proyecto-drones-v4.git
cd PythonProject
# 2. Crear entorno virtual
python -m venv .venv
# Windows:
.\.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
Windows — instalacion automatica (recomendado):
install.bat
El script detecta tu version de CUDA con nvidia-smi, instala PyTorch con soporte GPU, el resto de dependencias y los submodulos locales automaticamente.
Instalacion manual (Linux/macOS o si prefieres hacerlo a mano):
# 3a. Instalar PyTorch con CUDA (sustituye cu128 por tu version)
# Comprueba tu CUDA con: nvidia-smi
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128
pip install xformers --index-url https://download.pytorch.org/whl/cu128
# 3b. Instalar el resto de dependencias
pip install -r requirements.txt
# 3c. Instalar submodulos de modelos 3D
pip install -e lingbot-map/ --no-deps
pip install -e depth-anything-3/ --no-deps
Importante:
pip install torchsin--index-urlinstala siempre la version CPU. Los modelos no podran usar la GPU.
# 4. Configurar variables de entorno
cp .env.example .env
# Editar .env con tu IP y configuracion (ver seccion Configuracion)
# 5. Ejecutar servidor
python serverMQTT_https.py
Primera ejecucion: LingBot-Map descarga el checkpoint desde HuggingFace (~500 MB). DA3 se descarga automaticamente.
Accede a la interfaz en: https://<TU_IP>:5002
# 1. Clonar el mismo repositorio
git clone https://github.com/fedepompeo/proyecto-drones-v4.git
cd PythonProject
# 2. Crear entorno virtual
python -m venv .venv
.\.venv\Scripts\activate # o source .venv/bin/activate
# 3. Instalar dependencias (solo las del drone manager)
pip install paho-mqtt aiortc av djitellopy pymavlink opencv-python \
python-dotenv colorlog websockets cryptography Pillow
# 4. Configurar .env apuntando al Servidor
# Editar .env:
# SERVER_IP=<IP_DEL_ORDENADOR_1>
# SIGNALING_SERVER_URL=wss://<IP_DEL_ORDENADOR_1>:8108
# 5. Ejecutar
python DroneManager.py
DroneManager.pylanza automáticamenteCameraService.pyyAutopilotService.pyen threads.
# ── Red ─────────────────────────────────────────────────────────────────
SERVER_IP=<IP> # IP del Ordenador 1 (NordVPN Meshnet o LAN)
SIGNALING_SERVER_URL=wss://<IP> :8108 # URL del servidor WSS
FLASK_PORT=5002 # Puerto de la interfaz web
USE_SSL=true # Certificados SSL (autogenerados)
STUN_SERVER_URL=stun:stun.l.google.com:19302 # STUN para WebRTC
# ── MQTT Topics ──────────────────────────────────────────────────────────
AUTOPILOT_QUEUE=autopilot_queue # Comandos Hexsoon EDU-450 (ArduPilot)
TELLO_QUEUE=autopilot_tello_queue # Comandos DJI RoboMaster TT
DASHBOARD_WEB_QUEUE=webApp # Actualizaciones interfaz
TELEMETRY_QUEUE=telemetryService # Telemetría GPS
# ── LingBot-Map (modo streaming) ─────────────────────────────────────────
LINGBOT_CHECKPOINT=lingbot-map/checkpoints/lingbot-map.pt
LINGBOT_MAX_FRAMES=320 # Buffer máximo de frames
LINGBOT_KEYFRAME_INTERVAL=1 # Frame clave cada N frames
LINGBOT_SCALE_FRAMES=8 # Frames de escala
LINGBOT_USE_SDPA=1 # Atención escalada (más rápido)
LINGBOT_CONF_THRESHOLD=0.3 # Umbral de confianza mínima
LINGBOT_PROCESS_RES=336 # Resolución (múltiplo de 14)
# ── Depth Anything 3 (modo batch) ────────────────────────────────────────
DA3_MODEL_ID=depth-anything/da3-small # da3-small / da3-base / da3-large
DA3_BATCH_SIZE=29 # Frames por batch
DA3_PROCESS_RES=336 # Resolución
DA3_CONF_PERCENTILE_FILTER=0.30
# ── GPU ──────────────────────────────────────────────────────────────────
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
PC_SUBSAMPLE_STEP=2 # Submuestreo nube de puntos (mayor = menos puntos)
| Modo | Cuándo usarlo | Resultado |
|---|---|---|
| LingBot-Map (streaming) | Durante el vuelo, en tiempo real | Nube de puntos incremental |
| Depth Anything 3 (batch) | Post-vuelo, mayor calidad | Nube de puntos global .ply |
GitHub renderiza automáticamente cualquier .ply / .stl / .glb subido al repositorio con un visor 3D interactivo. Haz clic en el nombre del archivo para abrir el visor:
| Modelo | Descripción | Miniatura |
|---|---|---|
| 1779444538045.ply | Interior — DJI RoboMaster TT — DA3 | ![]() |
| 1779444312385.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779443901413.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779443225239.ply | Exterior — Hexsoon EDU-450 — DA3 | ![]() |
| 1779441216581.ply | Exterior — Hexsoon EDU-450 — LingBot-Map | ![]() |
| 1779440574725.ply | Exterior — Hexsoon EDU-450 — LingBot-Map | ![]() |
| 1779721537234.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779722973955.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779724088022.ply | Interior — DJI RoboMaster TT — DA3 | ![]() |
PythonProject/
│
├── SERVIDOR (Ordenador 1)
│ ├── serverMQTT_https.py # Punto de entrada principal
│ ├── model_worker.py # Worker de inferencia 3D (subprocess)
│ ├── templates/
│ │ └── drone-control-interface-v2_new.html # Interfaz web
│ └── static/
│ ├── js/voiceControl.js # Control por voz
│ └── lib/ # Bootstrap, Leaflet, MQTT.js
│
├── DRONE MANAGER (Ordenador 2)
│ ├── DroneManager.py # Orquestador (lanza los servicios)
│ ├── CameraService.py # WebRTC + YOLO
│ ├── AutopilotService.py # MQTT → dron
│ └── objects_yolo.py # Clases COCO para YOLO
│
├── LIBRERIAS DE DRONES
│ ├── dronLink/ # Hexsoon EDU-450 (ArduPilot / MAVLink)
│ │ ├── Dron.py
│ │ └── modules/ # arm, goto, telemetry, mission...
│ └── telloLink/ # DJI RoboMaster TT (Tello Talent)
│ ├── Dron.py
│ └── modules/
│
├── MODELOS 3D (submodulos)
│ ├── lingbot-map/ # LingBot-Map (streaming 3D)
│ │ ├── lingbot_map/
│ │ └── checkpoints/ # lingbot-map.pt (descargado en runtime)
│ └── depth-anything-3/ # Depth Anything 3 (batch 3D)
│ └── src/depth_anything_3/
│
├── CONFIGURACION
│ ├── .env # Variables de entorno
│ ├── calibration_data_fisheye.yaml # Calibración cámara fisheye
│ ├── certs/ # SSL autogenerado en runtime
│ └── requirements.txt
│
└── RUNTIME (generados, no en git)
├── images/ # Fotos capturadas
├── output_da3/ # Nubes de puntos .ply
└── depth_weights/ # Pesos DA3
El servidor genera certificados SSL autofirmados al arrancar. Para que el Ordenador 2 confíe en el servidor:
# En Ordenador 2, descargar el certificado del servidor:
curl -k https://<IP_SERVIDOR>:5002/download-cert -o server_cert.pem
CameraService.py hace esto automáticamente al arrancar.
Para conectar los dos ordenadores de forma segura sin configurar puertos:
.env (SERVER_IP)pip install -e lingbot-map/
pip install -e depth-anything-3/
Acepta la excepción en el navegador (certificado autofirmado) o regenera:
# Detener servidor, borrar certs y reiniciar
del certs\cert.pem certs\key.pem
python serverMQTT_https.py
# Reducir en .env:
DA3_BATCH_SIZE=15
LINGBOT_MAX_FRAMES=100
DA3_MODEL_ID=depth-anything/da3-small
SIGNALING_SERVER_URL en .env apunta a la IP correcta del Servidor192.168.10.XswitchDroneType para seleccionar Tello en la interfazAutopilotService.pypymavlink / dronLink está instaladoDocumentos detallados sobre cómo el código utiliza cada modelo y cómo funcionan internamente (nivel ingeniería):
| Documento | Contenido |
|---|---|
| LINGBOT_MAP_TECNICO.md | Arquitectura GCTStream, KV cache, back-projection, pipeline completo |
| DEPTH_ANYTHING_3_TECNICO.md | Arquitectura DA3, modo batch, sub-batches |
Este proyecto no sería posible sin el trabajo de los siguientes equipos de investigación, a quienes agradecemos enormemente por publicar sus modelos de forma abierta:
"Un modelo 3D feed-forward que unifica coordenadas, señales geométricas densas y corrección de deriva a largo plazo en un único framework de streaming, permitiendo inferencia estable a ~20 FPS sobre secuencias de más de 10.000 frames."
Autores: Lin-Zhuo Chen*, Jian Gao*, Yihang Chen, Ka Leong Cheng, Yipengjing Sun, Liangxiao Hu, Nan Xue, Xing Zhu, Yujun Shen, Yao Yao†, Yinghao Xu†
Organización: Robbyant Team
Paper: arXiv:2604.14141 (2026)
Repositorio: github.com/Robbyant/lingbot-map
Modelo: HuggingFace — robbyant/lingbot-map
@article{chen2026geometric,
title={Geometric Context Transformer for Streaming 3D Reconstruction},
author={Chen, Lin-Zhuo and Gao, Jian and Chen, Yihang and Cheng, Ka Leong and
Sun, Yipengjing and Hu, Liangxiao and Xue, Nan and Zhu, Xing and
Shen, Yujun and Yao, Yao and Xu, Yinghao},
journal={arXiv preprint arXiv:2604.14141},
year={2026}
}
"DA3 predice geometría espacialmente consistente a partir de un número arbitrario de imágenes, con o sin poses de cámara conocidas, usando un único transformer DINO sin especialización arquitectónica. Supera al estado del arte anterior (VGGT) en un 35.7% en estimación de pose y 23.6% en precisión geométrica."
Autores: Haotong Lin*, Sili Chen*, Jun Hao Liew*, Donny Y. Chen*, Zhenyu Li, Guang Shi, Jiashi Feng, Bingyi Kang†
Organización: ByteDance Seed
Paper: arXiv:2511.10647 (2025) · ICLR 2026
Repositorio: github.com/ByteDance-Seed/Depth-Anything-3
Proyecto: depth-anything-3.github.io
Demo: HuggingFace Spaces
@article{depthanything3,
title={Depth Anything 3: Recovering the visual space from any views},
author={Haotong Lin and Sili Chen and Jun Hao Liew and Donny Y. Chen and
Zhenyu Li and Guang Shi and Jiashi Feng and Bingyi Kang},
journal={arXiv preprint arXiv:2511.10647},
year={2025}
}
lingbot-map/LICENSE.txtdepth-anything-3/LICENSE)Desarrollado con fines educativos para proyecto de drones - EETAC 2026
Sistema de control de drones con streaming de vídeo WebRTC, reconstrucción 3D automática y detección de objetos YOLO — todo desde el navegador.
Arquitectura · Instalación · Estructura del proyecto · Configuración · Visor PLY · Troubleshooting· Agradecimientos
|
Hexsoon EDU-450 |
![]() DJI RoboMaster TT (Tello Talent) |
| Dron | Uso | Protocolo | Librería |
|---|---|---|---|
| Hexsoon EDU-450 | Vuelos exteriores | MAVLink (ArduPilot) | dronLink/ |
| DJI RoboMaster TT (Tello Talent) | Vuelos interiores | SDK Tello (Wi-Fi UDP) | telloLink/ |
El Hexsoon EDU-450 es un quadrotor de 450 mm de distancia entre ejes que monta una controladora compatible con ArduPilot (ArduCopter). Se comunica con el Ordenador 2 via MAVLink sobre puerto serie o UDP, gestionado por dronLink/ y pymavlink.
El DJI RoboMaster TT (Tello Talent) es la variante programable del Tello, con soporte para la SDK oficial de Tello. Se comunica con el Ordenador 2 via Wi-Fi UDP en la red 192.168.10.x, gestionado por telloLink/ y djitellopy.
| Interfaz de control | Nube de puntos 3D |
|---|---|
![]() | ![]() |
DEMO Interior - DJI RoboMaster TT - LingBot-Map: Ver demo
https://github.com/user-attachments/assets/15316532-2248-4f3b-9dc9-f83f9c7394cf
DEMO Interior - DJI RoboMaster TT - DA3: Ver demo
DEMO Interior - DJI RoboMaster TT - LingBot-Map: Ver demo
DEMO Exterior - Hexsoon EDU-450 - LingBot-Map: Ver demo
https://github.com/user-attachments/assets/7b510468-1b10-41ab-9ad5-08ca1745d716
| Característica | Descripción |
|---|---|
| Control de drones | ArduPilot (MAVLink) y DJI Tello desde una sola interfaz |
| Video en tiempo real | Streaming WebRTC de baja latencia con corrección fisheye |
| Reconstrucción 3D | LingBot-Map (streaming) + Depth Anything 3 (batch) |
| Detección YOLO | Detección de objetos COCO en tiempo real sobre el vídeo |
| Control por voz | Comandos de voz integrados en la interfaz web |
| Comunicación segura | MQTT sobre WSS + SSL autogenerado (NordVPN Meshnet) |
| Exportación PLY | Nubes de puntos exportables y visualizables en el navegador |
El sistema está diseñado para funcionar en dos ordenadores conectados a la misma red (o via NordVPN Meshnet):

[Usuario]
│ 1. Abre https://<IP_SERVIDOR>:5002
▼
[Navegador Web]
│ 2. Conecta MQTT → broker.hivemq.com:8884
│ 3. Envía comando (ej. "takeOff" → autopilot_queue)
▼
[HiveMQ Broker] ──── MQTT ────► [AutopilotService.py]
│
│ 4. Traduce comando → dronLink / telloLink
▼
[Hexsoon EDU-450 / DJI RoboMaster TT]
│
│ 5. Telemetría de vuelta
▼
[AutopilotService] ──── MQTT ────► [Navegador]
[CameraService.py]
│ 6. Captura vídeo (local camera / Tello stream)
│ Aplica corrección fisheye + detección YOLO
│ 7. Conecta WebRTC → WSS :8108 (señalización)
▼
[serverMQTT_https.py]
│ 8. Relay SDP/ICE ↔ Navegador
▼
[Navegador] ◄─── WebRTC P2P ──── [CameraService]
│
│ 9. Envía frames de vídeo → WSS :8108
▼
[model_worker.py]
│ 10a. LingBot-Map: procesa frame a frame → nube incremental
│ 10b. DA3: acumula frames → procesa al finalizar → PLY global
▼
[Navegador] ← nubes de puntos 3D renderizadas en Three.js
| Componente | Mínimo | Recomendado |
|---|---|---|
| Python | 3.10 | 3.11 |
| GPU | CUDA 12.1+ (NVIDIA) | CUDA 12.1+ (NVIDIA) |
| VRAM | 6 GB | 12 GB |
| OS | Windows / Linux | Windows / Linux |
| Componente | Requisito |
|---|---|
| Python | 3.10+ |
| Conexión al dron | Wi-Fi (RoboMaster TT) / MAVLink serial o UDP (Hexsoon EDU-450) |
| Cámara | Webcam, cámara IP, o cámara del Tello Talent |
wss://<IP_SERVIDOR>:8108# 1. Clonar el repositorio
git clone https://github.com/fedepompeo/proyecto-drones-v4.git
cd PythonProject
# 2. Crear entorno virtual
python -m venv .venv
# Windows:
.\.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
Windows — instalacion automatica (recomendado):
install.bat
El script detecta tu version de CUDA con nvidia-smi, instala PyTorch con soporte GPU, el resto de dependencias y los submodulos locales automaticamente.
Instalacion manual (Linux/macOS o si prefieres hacerlo a mano):
# 3a. Instalar PyTorch con CUDA (sustituye cu128 por tu version)
# Comprueba tu CUDA con: nvidia-smi
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu128
pip install xformers --index-url https://download.pytorch.org/whl/cu128
# 3b. Instalar el resto de dependencias
pip install -r requirements.txt
# 3c. Instalar submodulos de modelos 3D
pip install -e lingbot-map/ --no-deps
pip install -e depth-anything-3/ --no-deps
Importante:
pip install torchsin--index-urlinstala siempre la version CPU. Los modelos no podran usar la GPU.
# 4. Configurar variables de entorno
cp .env.example .env
# Editar .env con tu IP y configuracion (ver seccion Configuracion)
# 5. Ejecutar servidor
python serverMQTT_https.py
Primera ejecucion: LingBot-Map descarga el checkpoint desde HuggingFace (~500 MB). DA3 se descarga automaticamente.
Accede a la interfaz en: https://<TU_IP>:5002
# 1. Clonar el mismo repositorio
git clone https://github.com/fedepompeo/proyecto-drones-v4.git
cd PythonProject
# 2. Crear entorno virtual
python -m venv .venv
.\.venv\Scripts\activate # o source .venv/bin/activate
# 3. Instalar dependencias (solo las del drone manager)
pip install paho-mqtt aiortc av djitellopy pymavlink opencv-python \
python-dotenv colorlog websockets cryptography Pillow
# 4. Configurar .env apuntando al Servidor
# Editar .env:
# SERVER_IP=<IP_DEL_ORDENADOR_1>
# SIGNALING_SERVER_URL=wss://<IP_DEL_ORDENADOR_1>:8108
# 5. Ejecutar
python DroneManager.py
DroneManager.pylanza automáticamenteCameraService.pyyAutopilotService.pyen threads.
# ── Red ─────────────────────────────────────────────────────────────────
SERVER_IP=<IP> # IP del Ordenador 1 (NordVPN Meshnet o LAN)
SIGNALING_SERVER_URL=wss://<IP> :8108 # URL del servidor WSS
FLASK_PORT=5002 # Puerto de la interfaz web
USE_SSL=true # Certificados SSL (autogenerados)
STUN_SERVER_URL=stun:stun.l.google.com:19302 # STUN para WebRTC
# ── MQTT Topics ──────────────────────────────────────────────────────────
AUTOPILOT_QUEUE=autopilot_queue # Comandos Hexsoon EDU-450 (ArduPilot)
TELLO_QUEUE=autopilot_tello_queue # Comandos DJI RoboMaster TT
DASHBOARD_WEB_QUEUE=webApp # Actualizaciones interfaz
TELEMETRY_QUEUE=telemetryService # Telemetría GPS
# ── LingBot-Map (modo streaming) ─────────────────────────────────────────
LINGBOT_CHECKPOINT=lingbot-map/checkpoints/lingbot-map.pt
LINGBOT_MAX_FRAMES=320 # Buffer máximo de frames
LINGBOT_KEYFRAME_INTERVAL=1 # Frame clave cada N frames
LINGBOT_SCALE_FRAMES=8 # Frames de escala
LINGBOT_USE_SDPA=1 # Atención escalada (más rápido)
LINGBOT_CONF_THRESHOLD=0.3 # Umbral de confianza mínima
LINGBOT_PROCESS_RES=336 # Resolución (múltiplo de 14)
# ── Depth Anything 3 (modo batch) ────────────────────────────────────────
DA3_MODEL_ID=depth-anything/da3-small # da3-small / da3-base / da3-large
DA3_BATCH_SIZE=29 # Frames por batch
DA3_PROCESS_RES=336 # Resolución
DA3_CONF_PERCENTILE_FILTER=0.30
# ── GPU ──────────────────────────────────────────────────────────────────
PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
PC_SUBSAMPLE_STEP=2 # Submuestreo nube de puntos (mayor = menos puntos)
| Modo | Cuándo usarlo | Resultado |
|---|---|---|
| LingBot-Map (streaming) | Durante el vuelo, en tiempo real | Nube de puntos incremental |
| Depth Anything 3 (batch) | Post-vuelo, mayor calidad | Nube de puntos global .ply |
GitHub renderiza automáticamente cualquier .ply / .stl / .glb subido al repositorio con un visor 3D interactivo. Haz clic en el nombre del archivo para abrir el visor:
| Modelo | Descripción | Miniatura |
|---|---|---|
| 1779444538045.ply | Interior — DJI RoboMaster TT — DA3 | ![]() |
| 1779444312385.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779443901413.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779443225239.ply | Exterior — Hexsoon EDU-450 — DA3 | ![]() |
| 1779441216581.ply | Exterior — Hexsoon EDU-450 — LingBot-Map | ![]() |
| 1779440574725.ply | Exterior — Hexsoon EDU-450 — LingBot-Map | ![]() |
| 1779721537234.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779722973955.ply | Interior — DJI RoboMaster TT — LingBot-Map | ![]() |
| 1779724088022.ply | Interior — DJI RoboMaster TT — DA3 | ![]() |
PythonProject/
│
├── SERVIDOR (Ordenador 1)
│ ├── serverMQTT_https.py # Punto de entrada principal
│ ├── model_worker.py # Worker de inferencia 3D (subprocess)
│ ├── templates/
│ │ └── drone-control-interface-v2_new.html # Interfaz web
│ └── static/
│ ├── js/voiceControl.js # Control por voz
│ └── lib/ # Bootstrap, Leaflet, MQTT.js
│
├── DRONE MANAGER (Ordenador 2)
│ ├── DroneManager.py # Orquestador (lanza los servicios)
│ ├── CameraService.py # WebRTC + YOLO
│ ├── AutopilotService.py # MQTT → dron
│ └── objects_yolo.py # Clases COCO para YOLO
│
├── LIBRERIAS DE DRONES
│ ├── dronLink/ # Hexsoon EDU-450 (ArduPilot / MAVLink)
│ │ ├── Dron.py
│ │ └── modules/ # arm, goto, telemetry, mission...
│ └── telloLink/ # DJI RoboMaster TT (Tello Talent)
│ ├── Dron.py
│ └── modules/
│
├── MODELOS 3D (submodulos)
│ ├── lingbot-map/ # LingBot-Map (streaming 3D)
│ │ ├── lingbot_map/
│ │ └── checkpoints/ # lingbot-map.pt (descargado en runtime)
│ └── depth-anything-3/ # Depth Anything 3 (batch 3D)
│ └── src/depth_anything_3/
│
├── CONFIGURACION
│ ├── .env # Variables de entorno
│ ├── calibration_data_fisheye.yaml # Calibración cámara fisheye
│ ├── certs/ # SSL autogenerado en runtime
│ └── requirements.txt
│
└── RUNTIME (generados, no en git)
├── images/ # Fotos capturadas
├── output_da3/ # Nubes de puntos .ply
└── depth_weights/ # Pesos DA3
El servidor genera certificados SSL autofirmados al arrancar. Para que el Ordenador 2 confíe en el servidor:
# En Ordenador 2, descargar el certificado del servidor:
curl -k https://<IP_SERVIDOR>:5002/download-cert -o server_cert.pem
CameraService.py hace esto automáticamente al arrancar.
Para conectar los dos ordenadores de forma segura sin configurar puertos:
.env (SERVER_IP)pip install -e lingbot-map/
pip install -e depth-anything-3/
Acepta la excepción en el navegador (certificado autofirmado) o regenera:
# Detener servidor, borrar certs y reiniciar
del certs\cert.pem certs\key.pem
python serverMQTT_https.py
# Reducir en .env:
DA3_BATCH_SIZE=15
LINGBOT_MAX_FRAMES=100
DA3_MODEL_ID=depth-anything/da3-small
SIGNALING_SERVER_URL en .env apunta a la IP correcta del Servidor192.168.10.XswitchDroneType para seleccionar Tello en la interfazAutopilotService.pypymavlink / dronLink está instaladoDocumentos detallados sobre cómo el código utiliza cada modelo y cómo funcionan internamente (nivel ingeniería):
| Documento | Contenido |
|---|---|
| LINGBOT_MAP_TECNICO.md | Arquitectura GCTStream, KV cache, back-projection, pipeline completo |
| DEPTH_ANYTHING_3_TECNICO.md | Arquitectura DA3, modo batch, sub-batches |
Este proyecto no sería posible sin el trabajo de los siguientes equipos de investigación, a quienes agradecemos enormemente por publicar sus modelos de forma abierta:
"Un modelo 3D feed-forward que unifica coordenadas, señales geométricas densas y corrección de deriva a largo plazo en un único framework de streaming, permitiendo inferencia estable a ~20 FPS sobre secuencias de más de 10.000 frames."
Autores: Lin-Zhuo Chen*, Jian Gao*, Yihang Chen, Ka Leong Cheng, Yipengjing Sun, Liangxiao Hu, Nan Xue, Xing Zhu, Yujun Shen, Yao Yao†, Yinghao Xu†
Organización: Robbyant Team
Paper: arXiv:2604.14141 (2026)
Repositorio: github.com/Robbyant/lingbot-map
Modelo: HuggingFace — robbyant/lingbot-map
@article{chen2026geometric,
title={Geometric Context Transformer for Streaming 3D Reconstruction},
author={Chen, Lin-Zhuo and Gao, Jian and Chen, Yihang and Cheng, Ka Leong and
Sun, Yipengjing and Hu, Liangxiao and Xue, Nan and Zhu, Xing and
Shen, Yujun and Yao, Yao and Xu, Yinghao},
journal={arXiv preprint arXiv:2604.14141},
year={2026}
}
"DA3 predice geometría espacialmente consistente a partir de un número arbitrario de imágenes, con o sin poses de cámara conocidas, usando un único transformer DINO sin especialización arquitectónica. Supera al estado del arte anterior (VGGT) en un 35.7% en estimación de pose y 23.6% en precisión geométrica."
Autores: Haotong Lin*, Sili Chen*, Jun Hao Liew*, Donny Y. Chen*, Zhenyu Li, Guang Shi, Jiashi Feng, Bingyi Kang†
Organización: ByteDance Seed
Paper: arXiv:2511.10647 (2025) · ICLR 2026
Repositorio: github.com/ByteDance-Seed/Depth-Anything-3
Proyecto: depth-anything-3.github.io
Demo: HuggingFace Spaces
@article{depthanything3,
title={Depth Anything 3: Recovering the visual space from any views},
author={Haotong Lin and Sili Chen and Jun Hao Liew and Donny Y. Chen and
Zhenyu Li and Guang Shi and Jiashi Feng and Bingyi Kang},
journal={arXiv preprint arXiv:2511.10647},
year={2025}
}
lingbot-map/LICENSE.txtdepth-anything-3/LICENSE)Desarrollado con fines educativos para proyecto de drones - EETAC 2026