2. 日志分析工具链:FlightPlot、PlotJuggler、pyulog库的安装与基本使用

拿到PX4的ulog文件,第一件事是什么?

我个人的习惯是——先别急着看代码,先把数据“画”出来。人眼对图形的敏感度远高于对数字的敏感度。你盯着几百行数字看半天,不如一张曲线图来得直观。

这一章,我们就来搞定三款最常用的日志分析工具:FlightPlot、PlotJuggler 和 pyulog 库。它们各有侧重,但组合起来几乎能覆盖你所有的分析场景。

一句话总结三者的定位:

  • FlightPlot:官方出品,开箱即用,适合快速浏览。
  • PlotJuggler:社区神器,灵活强大,适合深度分析。
  • pyulog:Python库,脚本化处理,适合批量分析和自动化。
PX4日志分析工具链关系图 PX4 日志分析工具链 ulog 日志文件 FlightPlot 官方GUI,快速浏览 PlotJuggler 社区神器,深度分析 pyulog Python库,批量处理 三者互补:快速浏览 → 深度分析 → 批量自动化

2.1 FlightPlot:官方工具,上手最快

FlightPlot 是 PX4 官方提供的 Java 桌面应用。说白了,它就是专门用来画 ulog 数据的。你不需要写一行代码,点几下鼠标就能看到曲线。

安装步骤

  1. 确保有 Java 环境:FlightPlot 依赖 Java 8 或更高版本。在终端输入 java -version 检查。如果没有,去 Oracle 官网下载安装。
  2. 下载最新 JAR 包:从 PX4 官方 GitHub 仓库的 Tools/jetbrains 目录下,找到 flightplot.jar。或者直接去 Release 页面下载。
  3. 启动:双击 JAR 文件,或者在终端运行 java -jar flightplot.jar。

我的小经验: 如果你在 macOS 上双击没反应,试试在终端里运行。有时候系统安全策略会拦截未签名的 Java 应用。我第一次用的时候就卡在这儿了,还以为是文件坏了。

基本使用

启动后,界面很简洁。点击 File → Open Log,选择你的 .ulog 文件。加载完成后,左侧会列出所有可用的数据主题(Topic)。

  • 选择数据:勾选你想看的主题,比如 vehicle_attitude(姿态)、vehicle_local_position(位置)。
  • 绘制曲线:点击 Plot 按钮,右侧就会生成曲线图。你可以拖动缩放,也可以右键添加光标测量数值。
  • 导出图片:File → Export Plot as Image,方便你放到报告里。

注意: FlightPlot 对超大日志文件(比如超过 500MB)处理起来会比较慢。我遇到过加载一个 1.2GB 的日志,等了快两分钟。这时候,我建议你用 PlotJuggler 或者 pyulog 先做数据裁剪。

2.2 PlotJuggler:社区神器,灵活到没朋友

PlotJuggler 是我个人最常用的工具。它最初是为 ROS 设计的,但后来支持了 PX4 的 ulog 格式。它的核心优势在于——你可以任意组合、计算、变换数据。

安装方式

安装 PlotJuggler 有几种途径,我推荐用包管理器,省心。

系统 安装命令
Ubuntu 20.04+ sudo apt install plotjuggler
macOS (Homebrew) brew install plotjuggler
Windows 从 GitHub Releases 下载 exe 安装包

如果你喜欢用 AppImage,也可以直接下载 Linux 版本的 AppImage 文件,给执行权限后直接运行。

基本使用流程

  1. 加载数据:启动后,点击 Data → Import,选择你的 ulog 文件。PlotJuggler 会自动解析出所有主题。
  2. 拖拽绘图:在左侧的 DataTree 中,找到你想看的变量,比如 vehicle_gps_position.vel_m_s(GPS 速度),直接拖拽到右侧的绘图区域。
  3. 多图联动:按住 Ctrl 键,可以同时拖拽多个变量到同一个坐标系中对比。比如把期望姿态和实际姿态放在一起,一眼就能看出跟踪误差。
  4. 使用变换器:这是 PlotJuggler 最强大的功能。点击 Transform 按钮,你可以对数据进行数学运算。比如计算 加速度计模值 = sqrt(ax^2 + ay^2 + az^2),或者对数据进行低通滤波。

避坑指南: 我曾经在分析一次炸机日志时,发现姿态曲线看起来很正常,但加速度计数据有异常尖峰。用 PlotJuggler 的 低通滤波变换器 处理后,发现是高频振动导致的传感器饱和。这个发现,用 FlightPlot 很难直接看出来。

常用快捷键

  • 鼠标滚轮:缩放时间轴。
  • 按住 Shift + 鼠标拖拽:平移视图。
  • 右键:添加光标,测量两点之间的差值。
  • Ctrl + Z:撤销操作(这个很救命)。

2.3 pyulog:用 Python 脚本化处理日志

当你需要批量分析几十个日志,或者想把分析结果自动生成报表时,GUI 工具就不够用了。这时候,pyulog 库就派上了用场。

pyulog 是 PX4 官方维护的 Python 库,专门用来解析 ulog 文件。你可以把它看作是 ulog 文件的 Python 接口。

安装

直接用 pip 安装,很简单:

pip install pyulog

建议在 Python 3.8 以上的环境中安装。我遇到过在 Python 3.6 上安装报错的情况,升级到 3.8 就解决了。

核心用法

安装完成后,你可以在 Python 脚本中这样使用:

from pyulog import ULog

# 加载日志文件
ulog = ULog('flight_log.ulg')

# 获取所有数据主题
print(ulog.topic_list)

# 获取特定主题的数据
attitude_data = ulog.get_dataset('vehicle_attitude')
# attitude_data 是一个字典,包含时间戳和各个字段
time_us = attitude_data['timestamp']
q = attitude_data['q']  # 四元数

# 简单绘图示例(需要 matplotlib)
import matplotlib.pyplot as plt
plt.plot(time_us, q[:, 0], label='q0')
plt.plot(time_us, q[:, 1], label='q1')
plt.plot(time_us, q[:, 2], label='q2')
plt.plot(time_us, q[:, 3], label='q3')
plt.legend()
plt.show()

我的习惯: 我会写一个通用的分析脚本,输入日志文件路径,自动输出关键指标(比如最大振动值、GPS 丢星次数、姿态跟踪误差 RMS)。这样每次拿到新日志,跑一遍脚本就能快速定位问题。

常用功能清单

功能 代码示例 说明
列出所有主题 ulog.topic_list 返回主题名称列表
获取主题数据 ulog.get_dataset('topic_name') 返回包含时间戳和字段的字典
获取消息类型 ulog.msg_types 查看日志中包含哪些消息类型
获取参数 ulog.initial_parameters 返回飞行器初始参数列表

2.4 三款工具如何选择?

你可能会问,我到底该用哪个?我的建议是:

  • 日常快速检查:用 FlightPlot。打开文件,点几下,看看曲线有没有明显异常。
  • 深入分析问题:用 PlotJuggler。它的变换器和多图联动功能,能帮你发现隐藏的关联。
  • 批量处理或自动化:用 pyulog。写个脚本,一键跑完所有日志,输出报告。

总结一下: 这三款工具不是互斥的,而是互补的。我自己的流程通常是:先用 FlightPlot 快速扫一眼,发现可疑点后,用 PlotJuggler 深入分析,最后用 pyulog 写脚本做批量验证。这套组合拳打下来,大部分问题都能水落石出。