日志文件结构:解析无人机日志文件格式
做飞控这么多年,我见过太多人拿到日志后一脸茫然——打开一看全是乱码,或者一堆看不懂的字段名。其实说白了,日志文件就是飞机的「黑匣子」,记录着它从起飞到炸机的每一秒状态。今天我就带你把这些文件格式彻底搞明白。
常见的日志文件格式
不同飞控系统用的日志格式不一样,我接触最多的有三种:
| 格式 | 扩展名 | 常见于 | 特点 |
|---|---|---|---|
| 二进制日志 | .bin | PX4、ArduPilot | 体积小、解析快、需要专用工具 |
| 文本日志 | .log | ArduPilot(旧版) | 可读性好、但文件大 |
| 遥测日志 | .tlog | 地面站(Mission Planner等) | 记录的是地面站收到的数据 |
我个人习惯优先看 .bin 文件,因为它最完整。有一次我帮朋友分析炸机原因,他给我的是 .tlog 文件,结果发现遥测链路在炸机前几秒就断了,关键数据全丢了——嗯,这就是个坑。
数据帧类型:日志里的「语言」
日志文件不是一团乱码,它是由一个个「数据帧」组成的。每个数据帧就像一句话,告诉你飞机在某个时刻的状态。
1. 消息帧(MSG)
这是最容易读的——直接是文字信息。比如:
MSG, 100, 3, "PreArm: Check GPS"
意思是在第100秒,飞控输出了一条预检失败信息。我遇到过一个案例,用户说飞机起飞就翻,结果日志里全是这种预检失败消息——他根本没等自检完成就强行解锁了。
2. 姿态帧(ATT)
记录飞机的滚转、俯仰、偏航角。炸机前姿态数据往往会出现异常抖动。
ATT, 100.5, 12.3, -5.1, 45.0
这行数据表示:第100.5秒时,滚转12.3度,俯仰-5.1度,偏航45度。
3. GPS帧(GPS)
包含经纬度、高度、卫星颗数、定位精度等。我曾经遇到一个案例,飞机飞着飞着突然往一个方向猛冲,查日志发现GPS帧里的卫星颗数从12颗骤降到3颗——显然是GPS信号被干扰了。
4. 电机帧(MOT)
记录每个电机的输出值(PWM或百分比)。这是判断电机是否正常工作的关键。
MOT, 100.5, 1500, 1520, 1480, 1510
四个数值分别对应四个电机的PWM值。正常悬停时它们应该差不多,如果某个电机数值突然归零或异常偏高,那基本就是它出问题了。
5. 传感器帧(IMU、BARO、MAG)
IMU记录加速度和角速度,BARO记录气压高度,MAG记录磁罗盘数据。炸机前这些数据往往会有「征兆」。
关键字段速查表
| 字段缩写 | 全称 | 含义 |
|---|---|---|
| TimeUS | Time Microseconds | 时间戳(微秒) |
| Roll/Pitch/Yaw | 姿态角 | 飞机当前角度 |
| Alt | Altitude | 高度(米) |
| Vcc | Voltage | 电池电压 |
| Curr | Current | 电流 |
| NSats | Number of Satellites | GPS卫星颗数 |
| HDop | Horizontal Dilution of Precision | 水平定位精度 |
日志文件内部结构
你想想看,一个 .bin 文件里可能有几十万行数据,飞控是怎么组织的?其实它有一个固定的结构:
[文件头] → [参数块] → [数据块1] → [数据块2] → ... → [数据块N]
- 文件头:包含固件版本、硬件类型、日志格式版本
- 参数块:记录所有飞控参数(PID、滤波器设置等)
- 数据块:按时间顺序排列的各类数据帧
我一般拿到日志后,第一步不是看数据,而是先看参数块——很多炸机原因其实在参数里就埋下了伏笔。比如有一次,我发现用户把「最大倾斜角」设成了80度,这飞机不翻才怪。
如何快速定位关键数据
面对几十万行日志,你不可能逐行看。我分享几个实用技巧:
- 先看时间戳:找到炸机时刻,往前推5-10秒重点分析
- 看异常值:比如电机输出突然归零、姿态角突变、GPS HDop飙升
- 对比多个传感器:比如IMU和GPS的高度数据是否一致
我的小技巧:在Mission Planner里打开日志后,直接按Ctrl+F搜索「ERR」或「FAIL」——飞控自己报的错误往往就是突破口。我曾经靠这个在5分钟内找到了一个电机堵转的案例。
日志解析工具
工欲善其事,必先利其器。常用的工具有:
- Mission Planner:最常用,图形化界面,适合快速浏览
- PyLogViewer:Python写的,适合做批量分析
- MAVExplorer:命令行工具,适合脚本处理
我个人偏爱用MAVExplorer做深度分析,因为它可以写脚本批量提取数据。比如我想看所有电机输出异常的时刻,一行命令就搞定了。
注意:不同固件版本的日志格式可能有细微差别。比如ArduPilot 4.0之后,某些数据帧的字段顺序变了。如果你用旧版工具解析新版日志,可能会得到错误的结果。我建议每次更新固件后,也同步更新解析工具。
知识体系总览
下面这张图帮你理清日志文件结构的全貌:
说实话,日志分析这件事,刚开始会觉得眼花缭乱。但只要你掌握了文件结构,知道每种数据帧记录了什么,再配合关键字段去定位,炸机原因其实就藏在这些数字里。我见过太多人一上来就盯着姿态数据看半天,结果发现是电池电压先出了问题——所以我的建议是,按顺序来,别跳步。