1. 课程导入

做飞控这些年,我越来越觉得日志就是飞行器的「黑匣子」。飞机在天上飞了啥、出了啥问题,全得靠它来还原。很多新手一上来就急着调参数、改代码,结果炸机了都不知道原因在哪。说实话,学会看日志,比学会写代码更重要。

这一章咱们就聊聊 PX4 日志系统的基础。别小看这些基础内容,我见过不少老手在日志存储路径上栽过跟头。

1.1 日志的作用

日志到底能干啥?简单说三点:

  • 故障排查:飞机突然翻了个跟头?日志里能找到原因。
  • 性能分析:悬停抖动、航线偏航,日志数据会告诉你哪里不对劲。
  • 参数调优:调 PID 没日志反馈,那就是盲调。

我个人习惯,每次试飞回来第一件事就是下载日志。哪怕这次飞得很稳,也得看看。为什么?因为有些隐患不会直接导致炸机,但会在日志里留下蛛丝马迹。

核心观点:日志不是出事了才看,而是每次飞行都要看。养成习惯后,你对飞机的「手感」会提升一个档次。

1.2 日志文件类型:ulog

PX4 用的日志格式叫 ulog,全称是 micro-ULog。这玩意儿是 PX4 团队自己设计的,专门针对嵌入式系统做了优化。

你可能会问:为啥不用现成的格式?比如 CSV 或者 ROS bag?

嗯,这里有个关键点。飞控上的存储空间和带宽都很有限。CSV 太占空间,ROS bag 又太重。ulog 是二进制格式,体积小、写入快,而且支持可变长度数据结构。说白了,就是为嵌入式环境量身定做的。

一个典型的 ulog 文件包含以下几部分:

数据段 说明 我遇到过的问题
文件头 包含文件格式标识、时间戳 文件头损坏,整个日志读不了
定义区 记录消息格式、参数、订阅关系 定义区缺失,数据无法解析
数据区 实际传感器、状态、控制数据 数据区不连续,中间有丢帧
附加信息 日志版本、硬件信息等 版本不匹配,工具解析报错

小技巧:如果你拿到一个 ulog 文件打不开,先检查文件头。用十六进制编辑器看一眼,前四个字节应该是 ULog 的 ASCII 码。不是的话,文件大概率已经损坏了。

1.3 日志存储位置

日志存在哪?这得看你的飞控硬件。

  • SD 卡:最常见的方式。路径一般是 /fs/microsd/log/。每次上电会创建一个新文件夹,命名格式是 session_YYYY-MM-DD_HH-MM-SS。
  • 内部 Flash:有些飞控没有 SD 卡槽,日志会写在内部 Flash 里。但空间很小,只能存最近几次飞行的数据。
  • RAM 缓存:日志先写到 RAM,再定期刷到存储介质。掉电会丢数据,所以不建议依赖这个。

我曾经遇到过一个问题:飞控上电后日志没写进去。查了半天,发现是 SD 卡没插紧。嗯,这种低级错误其实挺常见的。所以我现在每次飞之前都会确认一下 SD 卡的状态。

注意:SD 卡的文件系统必须是 FAT32。PX4 不支持 exFAT 或 NTFS。另外,卡的速度等级建议 Class 10 以上,否则高频写入时会丢数据。

1.4 日志获取方式

拿到日志文件,通常有这几种方法:

  1. 直接拔 SD 卡:最原始也最可靠。用读卡器插电脑上拷贝就行。
  2. 通过 QGroundControl 下载:连接飞控后,在「分析」页面可以下载日志。适合不想拔卡的情况。
  3. MAVLink 实时传输:飞行过程中通过数传把日志数据流实时发回地面站。但带宽有限,只能传部分数据。
  4. PX4 命令行:通过 mavlink log 命令在终端里操作。适合高级用户。

我个人最常用的是第二种。QGC 的下载界面很直观,还能预览日志的基本信息。不过要注意,如果日志文件很大(超过 100MB),下载时间会比较长。

建议:养成每次飞行后都下载日志的习惯。别等到 SD 卡满了才去清理,那时候可能已经覆盖了重要数据。

1.5 知识体系总览

下面这张图把本章的核心内容串起来了。你可以把它当作一个快速索引,后面讲到具体工具和分析方法时,随时回来对照。

PX4 日志系统知识体系 PX4 日志系统 日志的作用 文件类型 (ulog) 存储位置 获取方式 故障排查 性能分析 参数调优 文件头 定义区 数据区 SD 卡 内部 Flash RAM 缓存 拔 SD 卡 QGC 下载 MAVLink 传输 命令行 提示:ulog 是 PX4 的核心日志格式,理解它的结构是后续分析的基础 建议每次飞行后都下载日志,养成习惯

这张图把日志系统拆成了四个维度。你从哪个维度切入都行,但建议先搞清楚「日志存在哪」和「怎么拿」,然后再深入「文件结构」和「分析用途」。这样上手最快。

1.6 本章小结

这一章咱们把 PX4 日志系统的基础过了一遍。从日志的作用、ulog 文件格式,到存储位置和获取方式,每个点我都尽量结合自己的实际经验来讲。

记住一句话:日志是飞控的「语言」。你读懂了它,就能跟飞机对话。后面几章咱们会深入 ulog 的内部结构,看看数据到底是怎么组织的,以及怎么用工具把它解析出来。