Pathfinder EUDIS Defence Hackathon 2026, Cyprus Edition

Pathfinder keeps a drone's position after GPS is jammed

Jam the GPS and the autopilot's position guess runs away; Pathfinder keeps it on the track.

Every number on this site comes from the ArduPilot simulator. None is from a real flight yet.

What happens when GPS is jammed A drone flies a planned route. It enters a GPS-jammed zone. ArduPilot alone drifts away from the route and ends 2,986 m off after five minutes; Pathfinder follows the route and ends 5.8 m off. Schematic route; the two distances are the measured medians. GPS jammed take-off true track ArduPilot alone: 2,986 m off Pathfinder: 5.8 m off
Median of the simulated flights, five minutes after the jam; the route is a schematic.
The longer version

When satellite navigation is jammed or faked, the autopilot's position guess runs away. Pathfinder runs beside ArduPilot, reads only the drone's own sensors, and hands the autopilot a position it can trust, with an honest error radius.

Pitch deck
The jury presentation: the problem, how Pathfinder works, and what we measured. How it works, as slides.
Flight Library
Recorded simulator flights on a real map. Watch the true track, ArduPilot alone and Pathfinder split apart after the jam.

How it works

The drone's own sensors in; a position ArduPilot can trust out, the moment GPS stops being trustworthy.

How Pathfinder turns the drone's own sensors into a positionMotion sensors: gyro + accelerometer, read 200 times a second; then Velocity Predictor: ONNX network reads the last 1 s: air speed plus its own doubt (fed by Predictor Adapter: retunes it while GPS is still trusted); then Position Estimator: Kalman filter (ESKF) weighs every input by its doubt, 200 Hz (fed by Barometer, compass: and a drag model); then Navigator: GPS while it is trusted, otherwise our position (fed by GPS Integrity Monitor: Trusted, Suspect or Rejected); then ArduPilot: gets lat, lon, alt and an error radius.Motion sensorsgyro + accelerometer,read 200 times a secondVelocity PredictorMLONNX network reads thelast 1 s: air speedplus its own doubtPredictor Adapterretunes it while GPSis still trustedPosition EstimatorKalman filter (ESKF)weighs every input byits doubt, 200 HzBarometer, compassand a drag modelNavigatorGPS while it is trusted,otherwise our positionGPS Integrity MonitorTrusted, Suspector RejectedArduPilotgets lat, lon, alt andan error radiusHow Pathfinder turns the drone's own sensors into a positionMotion sensors: gyro + accelerometer, read 200 times a second; then Velocity Predictor: ONNX network reads the last 1 s: air speed plus its own doubt (fed by Predictor Adapter: retunes it while GPS is still trusted); then Position Estimator: Kalman filter (ESKF) weighs every input by its doubt, 200 Hz (fed by Barometer, compass: and a drag model); then Navigator: GPS while it is trusted, otherwise our position (fed by GPS Integrity Monitor: Trusted, Suspect or Rejected); then ArduPilot: gets lat, lon, alt and an error radius.Motion sensorsgyro + accelerometer,read 200 times a secondPredictor Adapterretunes it while GPSis still trustedVelocity PredictorMLONNX network reads thelast 1 s: air speedplus its own doubtBarometer, compassand a drag modelPosition EstimatorKalman filter (ESKF)weighs every input byits doubt, 200 HzGPS Integrity MonitorTrusted, Suspector RejectedNavigatorGPS while it is trusted,otherwise our positionArduPilotgets lat, lon, alt andan error radius
Grey sensors, green Pathfinder, amber GPS, blue autopilot; dashed boxes feed the box below.
About these pages

How the position estimator and the speed AI work, how the speed AI was trained and scored on flights it never saw, and how every number is tested. The full method traces every constant to its file and line; the system map shows every process and message between the sensors, the navigator and ArduPilot.

Results

ArduPilot alone drifts kilometres within minutes; Pathfinder's median stays within metres.

How far off the drone is after the jam

Position error after the GPS jamMedian of 60 simulated flights. Five minutes after the jam ArduPilot alone is 2,986 m off and Pathfinder is 5.8 m off.1,000 m2,000 m1 min2 min3 min4 min5 minArduPilot alone, 2,986 mPathfinder, 5.8 m

Metres off at 1, 2 and 5 minutes

Median position error 1, 2 and 5 minutes after the jam, log scale1 min: ArduPilot alone 550 m, Pathfinder physics only 5.5 m, with speed AI 5.0 m; 2 min: ArduPilot alone 1,152 m, Pathfinder physics only 3.1 m, with speed AI 3.0 m; 5 min: ArduPilot alone 2,986 m, Pathfinder physics only 5.8 m, with speed AI 3.5 m.1 m10 m100 m1,000 m10,000 m1 min550 m5.5 m, 5.0 m2 min1,152 m3.1 m, 3.0 m5 min2,986 m5.8 m, 3.5 m
  • ArduPilot alone
  • Pathfinder, physics only
  • Pathfinder with the speed AI
How to read these numbers

Median position error after GPS is jammed, 60 simulated flights; fewer flights run the full five minutes (25 for ArduPilot, 18 for Pathfinder at 5 minutes). The left chart is Pathfinder physics only: jam detection, a drag model and learned wind. A median hides the tail: at 5 minutes a quarter of Pathfinder flights end more than 95 m off.

The results page lists every result, including the runs that lost, and the demo page has a recorded video of each demo route with GPS jammed.

How we test

Every number comes from one pipeline whose pass marks were locked before any result existed.

How every number on this site is producedScenario: YAML: route, wind, jam time, fixed seed (fed by Held-out seeds: never used in training); then Simulated flight: real ArduPilot (SITL) flies it closed loop; then Scoring: against true position, read at 1, 2 and 5 min; then Locked tests: AC-01 to AC-09, pass marks hash-locked 7 Oct; then Merge rule: merges only if it beats the best at 2 min.ScenarioYAML: route, wind,jam time, fixed seedHeld-out seedsnever used in trainingSimulated flightreal ArduPilot (SITL)flies it closed loopScoringagainst true position,read at 1, 2 and 5 minLocked testsAC-01 to AC-09, passmarks hash-locked 7 OctMerge rulemerges only if it beatsthe best at 2 minHow every number on this site is producedScenario: YAML: route, wind, jam time, fixed seed (fed by Held-out seeds: never used in training); then Simulated flight: real ArduPilot (SITL) flies it closed loop; then Scoring: against true position, read at 1, 2 and 5 min; then Locked tests: AC-01 to AC-09, pass marks hash-locked 7 Oct; then Merge rule: merges only if it beats the best at 2 min.Held-out seedsnever used in trainingScenarioYAML: route, wind,jam time, fixed seedSimulated flightreal ArduPilot (SITL)flies it closed loopScoringagainst true position,read at 1, 2 and 5 minLocked testsAC-01 to AC-09, passmarks hash-locked 7 OctMerge rulemerges only if it beatsthe best at 2 min

How the speed AI is trained

Judged only on flights it never saw, then carried to the drone as one ONNX file.

How the speed AI goes from simulated flights to the droneSimulated flights: 1,200 SITL flights: quad, hexa, octa, wind 0 to 12 m/s; then Train: causal TCN on the last 1 s of sensors and motor commands; then Score held-out: 12 flights it never saw, 2 min: 547 m against ArduPilot's 2,059 m (fed by Speed AI alone: no filter, no GPS); then Export: one ONNX file, velocity-v3.onnx; then On board: loaded by pathfinderd, next to ArduPilot.Simulated flights1,200 SITL flights:quad, hexa, octa,wind 0 to 12 m/sTrainMLcausal TCN on thelast 1 s of sensorsand motor commandsScore held-out12 flights it never saw,2 min: 547 m againstArduPilot's 2,059 mSpeed AI aloneno filter, no GPSExportone ONNX file,velocity-v3.onnxOn boardloaded by pathfinderd,next to ArduPilotHow the speed AI goes from simulated flights to the droneSimulated flights: 1,200 SITL flights: quad, hexa, octa, wind 0 to 12 m/s; then Train: causal TCN on the last 1 s of sensors and motor commands; then Score held-out: 12 flights it never saw, 2 min: 547 m against ArduPilot's 2,059 m (fed by Speed AI alone: no filter, no GPS); then Export: one ONNX file, velocity-v3.onnx; then On board: loaded by pathfinderd, next to ArduPilot.Simulated flights1,200 SITL flights:quad, hexa, octa,wind 0 to 12 m/sTrainMLcausal TCN on thelast 1 s of sensorsand motor commandsSpeed AI aloneno filter, no GPSScore held-out12 flights it never saw,2 min: 547 m againstArduPilot's 2,059 mExportone ONNX file,velocity-v3.onnxOn boardloaded by pathfinderd,next to ArduPilot
What else we tried

The training record lists every model, including the ones that won offline and lost in flight: an ensemble, a drift-correcting AI, per-airframe fine-tuning, in-flight adaptation and a wind model. Pathfinder's headline numbers come from the physics filter; the speed AI is an optional input to it.