Live simulation below Autonomy stack v0.9 Validated in Unreal Engine 5.4.4 Pre-flight-test

Search the
whole area.
Nobody flying.

Skein is a decentralized autonomy stack for drone swarms. Every aircraft claims its own ground, resolves its own collisions, and acts on what it sees — with no ground controller and no pre-planned route. Fifteen aircraft cut a full-grid search from 18 minutes to 3.

Sim / Grid 10×10 · 100 m × 100 m
Phase — transit to search area

Running in your browser: greedy decentralized cell claiming, inverse-square potential-field deconfliction, the four-state mission machine, leader election on detection, and consensus formation slots. Same logic as the C++ implementation, time-compressed.

Sec 01 · The problem

One pilot,
one aircraft,
one line of sight.

Drones already fly search patterns, inspect pipelines, and watch borders. Almost all of them are still flown one-to-one — a trained operator per airframe, a radio link that has to hold, and a route drawn before takeoff by someone guessing where the subject went.

That model doesn't scale to area. Doubling the ground you cover means doubling the crew, and every additional aircraft adds a deconfliction problem the operators have to solve in their heads. When the link degrades — canyon, forest canopy, jamming, distance — the fleet stops being useful exactly when it matters most.

The bottleneck was never the airframe. It's coordination.

Fail 01 Centralized planners are a single point of failure. Lose the controller and the swarm is a scattered set of expensive gliders. 1 → 0
Fail 02 Pre-planned routes can't respond to what the aircraft actually sees. A detection halfway through a lawnmower pattern doesn't change the pattern. Static
Fail 03 Crew scales linearly with aircraft. Coverage is capped by payroll, not by physics. 1:1
Fail 04 Almost every swarm research platform stops at looking. Nothing coordinates the aircraft to physically do something once the target is found. Sense only
Sec 02 · The stack

Five layers.
No controller.

Skein is not a drone. It's the software layer between an airframe and a mission — flight control, deconfliction, task allocation, perception, and multi-aircraft physical action, built so that removing any one aircraft degrades coverage and nothing else.

Written in C++ inside Unreal Engine 5.4.4, with the perception service in Python. Every subsystem below is implemented and running, not specified.

Layer 01 · Flight control

Six independent PID axes

Each aircraft runs six separate proportional-integral-derivative controllers — roll, pitch, yaw for orientation; altitude, forward, right for translation. Each holds its own gains, integral accumulator, and previous error, so a lateral correction never destabilises the altitude hold.

u(t) = Kp·e(t) + Ki∫e(τ)dτ + Kd·de(t)/dt
  • Anti-windup clamping bounds the integral term between IntegralMin and IntegralMax, so a sustained error under actuator saturation can't accumulate into an overshoot.
  • Output clamping keeps the control signal inside physical limits — no commanded thrust the motors can't deliver.
  • Reset on arrival zeroes every controller once the aircraft is inside tolerance of its target, so it settles instead of hunting.
Layer 02 · Deconfliction

Potential-field collision avoidance

Every aircraft continuously sums repulsion vectors from the neighbours and obstacles inside its avoidance radius. Force follows an inverse-square law, so a distant aircraft barely registers and a close one dominates the trajectory.

Frep = Σ (Q · n̂) / D²  ·  n̂ = (Pself − Pother) / ‖Pself − Pother‖
  • Obstacles are found by sphere trace against world geometry each tick — no prior map required.
  • A MinDistance floor prevents the force exploding as separation approaches zero.
  • The resulting vector is clamped and summed with the PID movement force, so avoidance bends the path rather than overriding it.
Layer 03 · Task allocation

Self-claimed search cells

The search area is divided into a grid. Each aircraft independently requests an unsearched cell, checks it isn't already claimed, and takes it. There is no assigner — coverage is an emergent property of every aircraft claiming the nearest free ground.

// each aircraft, independently, every tick FVector Proposed = FindUnsearchedCell(); if (!IsCellOccupied(Proposed)) { FScopeLock Lock(&GridLock); // no double-claims TargetPosition = Proposed; bIsSearching = true; }
  • A scoped lock on the shared grid prevents two aircraft racing for the same cell.
  • Losing an aircraft mid-mission releases its cell back to the pool. The swarm reallocates without being told.
Layer 04 · Perception

Onboard detection at 30 FPS

Each aircraft renders its camera to a texture, compresses to JPEG, and streams frames over UDP to a detection service running a custom-trained YOLOv8 model on CUDA. Detections above 0.90 confidence return the bounding-box centre, which is deprojected from screen space to a world coordinate and range-checked with a line trace.

  • Frames captured every 0.033 s — roughly 30 FPS per aircraft.
  • Inference isolated in a separate process, so a perception fault can't take down flight control.
  • Tensors converted HWC → CHW and normalised on-device; the model is swappable per mission.
Layer 05 · Coordinated physical action

Consensus formation and net extraction

This is the layer almost no swarm platform has. When an aircraft detects the subject it becomes the leader — not by election overhead, but because it is the one that found the target. The remaining aircraft converge on formation slots defined relative to the leader and hold that geometry while a rescue net is deployed and carried to a safe drop-off point.

vi = Kp(Pi − xi) + Kc Σj∈Ni(xj − xi − dij)
  • Each aircraft holds position using only its own slot error and its neighbours' relative positions — no global state.
  • Velocity is smoothed through interpolation, so the formation converges without oscillation.
  • Only the leader needs the drop-off coordinate. Followers need nothing but the leader's relative position — the smallest possible message on a degraded link.
  • If an aircraft drops out of formation, a waiting aircraft takes its slot. The geometry survives the loss.
Sec 03 · Mission machine

Four states.
Every aircraft
runs all four.

A mission is a state machine evaluated on every aircraft, every tick. Because each aircraft holds the whole machine, any one of them can carry the mission alone if the rest are lost.

EUS_IDLE → Travel

Idle

Station-keeping. Controllers reset and held at zero error so the aircraft floats stable on its position, drawing minimum correction effort while it waits for tasking.

EUS_TRAVEL → Search

Travel

Transit to the search area. PID drives the trajectory, potential fields bend it around terrain and neighbours. Arrival inside tolerance flips the state — no waypoint list, no operator call.

EUS_SEARCH → Extract

Search

Claim a cell, fly it, sweep it, mark it searched, claim the next. Camera streams to the detection service throughout. The loop runs until the grid is exhausted or someone gets a hit.

EUS_EXTRACT → Complete

Extract

A detection promotes the finder to leader and broadcasts the coordinate. Everyone converges, takes a formation slot, deploys the net, and carries the subject to the drop-off point.

Detection path · frame to coordinate
Hop 01CaptureScene capture → render target → pixel array, every 0.033 s
Hop 02CompressBGRA → JPEG via image wrapper, quality 100
Hop 03StreamUDP datagram, per-aircraft queue keyed by UAV ID
Hop 04InferYOLOv8 custom weights, CUDA, class person, conf > 0.90
Hop 05LocateBox centre → screen-to-world deprojection → line trace for range
Hop 06ActPacked coordinate returns to the aircraft; state flips to Extract
Sec 04 · Measured

Coverage scales
with aircraft.

A 10 × 10 grid — 100 cells over roughly 100 m by 100 m — searched to completion, three times, in clear conditions. The only variable was fleet size.

SEARCH COMPLETION TIME · MINUTES 20 15 10 5 0 18:00 9:00 3:00 5 AIRCRAFT 10 AIRCRAFT 15 AIRCRAFT 100 CELLS · CLEAR CONDITIONS · UNREAL ENGINE 5.4.4

Tripling the fleet cut completion time by 6×. The super-linear gain between 10 and 15 aircraft comes from fewer aircraft ending the mission stranded on the far side of the grid — and it is exactly the regime where naïve allocation starts wasting flights on cells someone else already swept. Closing that is the highest-value next piece of work.

Flight control, 60 s log

AxisBehaviour
RollOutput held at zero. Orientation never perturbed by translation.
PitchOutput held at zero across the full run.
YawOutput held at zero. Heading stable through every cell transition.
AltitudeInitial transient, then locked to setpoint and held — including through a mid-run disturbance at t≈42 s.
ForwardTracks stepped setpoints with small lag. Correction spikes at each new cell, then settles.
RightCyclic lateral steps tracked with mild overshoot — the loosest axis, and the first candidate for gain scheduling.
RigRTX 4070 Laptop · i9-14900HX · 16 GB · Windows 11. Single machine, all aircraft and inference.1 box
Sec 05 · Where it deploys

Change the model.
Not the swarm.

Search-and-rescue is where this was built and proven, but nothing in the coordination layer is specific to finding people. Cover an area, decide what matters, converge on it. The detection model and the payload change per mission. The stack underneath does not.

Beachhead

Wilderness & mountain rescue

Volunteer teams search on foot in daylight windows, with the probability of survival dropping by the hour. A swarm sweeps the search area in minutes and converges the moment anything matches.

Model: person · Payload: rescue net
Adjacent

Disaster response

Flood, earthquake, collapse. Ground access is gone and infrastructure is down — the exact condition where a fleet that needs no controller and no network is worth more than one that does.

Model: person, thermal · Payload: supply drop
Defence

ISR & persistent surveillance

Wide-area reconnaissance and force protection over ground no single airframe can hold. Decentralization is the requirement, not a feature: the stack is built to keep working when the link to the operator is degraded or denied.

Model: vehicle, movement · Payload: sensor
Public safety

Wildfire

Perimeter mapping and crew tracking, updated continuously rather than per overflight. Aircraft can be lost to conditions without the mission stopping.

Model: thermal, smoke · Payload: sensor
Border & maritime

Coastal and littoral patrol

Long baselines, small targets, poor connectivity. Coverage per crew-hour is the operating metric, which is precisely the number this stack moves.

Model: vessel, person-in-water · Payload: flotation
Commercial

Infrastructure inspection

Transmission corridors, pipelines, rail, solar. Linear and area assets currently inspected one aircraft at a time on a scheduled cycle — the least glamorous market and the one with a repeatable budget.

Model: defect classes · Payload: sensor

The wedge is rescue: a market that will tolerate an early system, judges on outcome rather than procurement checklist, and generates the flight hours and edge cases that make every later market defensible.

Sec 06 · Honest state

What's true
today.

Every subsystem is implemented and measured in simulation. None of it has flown. Here is exactly where the line sits and what closes each gap.

Simulation only
Potential fields have local minima
Fixed PID gains
Greedy cell allocation
Comms modelled as shared state
Detection validated in clear daylight
Energy not modelled
Sec 07 · The ask

Get it
off the ground.

The coordination layer works. The next twelve months are about proving it on real airframes in real conditions, with a rescue service flying it — not a demo, a deployment.

Raising a pre-seed to fund hardware, flight testing, and the first operator partnership.

Request the deck Technical walkthrough
Milestone 01 · Months 0–4Port the stack to real flight hardware. Hardware-in-the-loop, then three airframes flying autonomous grid coverage outdoors.
Milestone 02 · Months 4–9Thermal and low-light perception, mesh networking under real link loss, auction-based allocation. Fly a fifteen-aircraft coverage test.
Milestone 03 · Months 9–14First operator partnership with a mountain rescue or coastguard team. Live callouts, logged outcomes, a reference customer.