3. 日志记录机制与参数配置
各位同学,欢迎来到第三章。上一章我们聊了怎么把日志文件从飞控里拽出来,也见识了bin文件长什么样。但光有文件还不够——你得能看懂里面每一行数据在说什么。
说白了,飞控日志就像飞机的“黑匣子”。它每秒都在拼命记录:姿态多少、GPS收了几颗星、电机转得多快、遥控器打了多少杆……但这些东西不是写作文,而是按一种固定的“数据包格式”打包存放的。不理解这个格式,你看到的就只是一堆乱码。
我个人习惯把数据包比作一封信。信有信封、有收件人、有正文、有落款。数据包也一样,它有一个固定的结构。今天我们就来拆开这封信,看看里面到底装了些什么。
数据包结构:一封“飞控来信”
ArduPilot的日志数据包,结构非常紧凑。每个包由以下几个部分组成:头、时间、ID、长度、数据体、CRC。我画了一张图,你可以对照着看。
嗯,这里要注意。头是两个固定字节:0xA3 0x95。飞控在解析日志时,只要看到这两个字节,就知道“哦,一个新包来了”。时间戳是微秒级的,从飞控上电开始算。ID就是消息类型,比如ATT、IMU、GPS这些。长度告诉你数据体占了多少字节。数据体是真正的数据,比如姿态角、加速度、GPS坐标。最后CRC是校验和,用来检查数据在传输或存储过程中有没有被损坏。
常见消息ID速查表:快速定位关键数据
ArduPilot的日志消息ID有上百种,但常用的其实就十几个。我把它们整理成了一张表,你最好能记下来,或者至少知道去哪里查。
| 消息ID | 中文含义 | 数据体内容 | 典型频率 |
|---|---|---|---|
| ATT | 姿态 | Roll, Pitch, Yaw (角度) | 10-50 Hz |
| IMU | 惯性测量单元 | 加速度计、陀螺仪原始值 | 100-400 Hz |
| GPS | 全球定位系统 | 经纬度、高度、速度、卫星数 | 5-10 Hz |
| RCIN | 遥控器输入 | 各通道PWM值 (Ch1-Ch16) | 10-50 Hz |
| RCOU | 遥控器输出 | 各通道PWM输出值 (Ch1-Ch16) | 10-50 Hz |
| BARO | 气压计 | 气压、温度、海拔 | 10-25 Hz |
| MAG | 磁力计 | 磁场强度 (X, Y, Z) | 10-50 Hz |
| MOT | 电机输出 | 各电机PWM值 | 10-50 Hz |
| CTUN | 控制回路 | 油门、高度、速度控制量 | 10-50 Hz |
| NTUN | 导航回路 | 位置、速度、航向控制量 | 10-50 Hz |
你想想看,如果飞机在空中突然抖了一下,你该看哪个消息?我建议先看ATT,看姿态角有没有突变。如果ATT正常,再看IMU,看加速度计和陀螺仪有没有异常。如果IMU也正常,那可能是GPS或者气压计的问题。这就是一个排查思路。
数据包频率与记录条件:为什么有些数据丢了?
这个问题很关键。很多新手问我:“为什么我的日志里GPS数据只有5Hz,而IMU数据有200Hz?是不是飞控坏了?”
其实不是。每个消息都有自己的记录频率和记录条件。飞控不会把所有数据都记录下来,那样SD卡很快就写满了。它是有选择地记录。
我举个例子。IMU数据变化很快,飞控需要高频采样才能准确感知姿态变化,所以IMU的记录频率通常很高,100-400Hz。而GPS数据变化慢,5-10Hz就够用了。你想想看,GPS每秒才更新一次位置,你记录100Hz有什么意义?全是重复数据。
另外,有些消息是有记录条件的。比如MOT(电机输出)消息,只有在电机解锁后才会记录。飞机在地上停着的时候,你记录电机输出干嘛?浪费空间。再比如GPS消息,如果GPS没有锁定,飞控就不会记录GPS数据。所以如果你发现日志里没有GPS数据,先检查一下GPS有没有锁定。
记录条件速查:
- ATT / IMU / BARO / MAG: 只要飞控上电就记录,无条件。
- GPS: 只有GPS锁定(3D Fix)后才记录。
- RCIN: 只要接收机有信号就记录。
- RCOU / MOT: 只有电机解锁(armed)后才记录。
- CTUN / NTUN: 只有飞行模式为自动模式(如Loiter、Auto)时才记录。
嗯,这里还有一个坑。有些飞控参数会影响记录频率。比如LOG_BITMASK参数,它控制哪些消息被记录。如果你把这个参数设错了,某些消息可能根本就不会被记录。我曾经帮一个朋友排查问题,他死活找不到GPS数据,最后发现是LOG_BITMASK把GPS消息给屏蔽了。改回来就好了。
1. 检查
LOG_BITMASK参数,确认该消息没有被屏蔽。2. 检查该消息的记录条件是否满足(比如GPS是否锁定、电机是否解锁)。
3. 检查SD卡剩余空间,如果空间不足,飞控会优先丢弃非关键消息。
4. 最后再怀疑硬件问题。