1. PX4日志基础:ULog文件、存储位置与下载方法
做PX4飞控调试,说白了就是跟日志打交道。我见过太多开发者,飞机炸了、参数调乱了,第一反应是「再飞一次看看」,结果第二次炸得更惨。其实日志就在SD卡里,它已经把故障原因写得明明白白了。
这一章,我们就从最基础的东西说起。什么是ULog文件?日志存在哪?怎么把它弄到电脑上?文件里面到底长什么样?
1.1 什么是ULog文件
ULog是PX4专用的二进制日志格式。全称是「UAV Log」,也就是无人机日志。它跟CSV、TXT那些文本日志不一样——ULog是紧凑的二进制格式,记录效率高,而且自带数据结构描述。
我刚开始接触PX4时,第一反应是:「为什么不用CSV?多直观啊。」后来飞了一次长航时,发现CSV日志文件动辄几百MB,而同样时长的ULog只有几十MB。你想想看,SD卡空间有限,二进制格式才是正经方案。
ULog的核心特点:
- 二进制格式:体积小、写入快,适合嵌入式实时记录
- 自描述结构:文件头部包含所有数据类型的定义,解析器不需要外部配置文件
- 多主题订阅:可以同时记录传感器、姿态、GPS、RC输入等多个数据流
- 时间戳同步:每条数据都带有微秒级时间戳,方便回放分析
说白了,ULog就是PX4的「黑匣子」。它记录了飞控在飞行过程中的所有关键数据。你调参、排故、分析炸机原因,都得靠它。
1.2 日志存储位置:SD卡
日志存在哪?答案是SD卡。PX4飞控板(比如Pixhawk系列)都带有microSD卡槽。飞控上电后,会自动在SD卡根目录下创建 /log 文件夹,所有ULog文件都存在里面。
目录结构大概是这样的:
/fs/microsd/log/
├── 2024-01-15/
│ ├── 10_23_45.ulg
│ └── 11_05_12.ulg
├── 2024-01-16/
│ ├── 08_12_33.ulg
│ └── 09_44_21.ulg
└── 2024-02-01/
└── 14_20_00.ulg
每个日志文件以 起飞时间 命名,格式是 时_分_秒.ulg。外层文件夹是日期。这样找日志很方便——你只要记得哪天飞的,进去翻就行。
我的习惯:每次飞行前,我都会格式化SD卡。因为旧日志太多,找起来费劲。而且SD卡用久了会产生碎片,影响写入速度。我建议你每飞5-10个架次就格式化一次。
有一点要注意:如果SD卡没插好,或者卡满了,飞控会报 SD Card Error 或 Logging Failed。这时候日志是写不进去的。我曾经有一次忘了插卡就起飞,结果炸了之后想分析数据,发现啥也没有……嗯,从那以后我每次起飞前都会检查SD卡状态。
1.3 如何下载日志
把日志从飞控弄到电脑上,有几种常用方法。我按推荐程度排个序:
| 方法 | 工具 | 速度 | 适用场景 |
|---|---|---|---|
| 直接拔卡 | 读卡器 | 最快 | 现场调试、大量日志批量下载 |
| MAVLink下载 | QGroundControl | 较慢 | 不方便拔卡时(比如飞控装在机架内部) |
| WiFi/数传 | QGC + 数传模块 | 最慢 | 远程下载、快速查看日志摘要 |
方法一:直接拔卡(推荐)
这是我最常用的方式。把SD卡从飞控上拔下来,插进读卡器,连上电脑。日志文件就在 /log 目录下。复制粘贴就行,简单粗暴。
方法二:通过QGroundControl下载
如果你不想拔卡,可以用QGC。操作步骤:
- 飞控连接QGC(USB或数传都行)
- 点击左上角「齿轮」图标 → 选择「参数」页面
- 在左侧菜单找到「日志文件」
- 勾选你要下载的.ulg文件
- 点击「下载」按钮,选择保存路径
注意:通过MAVLink下载日志很慢。一个50MB的日志,用USB下载大概要2-3分钟,用数传可能要10分钟以上。如果日志很多,我建议直接拔卡。
方法三:通过WiFi/数传远程下载
这个适合你在室外,飞控装在机架里不方便拆的情况。QGC支持通过WiFi或数传模块远程下载日志。但速度嘛……你懂的。我只在紧急情况下用这个方法。
1.4 日志文件结构概览
ULog文件虽然是个二进制文件,但它的结构其实很清晰。我画了一张图,帮你理解它的内部组织方式:
ULog文件从结构上分为四个部分:
- 文件头:固定长度(16字节),包含魔数(0x55 0x4C 0x6F 0x67,也就是"ULog")、文件版本、时间戳、标志位。解析器先读这个,确认文件格式正确。
- 定义区:这是ULog的精髓。它包含了所有数据类型的定义——比如传感器数据格式、姿态消息结构、参数键值对。解析器读完定义区,就知道后面数据怎么解析了。这也是ULog「自描述」的原因。
- 数据区:日志的主体。按时间顺序排列的数据包。每个数据包包含消息ID、微秒级时间戳、实际数据。传感器数据、姿态、GPS、RC输入……都在这里。
- 索引区:可选部分。包含数据区中各个消息的偏移量,方便快速定位。如果日志文件损坏,索引区可能丢失,但数据区仍然可读。
一个小技巧:如果你用文本编辑器打开ULog文件,看到开头是 ULog 三个字母,那就说明文件头没问题。如果开头是乱码,那文件可能损坏了。我遇到过几次SD卡坏道导致日志损坏的情况,这时候可以试试用 ulog2csv 工具强制转换,有时候能抢救出部分数据。
1.5 日志文件命名规则
PX4的日志命名规则很简单:时_分_秒.ulg。比如 14_30_15.ulg 表示14点30分15秒起飞的。
但这里有个坑:这个时间戳是飞控的 系统运行时间,不是UTC时间,也不是本地时间。如果你飞控没有GPS授时,或者GPS没锁定,这个时间可能不准。
我个人的做法是:在日志文件名前面加个前缀,比如 v2_参数测试_14_30_15.ulg。这样一眼就能看出这次飞行的目的。不过PX4默认不支持自定义文件名,你需要手动重命名。
1.6 日志文件大小与存储策略
ULog文件的大小取决于几个因素:
- 飞行时长:飞得越久,数据越多
- 记录的主题数量:默认记录所有主题,但你可以通过参数
SDLOG_PROFILE选择只记录关键数据 - 传感器采样率:IMU通常是1kHz,GPS是10Hz,不同主题频率差异很大
一般来说,10分钟的飞行会产生大约30-50MB的日志。一张32GB的SD卡,大概能存600-1000个日志文件。够你飞很久了。
注意:如果SD卡空间不足,飞控会自动停止记录。它会先尝试删除最旧的日志文件来腾空间,但如果删除失败(比如文件被锁定),就会直接停止记录。所以定期清理SD卡很重要。