2. ArduPilot日志系统概述
日志这东西,说白了就是飞控的「黑匣子」。飞机在天上干了什么、传感器数据正不正常、PID调得对不对,全得靠它说话。但很多新手一上来就开默认配置,结果要么日志太多把SD卡撑爆,要么关键数据没录上,排查问题时两眼一抹黑。
这一章,我就带你把这套流程捋清楚。从LOG_BITMASK怎么配,到日志怎么取出来,再到文件怎么管,一条龙讲透。
LOG_BITMASK:你的日志开关面板
LOG_BITMASK是个32位的位掩码参数。每一位代表一个日志组,置1就录,置0就不录。我刚开始接触时也觉得这东西有点抽象,后来把它想象成一个「开关面板」——每个开关控制一类数据,就简单多了。
| 位 | 十六进制值 | 日志组 | 说明 |
|---|---|---|---|
| 0 | 0x01 | ATTITUDE | 姿态数据(欧拉角、四元数) |
| 1 | 0x02 | GPS | GPS位置、速度、星数 |
| 2 | 0x04 | RCIN | 遥控器输入通道 |
| 3 | 0x08 | RCOUT | 电机/舵机输出 |
| 4 | 0x10 | IMU | 加速度计、陀螺仪原始数据 |
| 5 | 0x20 | MOTORS | 电机混控输出 |
| 6 | 0x40 | BARO | 气压计数据 |
| 7 | 0x80 | CTUN | 控制回路调谐数据 |
| 8 | 0x100 | NTUN | 导航调谐数据 |
| 9 | 0x200 | PM | 电源管理数据 |
常用配置参考:
- 日常飞行调试:0x1F(位0-4全开)——姿态、GPS、遥控、输出、IMU都有了
- PID调参:0x1FF(位0-8全开)——加上CTUN和NTUN,方便看控制响应
- 故障排查:0x3FF(位0-9全开)——电源数据也录上,查供电问题
- 长时间航测:0x03(只开姿态和GPS)——省空间,够用就行
设置方法很简单:LOG_BITMASK = 0x1F,保存重启就行。我个人习惯在Mission Planner的「全部参数表」里直接改,比图形界面快得多。
小技巧:如果你不确定当前配置够不够,先开大一点(比如0x3FF),飞一次看看日志大小,再逐步关掉不需要的组。我一般留个0x1FF作为「标准配置」,大部分场景都够用。
日志记录速率:别让数据打架
LOG_BITMASK决定了「录什么」,而记录速率决定了「多快录一次」。速率太高,CPU忙着写SD卡,飞控响应会变慢;速率太低,关键数据可能漏掉。
ArduPilot里有两个关键参数:
- LOG_RATE:主循环日志写入速率,默认10Hz。我一般调到25Hz,平衡性和性能都不错。
- 每个传感器有自己的采样率:比如IMU默认400Hz,但日志里不会每条都记,而是按LOG_RATE降采样。
注意:别把LOG_RATE设得太高。我曾经在测试时设到50Hz,结果飞控在急转弯时出现了短暂的日志写入延迟,导致姿态控制抖动了一下。后来查了半天才发现是SD卡写入占用了太多CPU时间。建议上限25Hz,除非你用高速SD卡且CPU有余量。
还有个容易被忽略的点:日志消息类型。有些消息(比如IMU原始数据)本身就很大,如果再加上高频率写入,SD卡很容易成为瓶颈。我的经验是:先飞一次,看日志文件大小和写入延迟,再微调。
日志获取:SD卡 vs 数传
日志拿到手,才能分析。获取方式主要有两种,各有优劣。
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| SD卡直读 | 速度快、数据完整、不受信号干扰 | 需要拔卡、插卡,户外操作麻烦 | 研发调试、长时间飞行 |
| 数传下载 | 不用碰飞机,远程就能拿数据 | 速度慢(通常115200bps)、可能丢包 | 现场快速查看、短途飞行 |
SD卡方式:飞机落地后,拔卡插读卡器,在/APM/LOGS/目录下找.BIN或.LOG文件就行。我习惯用Mission Planner → MAV Tuning → DataFlash Logs → Download来下载,但其实直接拷文件更快。
数传方式:在Mission Planner里连接数传,进入「DataFlash Logs」页面,选「Download」。注意:数传带宽有限,大日志文件可能要等很久。我一般只下载最近一次飞行的日志,或者用LOG_FILE_BUFFER参数控制只保留最近几个文件。
避坑指南:数传下载时,千万别断开连接或让飞机断电。我曾经在下载到80%时手贱碰了下电源线,结果日志文件损坏,那次飞行的数据全没了。嗯,从那以后我都是先拔SD卡再分析。
日志文件命名规则与存储管理
ArduPilot的日志文件命名很规律:XX.BIN或XX.LOG,其中XX是两位十六进制数,从00到FF循环。比如0A.BIN、1F.LOG。文件按创建时间顺序编号,满了就覆盖最早的。
但说实话,这个命名方式对人不友好。你飞了10次,看到的全是00.BIN到09.BIN,根本分不清哪次是哪次。我的做法是:
- 飞完后立即重命名:比如
2024-03-15_测试PID参数.BIN - 用文件夹分类:按日期或项目建文件夹,比如
2024-03/、PID调试/ - 配合日志备注:在Mission Planner里给每次飞行加备注,下载时备注会一起保存
存储管理方面,SD卡容量有限,建议:
- 使用Class 10或UHS-I级别的SD卡,写入速度至少10MB/s
- 定期清理旧日志,保留最近20-30次飞行就够了
- 重要日志及时备份到电脑或云盘
警告:SD卡写入速度不够,会导致日志丢失甚至飞控卡死。我见过有人用了一张老旧的Class 4卡,结果在高速飞行时日志写入失败,飞控直接重启。别省这点钱,一张好SD卡才几十块。
知识体系总览
下面这张图,把本章的核心逻辑串起来了。你一看就明白:从参数配置到数据落地,每一步都环环相扣。
你看,整个流程其实就三步:先配好LOG_BITMASK和LOG_RATE,然后通过SD卡或数传把日志取出来,最后按规范命名和管理。每一步都有坑,但踩过一次就记住了。