1. PX4日志系统概述:日志的作用、文件格式与获取方式
做无人机调试,说白了就是在跟看不见的东西打交道。电机转没转、传感器数据对不对、控制指令发没发出去——这些全靠日志来还原。我个人习惯把日志叫做“飞行黑匣子”,它记录了你飞机上每一个关键节点的状态。
今天咱们就从日志的作用开始聊,然后看看它的文件格式,最后说说怎么把日志从飞机上拿下来。
1.1 日志到底能干什么?
你可能遇到过这种情况:飞机飞着飞着突然掉高,或者莫名其妙地偏航。这时候你第一反应是什么?我刚开始做飞控时,第一反应是“是不是硬件坏了”。后来踩的坑多了才发现,90%的问题都能从日志里找到线索。
日志的核心作用,我总结为三点:
- 故障排查:飞机炸了、偏航了、抖动了,日志能告诉你“哪一步出了问题”。
- 性能调优:PID参数合不合理?传感器噪声大不大?日志里的数据曲线会说话。
- 合规验证:有些行业应用需要证明飞机“飞得稳”,日志就是最好的证据。
我的经验:有一次客户反馈飞机在悬停时高度波动超过±30cm。我拿到日志一看,气压计数据里有一段明显的“台阶”——原来是飞控被太阳晒得太热,气压计温漂了。没有日志,这种问题你猜一辈子也猜不出来。
1.2 ULog文件格式——PX4的“黑匣子”语言
PX4从很早的版本就开始用ULog格式了。它跟常见的CSV或者TXT不一样,是一种二进制日志格式。为什么要用二进制?说白了就两个原因:体积小、写入快。
你想想看,飞控上的存储空间本来就有限,SD卡读写速度也远不如电脑硬盘。如果用文本格式写日志,飞控可能还没来得及写完,下一帧数据就来了——丢数据就是这么发生的。
ULog的结构其实不复杂,我画了一张图帮你理解:
嗯,这里要注意:ULog是自描述的。什么意思?就是日志文件自己带着“说明书”——定义段里写清楚了每个数据字段叫什么、是什么类型。所以你用任何工具解析ULog,只要工具支持这个格式,就能自动识别出所有数据。
小技巧:如果你用文本编辑器打开ULog文件,会看到一堆乱码。别慌,这是正常的。二进制格式本来就不是给人直接读的。用 ulog2csv 或者 pyulog 工具转成CSV就能看了。
1.3 日志存在哪儿?
PX4的日志存储位置,取决于你用的硬件平台。我整理了一个表格,方便你对照:
| 硬件平台 | 存储介质 | 默认路径 | 注意事项 |
|---|---|---|---|
| Pixhawk 系列 | SD 卡 | /fs/microsd/log/ |
建议使用 Class 10 以上高速卡 |
| CUAV 系列 | 板载 Flash / SD 卡 | /fs/microsd/log/ 或 /fs/kparam/ |
Flash 容量有限,建议插 SD 卡 |
| Holybro 系列 | SD 卡 | /fs/microsd/log/ |
部分型号支持热插拔 |
| 树莓派 + PX4 | eMMC / SD 卡 | /home/pi/.px4/log/ |
注意磁盘空间,日志容易撑爆 |
日志文件的命名规则也很简单:年月日_时分秒_序号.ulg。比如 2025_01_15_14_30_22_001.ulg,一看就知道是2025年1月15日下午2点30分22秒产生的第一条日志。
我曾经踩过的坑:有一次飞完忘了拔SD卡,第二次飞行时日志直接覆盖了上一次的。后来我养成了习惯——每次飞完立刻拔卡备份。PX4默认的日志策略是“保留最近N个文件”,旧日志会被自动删除。如果你有重要的试飞数据,记得及时拷出来。
1.4 怎么把日志取出来?
获取日志的方式有好几种,我按使用频率排个序:
- 拔SD卡直接拷贝——最原始也最可靠。飞控断电,拔卡,插电脑,复制粘贴。我90%的情况都用这个。
- 通过MAVLink下载——不用拔卡,用QGroundControl就能下载。适合不方便拆机的情况。但速度慢,一个几十MB的日志可能要传好几分钟。
- 通过WiFi/数传下载——用
mavlink ftp协议,远程拉取日志。适合在户外调试时用,但信号不好容易断。 - 通过USB串口下载——连接飞控的USB口,用
px4_log_downloader.py脚本下载。速度比数传快,但需要带电脑。
我的建议:如果你在做参数调优,需要反复飞、反复看日志,那就用QGC的日志下载功能,省得来回拔卡。但如果是炸机分析,我强烈建议拔卡拷贝——确保数据完整,不会被传输过程损坏。
1.5 日志文件的大小与数量控制
你可能关心一个问题:飞控能存多少日志?这取决于几个因素:
- SD卡容量:一般用8GB~32GB,够存几十个小时的飞行数据。
- 日志记录频率:默认是记录所有传感器数据,频率很高。如果你只关心特定数据,可以调整
SDLOG_PROFILE参数来减少记录量。 - 飞行时长:10分钟的飞行,日志大小大约在50MB~200MB之间,取决于传感器数量。
PX4默认的日志保留策略是:保留最近25个日志文件,或者保留最近3GB的日志数据。超过这个限制,最旧的日志会被自动删除。这个策略可以通过 SDLOG_DIR 和 SDLOG_MAX_FILES 参数调整。
小技巧:如果你在做长航时飞行测试,建议把 SDLOG_PROFILE 设置为“仅记录高优先级数据”,这样日志体积能减少一半以上。具体怎么配,我们后面章节会详细讲。