Open-source GCS for controlling multiple UAVs simultaneously.
Built with Python · PyQt6 · MAVLink · Leaflet Maps
DRSKHUB is a ground control station (GCS) designed from scratch with one core idea in mind: why control one drone when you can control a hundred?
Popular tools like Mission Planner are powerful — but they're built around a single UAV at a time. DRSKHUB removes that ceiling. With one command you can dispatch, monitor, and coordinate an entire swarm of UAVs simultaneously — whether that's 6 drones mapping a wheat field or 50 units covering a search-and-rescue area.
The project is built on a real MAVLink backend (the same protocol powering ArduPilot and PX4), a live map powered by OpenStreetMap tiles, and a clean modern interface — no bloat, no outdated UI from the 2000s.
Most GCS software was designed for a world where one pilot controls one aircraft. That world is changing fast.
Agriculture, emergency services, infrastructure inspection, environmental monitoring — all of these are moving toward autonomous drone swarms. The tools haven't caught up. DRSKHUB is the start of catching up.
The project started as a personal engineering need and has grown into something with real commercial potential across multiple industries.
- OpenStreetMap dark / street / satellite layers via Leaflet + QWebEngineView
- Live UAV markers with heading arrows, color-coded per drone
- Flight track history for every drone
- Click map to set waypoints directly
- Geofence overlay
- Control unlimited drones simultaneously — no per-unit cap
- Real MAVLink backend: same protocol as Mission Planner / QGroundControl
- Connect via UDP (WiFi / network) or Serial (3DR radio telemetry)
- Per-drone and swarm-wide commands
- Full waypoint editor: TAKEOFF, WAYPOINT, LOITER, RTL, LAND
- Upload mission to single drone or entire swarm at once
- Download existing mission from any connected drone
- Swarm formation presets: Line · Grid · Circle · V-Shape
- Position, altitude, speed, heading
- Battery %, voltage, current
- GPS fix, satellites, HDOP
- Attitude: roll, pitch, yaw — with artificial horizon (ADI)
- Compass widget
- EKF status, vibration levels
- Flight timer
- Full MAVLink parameter read/write (like Mission Planner's Full Parameter List)
- Live fetch from drone + write-back
- Common params pre-loaded for quick tuning
- Built-in virtual drone engine — no hardware needed
- Launches 1–12 virtual drones over localhost UDP
- Each simulated drone runs real MAVLink traffic
- Only activates on button press — doesn't interfere with live connections
(Add your own screenshots here after running the app)
| Map View | Telemetry Panel |
|---|---|
screenshots/map.png |
screenshots/telemetry.png |
| Mission Planner | Parameters |
|---|---|
screenshots/mission.png |
screenshots/params.png |
DRSKHUB/
├── main.py # Entry point
├── core/
│ ├── drone.py # MAVLink connection + full telemetry parser
│ ├── swarm.py # Swarm manager: group commands, formations
│ └── simulation.py # Virtual drone engine (UDP MAVLink)
├── ui/
│ ├── main_window.py # Main PyQt6 window + layout
│ ├── map_panel.py # Leaflet map via QWebEngineView
│ ├── fleet_panel.py # Drone list sidebar
│ ├── telemetry_panel.py # Data / Attitude / Commands tabs
│ ├── mission_panel.py # Waypoint editor + formation presets
│ ├── params_panel.py # MAVLink parameter editor
│ ├── widgets.py # ADI, compass, signal bars (custom QPainter)
│ └── styles.py # Global QSS stylesheet
├── settings.yaml
└── requirements.txt
The Drone class (core/drone.py) is a self-contained MAVLink state machine running in its own thread. It parses every incoming MAVLink message — HEARTBEAT, GLOBAL_POSITION_INT, ATTITUDE, SYS_STATUS, VFR_HUD, GPS_RAW_INT, PARAM_VALUE, and more — and exposes clean Python attributes. The UI reads from these at 5 Hz without blocking.
The Swarm class (core/swarm.py) holds a list of Drone instances and provides group operations. Formations are pure geometry — no third-party deps.
- Python 3.10+
- Windows / Linux / macOS
Double-click run_windows.bat
It creates a venv, installs all dependencies, and launches the app automatically.
chmod +x run_linux.sh
./run_linux.shpython -m venv venv
# Windows:
venv\Scripts\activate
# Linux / macOS:
source venv/bin/activate
pip install -r requirements.txt
python main.pyPyQt6>=6.6.0
PyQt6-WebEngine>=6.6.0
pymavlink>=2.4.41
opencv-python>=4.9.0
PyYAML>=6.0
numpy>=1.26.0
requests>=2.31.0
pyserial>=3.5
- Launch the app:
python main.py - Click "Start Simulation" in the top bar
- Choose number of drones (1–12)
- Watch them appear on the live map with real telemetry
- Ensure your drone/SITL sends MAVLink to your PC
- Click "Connect Drone"
- Choose UDP, enter IP and port (default
14550) - Click Connect
- Plug in your 3DR radio
- Click "Connect Drone" → Serial
- Enter COM port (e.g.
COM3) and baud rate (57600)
- Switch to Mission tab
- Click on the map to set coordinates, add waypoints
- Select target: single drone or All Drones (Swarm)
- Click Upload
In the Mission tab → right panel → pick a formation → set spacing → Apply Formation All online drones will reposition to their assigned slots.
Any ArduPilot or PX4 compatible FC that speaks MAVLink:
- ArduCopter (multirotor)
- ArduPlane / QuadPlane / VTOL
- ArduRover
- PX4 (MAVSDK compatible)
Tested with:
- Matek H743-Wing
- Pixhawk 4 / 6C
- Cube Orange
- SITL (ArduPilot Software-in-the-Loop)
- Video stream panel (RTSP / OpenCV per drone)
- A* route planning around no-fly zones
- Teknofest API integration (competition telemetry upload)
- Replay mode from CSV/JSONL logs
- SITL automation test scenarios
- Local map tile server (offline competition mode)
- AI target annotation (YOLO pipeline)
- Mobile companion app
| Sector | Application |
|---|---|
| 🌾 Agriculture | Crop monitoring, precision spraying across large fields |
| 🔍 Search & Rescue | Wide-area coverage with coordinated swarm patterns |
| 🏗 Infrastructure | Pipeline and powerline inspection at scale |
| 🌲 Environment | Forest monitoring, fire detection |
| 📡 Mapping | Photogrammetry missions with automatic grid coverage |
| 🚒 Emergency Services | Real-time situational awareness for MChS / fire depts |
This project is in active development. Issues and PRs are welcome.
If you're working on:
- MAVLink protocol extensions
- New formation algorithms
- UI improvements
- Integration with specific flight controllers
Feel free to open an issue or reach out.
Built by a 16-year-old engineer-in-training with a background in embedded systems and a belief that drone swarm control software should be open, modern, and actually usable.
Started as a personal project for a UAV engineering track. Growing into a platform for real-world applications.
MIT License — free to use, modify, and distribute.
DRSKHUB — because one drone was never going to be enough.