日志获取与准备:从飞控下载日志、使用QGroundControl导出日志、日志文件的基本结构
做定位分析,第一步不是看数据,而是拿到对的日志。我见过不少同事,花了大半天分析一个定位问题,最后发现日志文件本身就不完整——白忙一场。所以这一章,咱们先把基本功打扎实。
从飞控下载日志的几种方式
PX4 的日志默认存在 SD 卡里。你飞完一个架次,日志就自动写进去了。怎么把它弄出来?主要有三条路。
| 方式 | 工具 | 适用场景 | 我的建议 |
|---|---|---|---|
| 无线下载 | QGroundControl (WiFi/数传) | 现场快速查看、小文件 | 方便,但速度慢,大日志容易断 |
| 有线下载 | QGroundControl (USB) | 稳定可靠,推荐首选 | 我个人习惯用这个,稳 |
| 直接拔卡 | 读卡器 + PC | 日志文件巨大、批量处理 | 最暴力,也最保险 |
嗯,这里要注意:无线下载时如果信号不好,日志可能损坏。我遇到过好几次,飞完一个长航时,日志下载到一半断连,结果文件打不开。后来我就学乖了——重要日志一定用 USB 线或者直接拔卡。
使用 QGroundControl 导出日志
QGC 是咱们最常用的地面站。导出日志的步骤其实很简单,但有几个细节容易踩坑。
标准操作流程
- 把飞控连上 QGC(USB 或数传都行)。
- 点击右上角的齿轮图标,进入「分析」视图。
- 在「日志下载」标签页里,你会看到飞控上存的所有日志列表。
- 选中你要的日志,点「下载」。
- 保存到本地,默认是 .ulg 格式。
避坑指南
我曾经犯过一个低级错误:下载日志时飞控还在运行,结果日志文件被锁定,下载下来是空的。所以,下载前最好让飞控处于「已断开」或「待机」状态,别让它还在跑任务。
另外,QGC 默认只显示最近 20 条日志。如果你的 SD 卡里存了很多老日志,记得点一下「显示全部」按钮。不然你翻半天找不到想要的架次。
日志文件的基本结构
拿到 .ulg 文件后,咱们得知道它里面长什么样。说白了,它就是一个按时间顺序记录的数据流。
文件内部组织
我拆开一个典型的 .ulg 文件,大致能看到这些部分:
- 文件头(Header):包含文件格式版本号、时间戳起点、飞行器类型等元信息。
- 定义段(Definitions):声明了后面会用到的所有消息格式。比如「消息 ID 1 是传感器加速度计数据,包含 x、y、z 三个 float 字段」。
- 数据段(Data):真正的飞行数据。每条记录都带着时间戳,按时间顺序排列。
- 信息段(Info):一些额外的文本信息,比如固件版本、参数列表。
你想想看,这就像一本字典:定义段是词汇表,数据段是正文。没有词汇表,你根本看不懂正文在说什么。
常见消息类型
做定位分析时,你最常打交道的消息类型就这几类:
| 消息名称 | 发布频率 | 包含的关键字段 | 用途 |
|---|---|---|---|
| sensor_accel | ~1000 Hz | x, y, z (m/s²) | IMU 加速度计原始数据 |
| sensor_gyro | ~1000 Hz | x, y, z (rad/s) | IMU 陀螺仪原始数据 |
| vehicle_gps_position | ~5-10 Hz | lat, lon, alt, eph, epv | GPS 定位结果及精度 |
| estimator_status | ~50 Hz | gps_check_fail_flags, innov_* | EKF 状态和健康度 |
| vehicle_local_position | ~50 Hz | x, y, z, vx, vy, vz | 融合后的局部位置估计 |
说白了,定位分析就是盯着这几条消息,看它们之间有没有矛盾。比如 GPS 说你在 A 点,IMU 积分说你已经跑到 B 点了——那肯定有问题。
日志获取与准备的知识体系
我把这一章的核心逻辑画了张图,方便你理解整个流程。
日志文件命名与版本管理
最后聊一个容易被忽视的问题:日志命名。PX4 默认的日志名是 log_0001.ulg、log_0002.ulg 这种。飞多了根本分不清哪个是哪个。
我的做法是:下载后立刻重命名,格式为 日期_飞行模式_备注.ulg。比如 2025-03-15_loiter_gps_test.ulg。这样半年后翻出来,一眼就知道当时在测什么。