2. ArduPilot与飞行日志基础
日志分析这件事,说白了就是「数据驱动排故」。但很多人一上来就急着看曲线,结果发现日志打不开、时间对不上、数据断断续续——嗯,这些坑我早年都踩过。今天咱们就把日志怎么拿到手、怎么管好它,一次性说清楚。
核心观点:日志下载不是简单的文件拷贝。下载方式、命名规则、时间戳解读、存储策略,这四件事决定了你后续分析的效率和准确性。我个人的习惯是:先规划好存储,再动手飞。
一、两种下载方式:Mission Planner 与 SD 卡直读
ArduPilot 的日志存在飞控的 SD 卡里。怎么把它弄到电脑上?主要有两条路。
1. 通过 Mission Planner 下载(无线/有线)
这是最常用的方式。飞控通过数传或 USB 连上 Mission Planner,在「Flight Data」界面点一下「Download Log」就行。
- 优点:不用拔卡,适合现场快速查看。
- 缺点:速度慢(尤其数传 115200 波特率时),大日志容易断。
我的经验:如果日志超过 50MB,我建议别用数传下载。有一次我在外场用 915MHz 数传下 120MB 的日志,下了 40 分钟断了三次——后来老老实实拔卡了。
2. 通过 SD 卡直读(推荐)
把 SD 卡拔出来,插读卡器直接拷贝到电脑。这是最可靠的方式。
- 优点:速度快、无丢包、完整保留。
- 缺点:需要拆机(有些飞控 SD 卡槽位置刁钻)。
注意:拔卡前务必先断电!我见过有人热插拔 SD 卡导致文件系统损坏,整张卡的数据全丢了。飞控断电后再操作,这是铁律。
二、日志文件命名规则:别小看那几个数字
ArduPilot 的日志文件命名格式是固定的:
YYYY-MM-DD-HH-MM-SS.BIN
例如:2025-03-15-14-32-18.BIN
这个命名直接包含了日志的创建时间(UTC 时间)。为什么强调 UTC?因为飞控本身没有时区概念,它记录的是世界协调时。
| 字段 | 含义 | 示例 |
|---|---|---|
| YYYY | 年 | 2025 |
| MM | 月 | 03 |
| DD | 日 | 15 |
| HH | 小时(UTC) | 14 |
| MM | 分钟 | 32 |
| SS | 秒 | 18 |
避坑指南:我曾经在分析一次炸机时,发现日志时间比实际飞行时间晚了 8 小时。后来才反应过来——飞控用的是 UTC,我当地是 UTC+8。所以看日志时,记得把时间戳换算成你的本地时间,或者直接在 Mission Planner 里设置时区偏移。
三、时间戳解读:别被 UTC 骗了
日志里每条数据都有时间戳,单位是微秒(µs)。但这里有个容易混淆的点:文件名的 UTC 时间和日志内部的时间戳是两回事。
- 文件名时间:飞控上电创建日志文件时的 UTC 时间。
- 内部时间戳:从飞控启动开始计时的相对时间,单位 µs。
举个例子:文件名是 2025-03-15-14-32-18.BIN,说明飞控在 UTC 14:32:18 创建了这个文件。但日志内部第一条数据的时间戳可能是 0,最后一条可能是 300000000(即 300 秒)。
怎么换算?我个人习惯用 Mission Planner 的「Log Viewer」打开日志,它会自动把相对时间换算成绝对时间。如果你用 Excel 或 Python 自己分析,记得加上文件名的 UTC 基准时间。
四、日志文件大小与存储策略:别让日志撑爆 SD 卡
ArduPilot 默认的日志记录策略是「循环覆盖」。当 SD 卡空间不足时,它会自动删除最旧的日志文件。但这里有几个参数你需要知道:
| 参数名 | 作用 | 建议值 |
|---|---|---|
| LOG_BACKEND_TYPE | 日志存储后端(SD 卡/内部 Flash) | 2(仅 SD 卡) |
| LOG_FILE_BUFSIZE | 日志写入缓冲区大小(字节) | 16K(默认) |
| LOG_DISARMED | 是否记录解锁前的数据 | 0(不记录,省空间) |
| LOG_REPLAY | 是否记录回放数据 | 0(不记录) |
注意:SD 卡容量不是越大越好。ArduPilot 对 SD 卡有兼容性要求,我建议用 32GB 以下的 Class 10 卡。有一次我用 128GB 卡,飞控频繁报「SD card error」——后来查资料才知道,部分飞控的 SDIO 驱动对大容量卡支持不好。
五、知识体系总览
下面这张图帮你理清本章的核心逻辑:
六、实操建议:我的日志管理三板斧
- 飞前清空 SD 卡:每次外场飞行前,把 SD 卡里没用的旧日志删掉。我习惯留最近 3 次飞行的日志,其他的全部清空。
- 日志按项目分类:下载到电脑后,按「日期_飞机编号_任务名称」重命名文件夹。比如「20250315_Pixhawk4_测绘」。别偷懒,不然三个月后你根本找不到哪个日志对应哪次飞行。
- 备份原始文件:分析前先复制一份原始 .BIN 文件。我吃过一次亏——用 Mission Planner 转换格式时把原文件覆盖了,后来想重新分析某些参数,发现数据已经变了。
小技巧:如果你经常飞同一架飞机,可以在 SD 卡根目录建一个名为「LOG」的文件夹,把日志都放进去。ArduPilot 支持自定义日志存储路径,这样方便你批量拷贝。
日志下载和预处理看起来是体力活,但做不好会直接影响后续分析的准确性。我个人觉得,花 10 分钟把这一步做扎实,比后面花 2 小时对着错误数据瞎猜要划算得多。