RotorLab logoRotorLab
Evidence

Measured against real flights.

Every flight-log reader and every diagnostic in RotorLab was run against a corpus of real public flight logs and a farm of scripted simulator flights with known faults. This page shows what came out. Every number here is written by the validation run itself, dated, with its denominator, and with the limits stated.

An unmanned aircraft with spinning propellers against a blue sky

Formats

Every log format we claim, file by file

Detection is whether the reader identified the format from the bytes alone; parsed is whether the analysis completed; 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). Research telemetry files in formats we do not claim were kept as negative controls: the reader must refuse them cleanly rather than read them into nonsense.

A drone controller set up beside a laptop and tablet
FormatFilesDetectedParsedPhysically saneChecks with dataFlight hours

"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.

PX4

Against the catalog's own truth

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.

A drone being assembled at a desk with a laptop

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 excluded from that comparison.

Diagnostics

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. It is the honest map of what a given log can support.

Check
Known answers

Scripted flights with faults we planted

Real logs prove a reader reads. They cannot prove a diagnostic catches a fault, because nobody labels their crash logs. So a farm of simulator flights was scripted across the airframes RotorLab names, ArduPilot SITL and PX4 simulation-in-hardware, each with a labeled fault or none: 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. The check has to fire on the fault and stay quiet on the clean flight. Simulated flights prove the logic; they do not stand in for real air, and the page says which results come from which.

A technician repairing a drone on a workbench
DiagnosticFaults plantedCaughtRecallClean flightsFalse alarms

Fleet upload

The same files through Fleet Manager

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

A technician preparing a drone for flight beside a utility truck
FormatFilesAcceptedAnalyzed (under the size gate)Above the gate, storedDuration agrees with the analyzer
Method and sources

How it was measured

The corpus is public flight data, held outside the product and never redistributed. Each file was analyzed independently under a time limit and scored for format detection, completion, physical sanity, diagnostic coverage and, for PX4, agreement with the catalog. The fleet leg filed each file against a flight in a test organization and compared the stored record with the analyzer's own reading. Each simulator flight is scripted with its fault applied at a set time and its expected outcome recorded beside the log; the analysis is then scored against that record.

A drone flying over terraced fields
Limits

What this 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.
  • The harmonic-notch check needs ESC shaft speed, which the simulator's telemetry does not carry; it is verified on real logs.
  • Simulated flights prove that a check fires on a known fault and stays quiet on a clean one. They are not real air, and one check is not scored on them: battery sag, 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.
Reading the numbers

Denominators, not adjectives

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. Each run feeds the next release, and the next run measures it; the release notes carry that history.

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.

The physics behind the Builder has its own page: How we validate. Questions about this page or the method: contact us.