Prediction

Predict, don’t react.

Measurement-driven failover has a floor: probe interval × misses + smoothing. Fast platforms fall through it. The prediction layer feeds what the radios and the geometry already know — signal trends, positions, velocities, terrain — into the same per-link risk, and moves traffic before the failure. Opt-in, and advisory by principle.

Shipped · opt-in (prediction_source)Advises, never overrides
The lag

Probe interval + missed count + smoothing

At defaults: 250 ms probes × 5 misses ≈ 1.25 s to a hard verdict, with EWMA smoothing damping the early signal. That’s excellent for a substation and marginal for an airframe opening range at 20 m/s — it travels 25 m between “fine” and “gone”.

The insight

The future is already in the data

A fading RSSI trend, a diverging position track, a ridge sliding into the path — each predicts the failure seconds early. Atlas already carries all three signals: adapters feed radio telemetry, LSAs carry position and velocity, and the terrain crate reads the elevation model.

The principle

Prediction is advisory

It biases scheduling and routing costs; it never declares a link dead and never falsifies a measurement. Probes remain the sole authority on death — prediction just makes sure there’s nothing left riding the link when they finally say so. Dashboards always show the measured truth.

Shipped · opt-in

EWMA level + slope, projected ahead

Adapter-reported RSSI is smoothed and its slope projected 2 s forward with a 6 dB margin. Projected below the floor (−88 dBm default), the scheduler sees inflated loss — capped at 75%, so the link is never fully abandoned by prediction alone — and traffic migrates before probes miss. Rising trends are never penalised; a link recovering is left alone.

Position & velocity

The geometry is public. Use it.

prediction_source = "position": nodes share GNSS position and velocity inside the routing flood. Both endpoints project each other along their tracks; links about to stretch out of range get a rising loss penalty locally and an SPF cost penalty (capped ×4) mesh-wide — so both packet scheduling and multi-hop routes bend before the geometry breaks.

Short-reach Wi-Fi + long-reach RFD900 on a departing airframeSimulation
WIFIactive link
handoff lead time
0packets lost in gaps
Turn prediction off and the same pass produces the textbook failure: the short link carries until it silently dies, five probes must miss, and everything in that gap is gone. With it on, the handoff happens seconds early and the drop counter stays at zero.

Per-link range envelopes Shipped · opt-in

One global range model is wrong the moment the bond mixes radios. [[link]] max_range_m (with an optional warn radius, default 60% of max) scores each radio against its own reach: a 300 m Wi-Fi leg and a multi-kilometre telemetry-radio leg to the same airframe get different risk from the same distance — so the scheduler walks traffic onto the longer-legged link as range opens, before the short-range radio drops a single probe.

Terrain awareness In development

The case relative geometry can’t see.

Range is not reachability. Two ground stations twelve kilometres apart with a massif between them have no path at any transmit power — and the only nodes that can carry the traffic are moving. The ridge is the one thing in the scene that never moves.

01Line-of-sight clearance

The elevation profile between two positions, sampled: does the straight path clear the ground, and by how many metres.

02Fresnel-zone obstruction

Radio needs more than a line. A “clear” sightline grazing the ridge still starves the link when the first Fresnel zone is cut.

03Knife-edge diffraction

How much signal survives when an edge cuts the path — collapsed, with the other two, into one terrain risk per link, the same shape as range risk.

Ridge Valley — two ground stations either side of a fixed massif, three relays flying patrolsSimulation
current route
weakest hop clearance
0route changes
0 mstime routed over a dead hop
Status, precisely: nexus-atlas-terrain is built and unit-tested, and it drives the Atlas Sim mission visualiser today; wiring its risk output into live scheduling and SPF is the in-development step. Tracked on the roadmap; the simulator is on the demo index.
Relay selection

The same projection picks the next hop.

Prediction doesn’t only choose between the links on one hop — it chooses which neighbour to route through. Relay B is the lower-cost hop and is opening range; relay C is marginal and closing. Route metrics are sticky by design, so a reactive mesh holds B until the path actually fails and pays for everything in flight; the projected margin gives the SPF cost a reason to move ten seconds early instead.

Relay handover in a moving mesh — one scripted pass, run in both modesSimulation
Prediction
RELAY Bcarrying relay
handover lead time
0packets lost this run
What you’re watching: one scripted 34-second pass, identical in both modes, so the two runs compare — the footer timeline always carries both outcomes, one lit and one ghosted. Prediction only ever raises B’s routing cost as its projected margin approaches the floor; probes stay the sole authority on death, and B keeps carrying them after the traffic has left. Turn prediction off and the route holds B until the measurement fails, then waits out five missed probes with the stream still pointed at a dead neighbour.

Why a mesh doesn’t simply follow the strongest signal

It could — and it would flap. Route dampening exists because re-converging on every telemetry wobble costs more than it saves, so a link-state mesh keeps its next hop while that hop is usable and re-runs SPF when something breaks. Prediction resolves the tension without loosening the damping: the projected margin is just another term in the same per-link cost, so the route moves once, deliberately, at a moment of the operator’s choosing rather than at the moment of failure.

The fold

One risk model.

Range risk, signal risk and — once wired — terrain risk fold into a single per-link score with a .max(): whichever threat arrives first drives both the per-packet scheduler and the multi-hop route costs.

signal riskrange riskterrain risk — in developmentinterference-zone risk — research

One mental model, one tuning surface, one number to read in the stats snapshot. And the fold is open by design — the next layer under research puts declared interference zones — EW and EMCON — on the same map as terrain.

The shape of the thing

From reactive routing to predictive control.

Strip away the features and one substitution is left: the scheduler’s inputs stop being measurements of the recent past and start being projections of the near future. Signal trend, closing velocity, range envelope — and, once wired, terrain shadow — collapse into one per-link risk score that runs seconds ahead of the radio, and both the per-packet scheduler and the SPF costs consume it.

That is the reframing: not “find a path that works”, but a control loop holding a model of its own next few seconds. And the discipline that keeps it honest hasn’t moved — prediction biases costs, probes decide truth, and every projection is inspectable in the stats snapshot.

Request an evaluation

Hand over before it drops.

If your platforms move, reactive failover is already too late. Bring a mission profile and we’ll walk the prediction pipeline against it.