After a PX4 flight, the fastest honest route from “something felt wrong” to a cause is a repeatable post-flight workflow in PlotJuggler: load the ULog file, plot the signals that describe that kind of problem, derive the quantities the raw log does not show directly, and save the view so the next flight is reviewed the same way. This is not a workflow we invented for this page. The official PX4 documentation itself carries a full “Log Analysis using PlotJuggler” guide — covering installation, the ULog workflow, and a Lua custom series that converts quaternions into roll, pitch and yaw — and this guide follows that same structure, adding the review discipline around it.
Step 1: Load the ULog and orient yourself
Open the flight’s ULog file in PlotJuggler using its ULog loader. Before judging anything, establish the basic shape of the flight: when it armed, when it took off, which flight phases are present, and where the moment you care about sits on the timeline. Zoom to that window first. Most post-flight mistakes come from reading a signal across the whole log when the question is really about ten seconds of it. If the file is very large or the machine struggles while scrubbing, work through the fixes in PlotJuggler Is Slow with Large Files before you start interpreting plots — a lagging view makes normal behaviour look like spikes.
Step 2: Plot by question, not by topic list
A ULog contains far more series than any one review needs. Work question by question, adding only the signals that answer it:
| Review question | Workflow move in PlotJuggler | What you are looking for |
|---|---|---|
| Did the vehicle track what it was asked to do? | Plot commanded and actual values for the same quantity on one chart. | Sustained gaps, lag, or one side consistently leading the other. |
| Was vibration part of the story? | Isolate the relevant window, then compare the vibration-related signals before, during and after the event. | A change that starts with the event, rather than vibration that was present all flight. |
| Did a controller work harder in one phase? | Use built-in transforms such as derivative or moving average to make a noisy series readable, and compare phases side by side. | A phase where the derived series behaves differently from the rest of the flight. |
| What was the attitude at that moment? | Build the PX4 guide’s Lua custom series (Step 3) instead of reading raw quaternion components. | Roll, pitch and yaw in angles a human can actually judge. |
Step 3: Derive attitude with the Lua quaternion series
Quaternions are compact for machines and unreadable for people. The PX4 guide’s answer — and the pattern worth copying — is a Lua custom function that takes the quaternion components as inputs and outputs roll, pitch and yaw as separate, plottable series. Once built, those derived series behave like any other signal: you can overlay them with commands, events and vibration views, and save the function with your layout so you never rebuild it. If custom functions are new to you, our Lua custom functions tutorial explains the editor, multi-input functions and the built-in transforms (derivative, integral, moving average, scale) that pair with them. PlotJuggler 4 also adds Python as an alternative scripting language for derived series, but the PX4-documented workflow is Lua, and it works on the established line as well.
Step 4: Check the event window, then the whole flight
- Return to the moment that prompted the review and read it with the derived series in place.
- Widen the view: does the same pattern appear earlier in the flight, or on previous flights? A pattern that repeats is a configuration or tuning question; a pattern that appears once is an event question.
- Note the exact timestamps of anything abnormal. Precise timestamps are what make a forum post, an issue report or a question to a colleague answerable.
- Save the layout once the review view is useful. The next flight then opens into the same charts, in the same order, which is what turns log review from archaeology into routine.
Where this workflow fits among the other ULog tools
PX4 Flight Review, the project’s online analyser, is the quick first look: upload a log and receive plots, including PID and vibration analysis, by link. PlotJuggler is the in-depth step the PX4 documentation points to when the quick look is not enough — local and private, with every logged topic available and your own transforms on top. Our roundup of the best drone flight log analysis tools sets out where each option fits, and the CSV import guide covers the companion case where supporting data arrives as a spreadsheet-style export rather than a ULog. Whichever tool you start with, keep the discipline the same: question first, signals second, conclusions last.
This is an independent, unofficial resource site, not affiliated with the PlotJuggler or PX4 projects. PlotJuggler is free and open source under the MPL-2.0 licence.
