日志查看工具:FlightPlot、PlotJuggler 与 pyulog

做 PX4 日志分析,说白了就是跟数据打交道。你手里有 ulg 文件,但光看二进制码可不行——得把它变成能看懂的曲线和数字。这一章我带你认识三样趁手的工具:FlightPlot、PlotJuggler,还有 Python 库 pyulog。

我个人习惯是三个工具混着用。FlightPlot 适合快速扫一眼,PlotJuggler 适合深度折腾,pyulog 嘛……适合写脚本批量处理。咱们一个一个来。

FlightPlot:官方出品,简单直接

FlightPlot 是 PX4 官方维护的桌面工具,用 Java 写的。跨平台,Windows、macOS、Linux 都能跑。

安装

去 PX4 的 GitHub Releases 页面下载最新 jar 包就行。我建议你直接下载带 JRE 的版本,省得自己配 Java 环境。

# 如果你在 Linux 上,也可以从终端启动
java -jar flightplot.jar

嗯,这里要注意:如果你的系统 Java 版本太老,可能打不开。我遇到过一回,折腾了半天才发现是 Java 8 的问题,换成 11 就好了。

界面速览

打开 FlightPlot,你会看到左右两栏:

  • 左侧:数据树,按模块分组(sensor、estimator、actuator 等)
  • 右侧:绘图区,选中的变量会在这里画曲线

操作很简单:点左侧的变量名,右侧就出图。想对比多个变量?按住 Ctrl 多选就行。

我的小技巧:FlightPlot 支持拖拽排序。把关心的变量拖到前面,省得每次都要翻半天。

PlotJuggler:曲线调优利器

PlotJuggler 是我最常用的工具。为什么?因为它能让你像玩调音台一样操作曲线——缩放、平移、叠加、做数学运算,样样都行。

安装

PlotJuggler 官方提供了各平台的安装包。我个人推荐用 conda 装,干净利落:

conda install -c conda-forge plotjuggler

或者直接下载 AppImage(Linux)或 exe(Windows)。

界面布局

PlotJuggler 的界面分三块:

区域 功能
左侧数据面板 显示所有可用的 topic 和变量,支持搜索过滤
中央绘图区 曲线展示区,支持多标签页
底部时间轴 拖动选择时间范围,支持缩放

我第一次用 PlotJuggler 时,最惊艳的是它的 拖拽式操作:从左侧拖一个变量到绘图区,曲线就出来了。再拖一个,两条曲线叠在一起,对比一目了然。

核心功能:PlotJuggler 支持自定义公式。比如你想看加速度计模值 sqrt(ax² + ay² + az²),直接在公式编辑器里写,不用导出数据再算。

加载 ulg 文件

PlotJuggler 原生支持 ulg 格式。点 "Load Data",选你的日志文件,几秒钟就能看到所有数据。我遇到过文件特别大的情况(飞了俩小时),PlotJuggler 也能扛住,就是加载慢点。

注意:PlotJuggler 默认只加载前 100 万个数据点。如果你的日志很长,记得在设置里调大这个上限。

pyulog:脚本党的最爱

有时候你不想点鼠标,想写脚本批量处理日志——比如把 100 个日志的振动指标算出来。这时候 pyulog 就派上用场了。

安装

pip install pyulog

就一行命令,没什么坑。我建议你在虚拟环境里装,别污染全局 Python。

基础用法

pyulog 的核心是 ULog 类。看个例子:

from pyulog import ULog

# 加载日志
ulog = ULog('flight_01.ulg')

# 获取所有 topic 名称
topics = ulog.get_topic_list()
for t in topics:
    print(t.name)

# 读取某个 topic 的数据
data = ulog.get_dataset('sensor_accel')
print(data.data['x'])  # 加速度 X 轴数据

这段代码能帮你快速摸清日志里有什么数据。我在项目里经常用它做自动化检查——比如判断起飞前 GPS 锁星数是否达标。

数据导出

想把数据导出成 CSV 给同事?一行代码搞定:

ulog.to_csv('sensor_accel', 'accel_data.csv')
避坑指南:我曾经用 pyulog 处理一个 2GB 的日志,结果内存爆了。后来发现可以用 ULog(..., mode='lazy') 延迟加载,只读需要的部分。

工具对比:什么时候用哪个?

场景 推荐工具 理由
快速查看单次飞行 FlightPlot 启动快,操作简单
深度分析、多曲线对比 PlotJuggler 交互强,支持公式运算
批量处理、自动化检查 pyulog 可编程,适合重复劳动
给非技术人员看数据 FlightPlot 界面清爽,不容易误操作

说白了,这三个工具不是替代关系,是互补关系。我自己的流程是:先用 pyulog 跑一遍批量检查,发现异常再用 PlotJuggler 细看,最后用 FlightPlot 截图发报告。

知识体系总览

下面这张图帮你理清本章的核心脉络:

日志查看工具知识体系 PX4 ulg 日志 FlightPlot PlotJuggler pyulog FlightPlot 特性 • 官方维护,跨平台 • 数据树 + 绘图区 • 适合快速浏览 PlotJuggler 特性 • 拖拽式操作 • 支持自定义公式 • 多标签页对比 pyulog 特性 • Python 库,可编程 • 支持 CSV 导出 • 适合批量处理 三者互补:批量 → 深度分析 → 报告输出

看到这张图你应该明白了:三个工具各有侧重,但组合起来就是一套完整的日志分析流水线。我个人建议你先从 PlotJuggler 入手,因为它最直观,也最能帮你建立对数据的直觉。等用熟了,再回头学 pyulog 的批处理能力——那时候你会发现自己已经离不开它了。