โ˜… New

Replay the flight, frame by frame.

Drop a flight log onto 3D Map Explorer and watch the trajectory animate across the terrain against a scrubable timeline. The dispatcher sniffs the file - ArduPilot .tlog (MAVLink stream), .bin/.log (dataflash), or DJI DatCon .csv - routes to the right reader, and serves the time-animated track for post-flight analysis. The same log store feeds PPK and the fleet manager.

.tlog (ArduPilot MAVLink).bin / .log dataflash.csv (DJI DatCon) Magic-byte sniffingTime-animated trackPPK + fleet source
What it does

One reader dispatcher, every common log format.

FlightLogReader sniffs the extension (and, for ambiguous cases, a few magic bytes) and routes to the format-specific reader. Every reader is non-throwing - an unparseable input returns null and the caller surfaces a clean error. Nothing crashes the host.

  • .tlog โ†’ ArduPilotTlogReader - MAVLink stream with timestamps.
  • .bin / .log โ†’ ArduPilotBinReader - binary + text dataflash variants.
  • .dat (DJI) โ†’ DjiDatReader - honest stub; flagged as not-yet-implemented.
  • .csv โ†’ DjiCsvReader - DatCon export, the practical DJI path.
  • Magic-byte sniffing - extension-less files probed (MAVLink 0xFD/0xFE at byte 8, "DataFlash"/"ArduPilot" header).
POST /api/flightlog/ingest
// upload log โ†’ sniff โ†’ parse โ†’ store
{ "file": "flight-043.tlog" }
โ†’ routed to ArduPilotTlogReader
GET /api/flightlog/logs/{id}/track
{
  "points": [[34.05,-118.25,120,1690000000]],
  "startUtc": "2026-07-31T14:00Z"
}
โ†’ time-animated on the map
Flight-log replay with time-scrubber and animated trajectory over terrain
Why it matters

The shared backbone of post-flight

Flight-log replay isn't a one-off viewer - it's the trajectory source two other UAS features build on. Load a log once; replay it, post-process it for centimeter accuracy, and credit its hours to the fleet registry.

โ–ถ๏ธ

Time-animated replay

Track served per-log; scrub the timeline and watch position/attitude move across the terrain.

๐Ÿ“ก

Feeds PPK

PpkService reads the recorded trajectory straight from the log store for post-processing.

๐Ÿ—‚๏ธ

Feeds the fleet

Logged flights roll up into aircraft flight-hour totals and maintenance thresholds.

๐Ÿ”Ž

Non-throwing parse

Unparseable logs return null + a clean error - never crash the in-process server.

๐Ÿงช

Honest stubs

DJI .dat reader is stubbed and flagged - DatCon .csv is the supported DJI path today.

๐Ÿ—‘๏ธ

Lifecycle

Ingest, list, fetch track, delete - full CRUD over REST.

REST API surface

Ingest and replay from your own tools

CapabilityEndpointNotes
Ingest logPOST /api/flightlog/ingestSniffs extension/magic bytes โ†’ routes to reader
List logsGET /api/flightlog/logsStored flight logs
Log detailGET /api/flightlog/logs/{id}Metadata + summary
Time trackGET /api/flightlog/logs/{id}/trackTime-animated trajectory points
DeleteDELETE /api/flightlog/logs/{id}

Format support reflects FlightLogReader / ArduPilotTlogReader / DjiCsvReader on the current build. DJI native .dat is an honest stub - use DatCon-exported .csv for DJI logs today.

Part of the UAS loop

Plan โ†’ Preflight โ†’ Fly โ†’ Process โ†’ Exploit

Every flight, on the record

Ingest .tlog / .bin / .csv, replay the trajectory against a timeline, and feed PPK and the fleet registry from one store.