Skip to content

altnautica/ADOSMissionControl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,231 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Altnautica Mission Control

Open-source web ground station for software-defined drones. ArduPilot, PX4, Betaflight, and iNav. Mission planning, AI tuning, and gamepad flight, in the browser.

License: GPL-3.0 TypeScript Next.js 16 PRs Welcome Discord

Command any drone from any browser. ADOS Mission Control is a full ground control station for software-defined drones. Configure flight controllers panel by panel, plan missions with pattern generators, fly with a gamepad at 50 Hz, and tune PIDs with AI. No install. No locked hardware.

Part of the ADOS ecosystem. Pairs with ADOS Drone Agent, the Rust-first onboard companion, for the long-range data link, HD video, and cloud fleet management. Works standalone with any MAVLink drone over USB or WebSocket. Add features with ADOS Extensions, the first-party plugin repo.

Live App | Docs | ADOS Extensions | Changelog | Discord | Email | Contact


Fleet Dashboard


Mission Planner
Mission planning with pattern generators and terrain following
Flight Control
Gamepad and HOTAS flight controls at 50 Hz
3D Simulation
Cesium 3D globe with real terrain and flight path replay
FC Configuration
Nearly 60 panels for full flight controller setup
FC Parameters
Search, edit, and write all FC parameters
Firmware Flash Tool
WebUSB firmware flashing, no external flasher needed
Mission Planning
Drag-and-drop waypoint editor with terrain profile and mission validation
Drone Agent Overview
Real-time agent monitoring with service status, system resources, and live logs
Fleet Network
MeshNet fleet enrollment, MQTT gateway status, mesh radio peers, and network topology
Peripherals
Connected peripheral detection with live sensor readings (IMU, GPS, barometer, camera, radio)
3D Mission Simulation
3D mission simulation with waypoints over terrain, playback controls, and camera presets

What it lets you do

  • Connect to any drone, no driver install. Plug in over USB (WebSerial), point at a MAVLink WebSocket, or pair with an ADOS agent over your LAN.
  • Set up the whole flight controller. Nearly 60 panels cover calibration, PID tuning, receivers, outputs, failsafe, power, ports, OSD, firmware flashing, and the iNav-specific surfaces.
  • Plan a mission by drawing it. Drop waypoints on the map, generate survey, orbit, corridor, SAR, and structure-scan patterns, follow terrain, set geofences and rally points, then validate before upload.
  • Fly with a real controller. Gamepad, HOTAS, RC transmitter, or keyboard at 50 Hz, with arm/disarm, mode switching, guided flight, and a kill switch.
  • Rehearse in 3D. Replay a mission over real terrain on a Cesium globe before you fly it.
  • Tune PIDs with help. FFT-driven noise and motor-health analysis suggests filter settings and PID values.
  • Manage a fleet from anywhere. Cloud mode adds multi-drone dashboards, mission sync, and real-time telemetry over MQTT.
  • Sign your commands. HMAC-SHA256 on every outbound MAVLink v2 frame, with the key held only in your browser.
  • Self-host all of it. Field operations work fully offline, and the cloud relay can run entirely on your own servers.

Quick Start

Try it right now at command.altnautica.com. No install needed. Demo mode loads simulated drones with live telemetry, mission planning, and full FC configuration.

Or run locally:

git clone https://github.com/altnautica/ADOSMissionControl.git
cd ADOSMissionControl
npm install
npm run demo

Open http://localhost:4000. Simulated drones, no hardware required.


What ADOS Mission Control Is

  • Platform: Browser-based. Runs on any OS with a modern browser. Optional Electron desktop build for WebSerial and WebUSB access.
  • Firmware: ArduPilot, PX4, Betaflight, and iNav as first-class targets.
  • Protocol: MAVLink v2 and MSP v1/v2 in the same app, behind a unified DroneProtocol adapter interface.
  • Flight control: Gamepad, HOTAS, RC transmitter, or keyboard input at 50 Hz.
  • AI tuning: PID and filter analysis with FFT-driven noise and motor-health diagnosis.
  • 3D simulation: CesiumJS globe with real terrain and flight path replay.
  • Fleet mode: MQTT and Convex relay for multi-drone dashboards. Self-hostable end to end.
  • License: GPL-3.0-only.

The browser side is TypeScript. The onboard agent it pairs with, ADOS Drone Agent, is Rust-first, which is what carries the long-range link, HD video, and headless operation on small boards.


What It Does

Configure your flight controller

Nearly 60 panels covering calibration, PID tuning, receiver, outputs, failsafe, power, ports, OSD, firmware flashing, plus iNav-specific panels for safehomes, geozones, navigation config, profiles, output mapping, servos, temp sensors, MC braking, rate dynamics, and mission summary. Works with ArduPilot, PX4, Betaflight, and iNav. AI PID tuning analyzes FFT noise and motor health, then suggests filter settings and PID values. Board auto-detection for firmware flashing. WebUSB firmware flashing with no external tools.

Plan missions

Drag waypoints on an interactive map. Pattern generators for survey (boustrophedon), orbit, corridor, SAR (expanding square, sector, parallel track), structure scan, plus automated landing approaches. Terrain following via the Open Elevation API. Geofence editor, rally points, batch waypoint editing, and mission validation before upload. Import and export KML, KMZ, CSV, .waypoints, .plan.

Fly and simulate

Gamepad, HOTAS, RC transmitter, or keyboard input at 50 Hz. Arm/disarm, mode switching, guided flight, mission execution, kill switch. 3D Cesium globe simulation with real terrain, flight path replay, and camera presets.

Monitor telemetry

Real-time attitude, GPS, battery, EKF status, vibration, RSSI, and sensor health. Pre-arm check visualization. Alert feed from the flight controller. Ring-buffered stores keep memory bounded across long sessions.

Sign MAVLink commands

HMAC-SHA256 on every outbound MAVLink v2 frame. The 32-byte key lives only in your browser as a non-extractable Web Crypto key, and is enrolled with the flight controller once via SETUP_SIGNING. Flip require mode from the Configure tab Security panel to make the flight controller reject any unsigned command. ArduPilot 4.0 and newer supported today. See docs.

Connect locally or over the cloud

ADOS is local-first. In field mode the GCS talks directly to hardware over WebSerial or WebSocket, or to an ADOS agent over the LAN by hostname or IP, with no cloud account. Cloud mode adds fleet management, mission sync, and MQTT telemetry relay for reaching drones across networks. When paired with ADOS Drone Agent, the GCS receives live telemetry at 2 Hz and faster and can send commands through the relay.

Manage a ground station

When the paired agent runs in the ground-station profile, the node panel shows role-gated surfaces instead of the flight tabs: Network (uplink priority across WiFi, ethernet, and cellular, plus access-point management), Distributed RX (single-node link stats, relay list, combined stream stats), Mesh (batman-adv health, neighbors, gateways, and the pairing accept window), Display and Physical UI (OLED screens and button mappings), and Peripherals (connected USB and GPIO hardware). A role badge in the top bar shows at a glance whether a node is running as direct, relay, or receiver, and mesh events surface as non-blocking toasts.


Firmware Support

Firmware Protocol Status
ArduPilot (Copter / Plane / Rover / Sub) MAVLink v2 Full
PX4 MAVLink v2 Full
Betaflight MSP v1/v2 Full
iNav MSP v1/v2 Full

By the Numbers

~98K lines of TypeScript. Nearly 60 FC panels. 83 MAVLink message decoders. 65 iNav decoders. 7 mission pattern generators. Over 60 ring-buffered Zustand stores. Full demo mode with zero setup.


Platform Support

Platform Requirements Notes
Web (recommended) Chrome 89+ or Edge 89+ WebSerial and WebUSB for FC connection and firmware flashing
Web (limited) Firefox, Safari No WebSerial or WebUSB. WebSocket connections work.
Desktop (macOS) Intel or Apple Silicon Electron app, not code-signed (same as Betaflight and iNav Configurator)
Desktop (Windows) x64 Electron app, .exe installer
Desktop (Linux) x64 or arm64 .AppImage

3D features (simulation, terrain rendering) benefit from a dedicated GPU. Works without one, but frame rates will be lower.


External Services

All optional. The GCS works fully offline for local FC configuration and field operations.

Service Purpose Required?
Convex Cloud fleet management, auth, community features No (field mode works without)
Open Elevation Terrain following for mission planning No (defaults to flat terrain)
Cesium Ion 3D terrain tiles and satellite imagery No (uses ArcGIS terrain by default)
Groq AI PID tuning analysis No (AI features disabled without key)
GitHub API PX4 firmware release fetching No (raises rate limit from 60 to 5000/hr)

Tech Stack

Layer Technology
Framework Next.js 16 (App Router, Turbopack)
UI React 19, Tailwind v4
State Zustand 5 (ring-buffered telemetry)
Maps Leaflet + react-leaflet
3D simulation CesiumJS
Protocol Custom MAVLink v2 and MSP v1/v2 binary parsers
Transport WebSocket, WebSerial, WebUSB
Backend Convex (optional, cloud fleet and community features)
Desktop Electron 41
Language TypeScript (strict)

CLI

npm run cli              # Interactive menu (recommended starting point)

# Development
npm run cli dev          # Dev server (port 4000)
npm run cli dev -a       # Dev server + MQTT + Video Relay via Docker
npm run cli dev --convex # Dev server + Convex dev backend
npm run cli demo         # Demo mode with simulated drones
npm run cli sitl         # Launch ArduPilot SITL + WebSocket bridge

# Services (Docker)
npm run cli services         # Interactive service manager
npm run cli services status  # Show MQTT / Video Relay status
npm run cli services start   # Start a Docker service
npm run cli services stop    # Stop a Docker service
npm run cli services logs    # Tail service logs

# Setup and configuration
npm run cli setup        # First-time setup wizard (asks dev vs prod)
npm run cli prod         # Production deployment wizard (ports, SSL, service config)
npm run cli config       # Configure environment interactively
npm run cli deploy       # Lint, build, start production server
npm run cli info         # System check (Node, Docker, ports, security)

Connecting to Hardware

WebSocket: Connect to any MAVLink-over-WebSocket endpoint. Use npm run cli sitl to launch ArduPilot SITL with the bridge tool. See tools/sitl/.

WebSerial (USB): Plug in your FC, open Mission Control in Chrome 89+, click connect, pick the port. No drivers needed.

ADOS agent (LAN): Add a node by hostname or IP. Mission Control pairs with the agent directly over the local network. No cloud account required.


Desktop App

npm run desktop:build:mac   # macOS .dmg
npm run desktop:build:win   # Windows .exe installer
npm run desktop:build:linux # Linux .AppImage

macOS: right-click the app, Open, then Open again. Not code-signed, same as Betaflight Configurator and iNav Configurator.


Self-Hosted Web Server

A multi-stage Dockerfile ships at the repo root for running Mission Control as a long-lived web server (instead of the desktop app or local dev). Node 22 alpine base, Next.js standalone output, runs as an unprivileged user.

docker build \
  --build-arg NEXT_PUBLIC_CONVEX_URL=https://your-convex.example \
  -t ados-mission-control .

docker run -d \
  -p 4000:4000 \
  -e NEXT_PUBLIC_CONVEX_URL=https://your-convex.example \
  --restart unless-stopped \
  --name mission-control \
  ados-mission-control

Open http://localhost:4000.

About NEXT_PUBLIC_* variables: these get baked into the client JS bundle at build time. Pass them as --build-arg to docker build AND as -e to docker run (the runtime version is used by server components and route handlers). The Dockerfile declares each NEXT_PUBLIC_* as ARG plus ENV so build args propagate.

Container orchestrators and PaaS: the image works with anything that can build a Dockerfile. Point your tool at this repo, set the build pack to Dockerfile, expose port 4000, and configure the env vars above. No special framework integration is needed.

Fronting with HTTPS: the container serves plain HTTP on port 4000. Terminate TLS at any reverse proxy (Caddy, nginx, Traefik) or tunnel (Cloudflare Tunnel, Tailscale Funnel, ngrok). When fronting with a tunnel, route to 127.0.0.1:4000 rather than localhost:4000, since the standalone server binds IPv4 only.

For self-hosting the supporting cloud relay (Convex, MQTT, and video relay), see SELFHOSTING.md.


Backend and Cloud Features

Field mode works with no backend. Cloud features need a Convex deployment:

npx convex init
npx @convex-dev/auth
npx convex dev

Set NEXT_PUBLIC_CONVEX_URL in .env.local. The first user to sign up becomes admin.

For self-hosted MQTT and video relay, run npm run cli prod for a guided wizard (port selection, conflict detection, config file generation, optional service start), or follow the manual steps in SELFHOSTING.md. Source for each service: tools/mqtt-bridge/, tools/video-relay/.

Environment variables (.env.local)

All variables are optional. Set them with npm run cli config or edit .env.local directly. The file is gitignored and never committed.

Variable Description
NEXT_PUBLIC_DEMO_MODE Enable demo mode with simulated drones
NEXT_PUBLIC_DEMO_DRONE_COUNT Number of simulated drones (1, 3, 5, or 10)
NEXT_PUBLIC_CONVEX_URL Convex backend URL for cloud fleet features
GITHUB_TOKEN Raises the PX4 releases API limit from 60 to 5000 req/hr
GROQ_API_KEY AI PID tuning suggestions. Free at console.groq.com
CESIUM_BASE_URL Self-hosted Cesium JS URL (falls back to CDN if unset)

Tools

Tool Path Description
SITL launcher tools/sitl/ ArduPilot SITL plus TCP-to-WebSocket bridge
MQTT bridge tools/mqtt-bridge/ Mosquitto broker plus MQTT-to-Convex bridge (Docker Compose)
Video relay tools/video-relay/ RTSP-to-WebSocket fMP4 relay via ffmpeg (Docker Compose)

Hardware Partners

Building and testing ADOS Mission Control on real hardware. Want to get involved? Email us.

Interested in sponsoring or sending test hardware? See our partnership info.


Community


Contributing

See CONTRIBUTING.md for the full guide. Good areas to start: real iNav 7.x hardware testing, map-based polygon geozone drawing, a dedicated iNav nav-PID panel, Betaflight hardware testing, new board profiles, UDP transport, unit tests, pattern generators.

npm run demo   # Test against simulated drones
npm run lint   # Must pass before PR

License

GPL-3.0-only. Copyright 2025-2026 Altnautica. Derivative works must also be GPL-3.0, same as ArduPilot.

About

Open-source web-based Ground Control Station for autonomous drones. FC config, sensor calibration, mission planning, MAVLink protocol, manual flight control. Supports multi drone fleet and companion software for true software defined drones.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages