Skip to main content
Evidence

Measured against real flights

RotorLab's flight-log readers and diagnostics were run against thousands of real public flight logs and a farm of scripted simulator flights with planted faults. Every figure on this page is written by the validation run itself, dated, with its denominator.

A filed flight's record in RotorLab: the crash verdict, the stored log file and the findings the reader raised from it
Method

What was measured, and how

Three legs, each with its own answer key, each scored by the run and not by hand.

  • Real public logs, one file at a time. Each file was analyzed on its own under a time limit and scored for format detection, completion, physical sanity and which checks had their data.
  • An answer key we did not write. PX4 Flight Review publishes each log's duration and vehicle type; the reader's own reading was compared with it, log by log.
  • Faults we planted ourselves. Scripted simulator flights carry a labeled fault or none, so a check is scored on firing when it should and staying quiet when it should.
The RotorLab Log Analyzer reading an ArduPilot dataflash log: altitude, attitude tracking, motor outputs and throttle against hover
The reading under testThe same analysis a filed log gets: the vehicle, the source format, the flight and its charts, read from the bytes alone.
How the PX4 catalog comparison works

PX4 Flight Review publishes, for each public log, the flight's duration and vehicle type as the uploader's tooling recorded them. Those are an independent answer key: the reader's duration, vehicle family, firmware release and identified airframe were compared with it, log by log.

Vehicle family compares the catalog's type to what the reader inferred from the log; VTOL types count as agreeing with multirotor or fixed wing because PX4 reports whichever mode was active. Airframe agreement is stricter: a tiltrotor must come back as a tiltrotor. Catalog types that do not describe an airframe (rockets, submarines, balloons, "generic") are left out of that comparison rather than counted either way.

Every claimed format, file by file

Detected, read, physically sane, and the share of checks that had their data, for every format RotorLab claims. The last two rows are files it is meant to refuse.

FormatFilesDetectedParsedPhysically saneChecks with dataFlight hours
What each column means

Detection is whether the reader identified the format from the bytes alone. Parsed is whether the analysis completed. Physically sane is whether the flight it read passes physical checks: duration, time order, pack voltage in range, current in range, armed time within the flight.

"Checks with data" is the share of crash-layer and diagnostic checks that had the records they read in that format. A telemetry log never carries the rate controller; a consumer app log never carries motor outputs. The share says what a format can support, not whether anything was wrong.

Research telemetry files in formats RotorLab does not claim were kept as negative controls: the reader must refuse them cleanly rather than read them into nonsense. Refusing them on purpose is part of the proof.

Which checks answer, on which kind of log

Each diagnostic reads specific records. This table is the share of logs, by family, on which the check had its data and ran: the map of what a given log can support.

Check

Scripted flights with planted faults

Real logs prove a reader reads. They cannot prove a diagnostic catches a fault, because nobody labels their crash logs. So each simulator flight carries a fault we planted, or none, and the check is scored on both.

DiagnosticFaults plantedCaughtRecallClean flightsFalse alarms
The airframes, the crash verdict and what is not scored

The farm runs across the airframes RotorLab names, on ArduPilot SITL and PX4 simulation-in-hardware, each flight scripted with its fault applied at a set time and its expected outcome recorded beside the log. The faults: vibration, accelerometer clipping, compass interference, GPS glitch and loss, estimator upsets, IMU disagreement, a motor lost in flight, a pitot failure, a stick-in-corner departure.

Airframe families identified from the log

Reading the table

The crash verdict

Simulated flights prove that a check fires on a known fault and stays quiet on a clean one. They are not real air, and the page says which results come from which.

The same files through Fleet Manager

A log filed against a flight goes through the same reader and then onto the aircraft's record. Every claimed-format file was pushed through that path and the record was compared with the analyzer's own reading of the same bytes.

Format by format: accepted, analyzed, and duration agreement

Accepted is the share of files Fleet Manager took; analyzed is the share read at filing time, under the size gate. A file above the gate is stored with the flight and counted in its own column. Duration agrees is the share of compared files whose stored flight duration equals the analyzer's reading of the same bytes.

FormatFilesAcceptedAnalyzed (under the size gate)Above the gate, storedDuration agrees with the analyzer

How to reproduce it

Public flight data, held outside the product and never redistributed: the run, the sources and the refusals, for the evaluator who checks the method before the numbers.

The run

Dated, not typed

The refusals

Negative controls

The physics

A page of its own

The Builder's equations are re-run in your browser against worked examples at How we validate. Questions about the method: contact us.

The sources
PX4 Flight Review public logsThe public catalog of flight logs uploaded by PX4 pilots, used with its published duration and vehicle type as the answer key.
BASiC, Zenodo record 8199999Seventy ArduPilot flights with labeled sensor failures, as text dataflash exports.
IMUFUZZER, Zenodo record 17219995ArduPilot simulator flights under sensor attack, as dataflash logs.
ArduPilot Discourse attachmentsDataflash and telemetry logs pilots posted publicly.
Public DJI, Parrot and CSV setsForensic DJI flight records published for research, Parrot FreeFlight logs, and Airdata, Litchi and DatCon exports from public repositories.
ArduPilot SITL, 4.6.3The simulator farm: stock airframe definitions, scripted missions, timed fault injection.
What this run does not show
  • Autel: no public Autel Explorer log exists anywhere we could find, so only detection of that format is validated.
  • DJI onboard .DAT files are recognized and refused; they are not a claimed format.
  • Encrypted DJI flight records (format 13 and later) are read with DJI's decryption key. The run behind this page had no key, so those records are left out of the DJI rows rather than counted either way.
  • The harmonic-notch check needs ESC shaft speed, which the simulator's telemetry does not carry, so it has data only on real logs.
  • Battery sag is not scored on the simulator, because the simulator's pack does not sag under load.
  • Catalog types are uploader-declared. Where the catalog's own label does not describe an airframe, that log is left out of the airframe comparison rather than counted either way.

Every percentage on this page is over the files, logs or flights named beside it. "Read" means the analysis completed; "physically sane" means what it read passes physical checks; a coverage share says what a log can support, not whether anything was wrong.

See it on your own logs.

Read one free, or talk to us about measuring your fleet's formats.