Inspiration
Neptune North asked for actors that work together, decide independently and keep making progress when communications fail. Disaster search is where that matters most. Radios get jammed, the tower falls and drones are lost, and a swarm that waits for orders stops searching exactly when people need finding.
What it does
- A swarm of drones searches a disaster zone for survivors with no central controller. Every drone computes the same split of the remaining work from what it knows, so drones that know the same things agree without voting.
- When links fail, each drone keeps searching on its own. A silent teammate's area is held for 8 seconds in case it comes back, then the others take it over.
- When links return, drones swap exactly what the other is missing. Records only ever grow, so merging in any order, even twice, gives the same result. Nothing is lost or double-counted.
- Judges break things live: drag to jam radios, kill or silence drones, knock out HQ, or play the ⚡ Storm scenario. Our swarm runs side by side with a central controller and pre-planned sectors on the same map with the same failures.
- One drone is real: an NVIDIA Jetson Orin Nano with a camera. It detects people on the device, blurs faces before showing anything, and streams its view to the dashboard. Pull its cable: the feed shows SIGNAL LOST, but it keeps searching alone, holds anything it finds, and shares it the moment it reconnects. Drones announce events out loud ("Drone three down", "Survivor located at twelve, seven"), with voices generated by ElevenLabs and played offline.
Results
- Storm (centre jammed, HQ knocked out, a drone killed): ours covers 100% and finds 8/8 survivors in 124 s; the central controller takes 144 s; pre-planned sectors never finish (88.6%, 5/8 found).
- No failures: all three swarms tie, so the comparison is fair.
- 30 random disasters: ours completes 100% of them and is fastest (113 s median, central 129 s); pre-planned sectors complete only 33%.
How we built it
- Browser simulation in plain JavaScript, fully offline: a lockstep world engine, a radio layer (range, jamming, cuts, packet loss) and three mirrored worlds from one seed.
- Drone brain with:
- a grow-only observation set with version vectors;
- gossip heartbeats with sync replies (multi-hop for free);
- heartbeat failure detection (ALIVE → RESERVED → DROPPED);
- a deterministic planner that cuts a shared lawnmower path into equal segments, with work stealing.
- Jetson: the same brain ported to Python, plus a WebSocket node, OpenCV person and face detection with on-device face blurring, and an MJPEG feed over a direct Ethernet cable. A pulled cable is detected only by heartbeat timeout, exactly like a lost radio.
- Tests: 150+ automated tests, including acceptance tests for our claims: fair comparison, lossless merge, and isolated drones never stopping.
Challenges we ran into
Our first planner re-split the unsearched cells equally every tick. Cells sensed in transit then shifted every drone's boundaries, and our swarm finished 35% slower than plain pre-planned sectors. Fixed segments plus work stealing solved it. The central baseline stalled on every cell because of the report → plan → command delay, until HQ sent each drone its whole area.
Accomplishments we're proud of
An honest comparison where only "who decides" differs, and a real drone that survives a cable pull in front of you.
What we learned
How gossip, version vectors and grow-only data make "merge whenever you reconnect" safe, and how easily a fair-looking benchmark can be unfair.
What's next
- Real radios (LoRa or Wi-Fi mesh).
- Obstacles and batteries.
- A second drone confirming each camera detection.
Built With
- elevenlabs
- github
- github-actions
- html5
- javascript
- node.js
- nvidia-jetson
- opencv
- python
- websockets