Work · 03 / 06 · 2025
Gopher Drone Sim
3D campus drone delivery simulation. A C++ engine with priority queues, weather, and leader/helper handoff talks to a Three.js frontend over WebSockets.
- Role
- Team of four; systems and simulation engineering
- Year
- 2025
- Stack
- C++libwebsocketsMakeTypeScriptThree.jsViteDocker
Problem
Autonomous delivery is a scheduling and resilience problem before it is a flying problem. We wanted a simulation where you could schedule packages across a real campus map, change priorities mid-flight, watch batteries and weather interfere, and export the numbers.
What I built
The C++ backend owns the world: entities, routing strategies, package queues, a shared wind field, and the multi-drone handoff protocol. The browser is a Three.js view and control panel, kept in sync over a WebSocket.
A few systems do the interesting work. Packages carry a shipping priority (Expedited, Standard, No Rush) that reorders the queue until a drone commits. Routing runs A*, Dijkstra, BFS, or DFS over an OpenStreetMap graph of the University of Minnesota campus. When a leader drone's battery drops below 20% it publishes a handoff request and the nearest idle helper takes the package while the leader recharges. Weather is a single wind vector every drone reads, with damage layered on via a decorator so the base drone class stays untouched. A process-wide data manager collects distance and delivery counts for CSV export.
Entities are created through factories so new types plug in without rewriting the sim loop. The whole thing ships as a Docker image.
Outcome
Built with Xander Hill, Casey Paulson, and Ryan Hale as a systems project at the University of Minnesota; this is the maintained personal copy. There is a demo video and a public Docker image (prashantpilla/gopher-drone-sim).