Skip to content
Back to all work

Case study

VGCS

A desktop ground control station for ArduPilot drones, with live video, gimbal control and fire observation tools.

Role
Full stack desktop development in Python
Platforms
Desktop
VGCS screenshot

01/Overview

VGCS is a custom ground control station for ArduPilot drones, built with Python, PySide6 (Qt 6) and pymavlink. It handles MAVLink telemetry in the background, shows live RTSP video, controls SIYI and Skydroid gimbals, plans missions, and adds DOOAF artillery fire observation: map-based target marking, fall-of-shot tracking and geo-referenced fire correction.

02/The brief

An operator needs telemetry, video, the map and the mission in one window that never freezes, plus observation tools that turn what the camera sees into coordinates on the map. General-purpose ground stations cover the flying but not the observation workflow.

03/What I built

Flight and telemetry

  • MAVLink telemetry processed on a background thread
  • Mission planning on the map
  • Live RTSP video from the aircraft
  • SIYI and Skydroid gimbal control

Fire observation

  • Map-based target marking
  • Fall-of-shot tracking against the marked target
  • Geo-referenced fire correction

04/Key decisions

  1. 01

    Keep telemetry off the UI thread

    A MAVLink link delivers many messages a second. Parsing them on the interface thread would freeze the map and the video, so telemetry runs on a worker and hands the interface only what changed, through Qt signals.

  2. 02

    Native desktop over a browser shell

    PySide6 gives native widgets, direct access to serial and network links, and video rendering without a browser in between. For a tool that runs on a laptop in the field, that reliability beats the convenience of a web UI.

  3. 03

    Make the map the workspace

    Targets are marked on the map, impacts are tracked against them, and corrections are expressed in geo-referenced terms. Keeping every observation step on the same map removes the mental conversion between what the camera shows and where it is.

  4. 04

    Build on ArduPilot and MAVLink, not around them

    pymavlink speaks the protocol ArduPilot already uses, so the station works with existing aircraft and firmware instead of needing custom flight-side code.

05/Outcome

A single desktop tool that covers telemetry, video, gimbal control, mission planning and fire observation, built for ArduPilot aircraft without changes on the flight side.

06/What I would do next

  • Replay recorded telemetry and video for after-action review
  • Geofence and link-loss alerts in the main window
  • Unit tests around the fire-correction math