Ground station operator UI showing live drone positions on an OpenStreetMap layer, radar coverage circles, and inspector panel
Ground station UI, live map view with 4 drones, radar coverage, and inspector
Aerial view of three drones with sensor cones and routing arcs over a forest fire, Emergent Swarm Solutions branding
Emergent Swarm Solutions, the autonomous swarm use case the UI was built for
Operator UI showing swarm of 5 drones with transmitter distance readouts and lidar point cloud in bottom left viewport
Swarm view, transmitter distances, lidar point-cloud viewport (bottom left), per-drone inspector
The Emergent Swarm Solutions team working in the TU Delft Aerospace Innovation Hub office, drone hardware on the desk
TU Delft Aerospace Innovation Hub, where the software was built and tested

Problem

Build a ground station for autonomous drone swarm operators, from scratch, alone. Multiple operator clients needed to see real-time drone positions, live lidar point clouds, and mission state. The swarm AI ran separately; I had to intercept it and push data to every connected client simultaneously.

Built

Godot 2D/3D operator UI with custom shader-based lidar point-cloud rendering (MultiMesh for GPU-side instancing). Python ground station intercepting ROS2 topics, broadcasting over WebSockets to multiple simultaneous clients. Localisation in EN/FR/NL. My colleague's C++ trajectory planner integrated as a Godot native module (GDExtension) rather than re-implementing it.

Result

4 field and demo days. Dutch Ministry of Defence representatives operated the interface at a defence fair. Founders can provide a reference letter.

How it was built

Operator UI

Godot 4, 2D mission overview + 3D drone position viewport. Custom MultiMesh renderer for lidar point clouds (tens of thousands of points at real-time framerates). All UI code in GDScript with localisation keys for EN/FR/NL.

Ground Station

Python service subscribing to ROS2 topics (drone positions, lidar, mission state). Broadcasts over WebSockets to however many operator clients are connected. Designed for low-latency real-time data, not queuing.

C++ Planner Integration

My colleague wrote the trajectory planner in C++. Instead of re-implementing it in GDScript, I wrapped it as a GDExtension native module: the planner runs natively inside Godot, keeping the algorithm authoritative and performance on spec.

Lidar Rendering

Each lidar scan produces a dense point cloud. Pushed the rendering to the GPU using Godot's MultiMesh with a custom shader, colour-coding points by height and distance, updated per frame without blocking the main thread.

Field Deployment

4 deployment days: 3 field tests with the drone hardware, 1 defence fair demo. Built on site at TU Delft's aerospace engineering building, tested against the real swarm hardware.

Reference

Reference letter available from the founders of Emergent Swarm Solutions on request.