4. pyulog 工具入门:安装、基本命令与三大实用工具

好,咱们进入实战环节的第一步。你手里现在应该已经有一份 PX4 的 .ulog 文件了,对吧?

直接拿文本编辑器打开它?别试了,那是二进制文件,打开全是乱码。我们需要一个趁手的工具——pyulog。

说白了,pyulog 就是一套用 Python 写的解析库,外加几个命令行小工具。我个人习惯把它当成“日志瑞士军刀”,虽然功能没有 FlightPlot 那么花哨,但胜在轻量、可脚本化,尤其适合在服务器上批量处理日志。

核心思路: pyulog 负责把二进制 ulog 文件“翻译”成我们能看懂的结构化数据。你不需要记住所有细节,但必须掌握它的三个核心命令:ulog_info、ulog_params、ulog_messages。

4.1 安装 pyulog:两条路,选简单的走

安装其实没什么门槛。我建议你直接用 pip 装,干净利落。

pip install pyulog

如果你用的是 Ubuntu 或者 macOS,可能会遇到权限问题。这时候加个 --user 参数就行:

pip install --user pyulog

我的小习惯: 我一般会在 Python 虚拟环境里装,避免把系统环境搞乱。尤其是你后面可能还要装 pyplot、numpy 这些库,虚拟环境能省很多麻烦。

装完之后,验证一下:

ulog_info --help

如果能看到帮助信息,恭喜你,环境搭好了。

注意: 有些同学在 Windows 上会遇到“ulog_info 不是内部或外部命令”的报错。这通常是因为 Python 的 Scripts 目录没加到 PATH 里。解决办法:重新运行安装程序,勾选“Add Python to PATH”。

4.2 基本命令概览:一张表说清楚

pyulog 安装后会提供几个命令行工具。我帮你整理了一下:

命令 作用 常用场景
ulog_info 查看日志的元信息 检查飞行时长、版本、消息类型总数
ulog_params 提取参数列表 对比两次飞行的参数差异
ulog_messages 查看日志中的文本消息 快速定位报错、警告信息
ulog2csv 将 ulog 转为 CSV 导出数据给 Excel 或 Matlab 处理
ulog_extract 提取特定 topic 的数据 只保留 GPS 或 IMU 数据,缩小文件体积

嗯,这里要注意:ulog2csv 和 ulog_extract 我们后面章节会细讲,今天先把前三个吃透。

4.3 ulog_info:给日志做“体检”

拿到一份日志,我第一件事就是跑 ulog_info。它就像体检报告,告诉你这份日志的基本健康状况。

ulog_info sample.ulg

输出大概长这样:

Logging start time: 2024-03-15 10:32:18, duration: 423 seconds
Number of messages: 28415
  - 1: vehicle_attitude (100 Hz)
  - 2: vehicle_gps_position (10 Hz)
  - 3: sensor_combined (250 Hz)
  ...

你能看到什么?

  • 飞行时长: 423 秒,大概 7 分钟,正常。
  • 消息频率: vehicle_attitude 是 100 Hz,vehicle_gps_position 只有 10 Hz。GPS 更新慢,这是硬件限制,不是 bug。
  • 消息总数: 28415 条,说明日志记录完整,没有中途卡死。

避坑指南: 我曾经遇到过一次日志只有 3 秒的情况。当时排查了半天,最后发现是 SD 卡满了。所以拿到日志先看 duration,如果太短,先检查存储介质。

4.4 ulog_params:参数“快照”对比

定位模块出问题,很多时候是参数配错了。比如 GPS_CONFIG 没设对,或者 EKF2_AID_MASK 少开了某个传感器。

ulog_params 能帮你把日志里记录的参数全部导出来。

ulog_params sample.ulg

输出是一长串参数列表:

param: CAL_GYRO0_ID = 2293760
param: CAL_ACC0_ID = 2293760
param: GPS_CONFIG = 0
param: EKF2_AID_MASK = 1
param: EKF2_GPS_CHECK = 245
...

你想想看,如果两次飞行结果不一样,你可以用这个命令分别导出参数,然后用 diff 工具对比。我经常这么干,特别快。

实用技巧: 如果你只想看某个参数,可以配合 grep 过滤。比如只看 GPS 相关的参数:

ulog_params sample.ulg | grep GPS

这样输出就清爽多了。

4.5 ulog_messages:日志里的“聊天记录”

PX4 在运行过程中会输出各种文本消息,包括错误、警告、调试信息。这些消息藏在日志里,用 ulog_messages 就能拉出来。

ulog_messages sample.ulg

输出示例:

10:32:18.123 [INFO] GPS 1: detected as u-blox
10:32:20.456 [WARN] GPS 1: jamming detected
10:33:01.789 [ERROR] EKF2: GPS quality poor

看到了吗?这里直接告诉你 GPS 被检测到了,但后来出现了干扰,最后 EKF 报 GPS 质量差。这就是定位模块出问题的直接证据。

注意: 不是所有错误都会导致炸机。比如“jamming detected”可能只是短暂干扰,后面又恢复了。你需要结合后面的数据曲线来综合判断。

4.6 本章知识体系:一张图看懂

为了让你对 pyulog 的整体结构有个直观印象,我画了张图:

pyulog 工具知识体系 pyulog 工具集 ulog_info ulog_params ulog_messages 查看元信息 飞行时长 消息频率、版本 提取参数快照 参数对比 配置检查 查看文本消息 错误、警告 调试信息 快速定位定位模块问题

这张图把今天的内容串起来了。你从 ulog 文件出发,通过三个命令分别获取元信息、参数和消息,最终目标就是快速定位定位模块的问题。

4.7 实战小练习:动手试试

光看不练可不行。我建议你现在就找一份 ulog 日志,按下面的步骤走一遍:

  1. 运行 ulog_info your_log.ulg,看看飞行时长和消息频率。
  2. 运行 ulog_params your_log.ulg | grep GPS,检查 GPS 相关参数。
  3. 运行 ulog_messages your_log.ulg,看看有没有 ERROR 或 WARN。

做完这三步,你就能对这份日志有个基本判断了。如果发现 GPS 参数不对,或者有错误消息,那问题大概率就出在这里。

我的经验: 刚开始用 pyulog 时,我总觉得命令行太枯燥。但用习惯了你会发现,它比任何 GUI 工具都高效。尤其是你要批量处理几十份日志的时候,写个脚本循环跑,几分钟就能筛出有问题的日志。