日志采集与配置:让飞控开口说话

日志配置这件事,说白了就是告诉飞控:「嘿,把哪些数据记下来,怎么记,记完放哪儿。」

很多新手一上来就急着飞,日志配置随便选个默认值就上了。结果炸机了想分析,发现关键数据没录上,或者日志文件损坏读不出来。我早期就吃过这个亏,后来养成了一个习惯:每次飞前必检查日志配置。

PX4 日志配置:SDLOG_PROFILE 参数

PX4 的日志系统核心参数就一个——SDLOG_PROFILE。它决定了飞控往 SD 卡里写什么数据。

SDLOG_PROFILE 值 含义 适用场景
0(默认) 全量日志:传感器、姿态、位置、RC 输入等 日常调试、首次试飞
1 仅传感器原始数据(IMU、磁力计、气压计) 传感器标定、震动分析
2 仅估计器数据(EKF 内部状态) 定位漂移、EKF 故障排查
3 高分辨率日志(降低降采样率) 高频震动、快速动态分析
我的习惯:开发阶段用默认值 0,等系统稳定了再根据具体问题切换到对应 profile。比如排查震动,我会切到 profile 1,只看 IMU 原始数据,日志文件小很多,分析起来也快。

还有一个容易被忽略的参数——SDLOG_MODE。它控制日志写入模式:

  • 0:写满就停止,适合长时间飞行
  • 1:写满后覆盖最旧的日志,适合持续监控
  • 2:不自动写日志,需要手动触发

我个人建议日常用模式 0,配合大容量 SD 卡。模式 1 有风险——万一炸机时正好覆盖了关键数据,那就真哭了。

ArduPilot 日志配置:LOG_BACKEND_TYPE 参数

ArduPilot 的日志系统比 PX4 灵活一些,核心参数是 LOG_BACKEND_TYPE。它决定了日志写到哪里去。

LOG_BACKEND_TYPE 值 存储介质 特点
0 仅 SD 卡 最稳定,容量大
1 仅内部闪存 容量小(通常 2MB),但不怕 SD 卡松动
2 SD 卡 + 闪存同时写 冗余备份,但写入压力大
3 仅通过 MAVLink 遥测传输 适合地面站实时记录,不依赖板载存储
我曾经踩过的坑:有一次用 LOG_BACKEND_TYPE=2,想着双备份更安全。结果 SD 卡写入速度跟不上,导致闪存也写坏了,两路日志全丢。后来我学乖了——除非有特殊需求,否则只用 SD 卡,选一张高速卡(Class 10 以上)。

ArduPilot 还有一个 LOG_DISARMED 参数,控制解锁前是否记录日志。我建议设成 1,这样上电就开始录,能捕捉到解锁前的传感器预热、GPS 搜星等过程。很多奇怪的问题,其实在解锁前就已经有征兆了。

日志触发模式:预触发 vs 后触发

这个功能特别实用。说白了就是:让日志系统在「出事」前后自动保留一段数据。

  • 预触发(Pre-trigger):记录触发事件发生前的一段数据。比如你设了 10 秒预触发,飞控检测到「掉高」时,会把掉高前 10 秒的数据也保存下来。
  • 后触发(Post-trigger):记录触发事件发生后的一段数据。比如掉高后继续录 5 秒,看看飞控是怎么响应的。

两者结合,就能完整还原事故前后的「故事」。我一般设预触发 15 秒、后触发 10 秒,这样既能看清原因,也能看到后果。

触发条件怎么设?
PX4 用 SDLOG_TRIGGER 参数,可以选加速度异常、高度突变、遥控器失控保护等。ArduPilot 则用 LOG_TRIGGER_TYPE 和 LOG_TRIGGER_PIN,支持硬件引脚触发。
我个人建议至少设一个「加速度超限」触发——炸机瞬间加速度肯定爆表,这个触发最可靠。

日志存储与导出

日志存好了,还得能读出来。这里有几个要点:

  1. 文件系统:PX4 用 FAT32,ArduPilot 也是 FAT32。注意单个文件不能超过 4GB,不过飞控日志一般到不了这个量级。
  2. 文件命名:PX4 的日志文件是 .ulg 格式,命名如 2025-01-15_14-30-22.ulg。ArduPilot 是 .bin 或 .log,命名如 2025-01-15 14-30-22.log。按时间排序,找起来很方便。
  3. 导出方式:
    • 拔 SD 卡,用读卡器拷贝——最直接,也最快
    • 通过 MAVLink 下载——适合不想拆机的情况,但速度慢
    • 通过 WiFi/蓝牙模块无线传输——方便,但容易断连
一个小技巧:每次飞完后,把日志文件名加上「正常/异常」的标记。比如 2025-01-15_14-30-22_正常.ulg。这样回头翻日志时,一眼就能看出哪些是「好」的,哪些是「坏」的。我坚持这个习惯好几年了,帮自己省了不少时间。

本章知识体系

下面这张图,把日志采集与配置的核心逻辑串起来了。你一看就明白:

日志采集与配置知识体系 日志采集与配置核心逻辑 飞控平台 PX4:SDLOG_PROFILE ArduPilot:LOG_BACKEND_TYPE 全量日志 传感器原始 估计器状态 SD 卡 内部闪存 MAVLink 触发模式 预触发(前 15s) 后触发(后 10s) 存储与导出

嗯,这张图把整个流程串起来了。从飞控平台出发,左边是 PX4 的配置路径,右边是 ArduPilot 的配置路径,中间是触发模式,底部是存储导出。你配置日志时,就按这个逻辑走,不会漏掉任何环节。

一句话总结:日志配置不是「设完就忘」的事。每次换飞控、换传感器、换任务类型,都应该重新审视一遍参数。我见过太多人因为「默认配置够用」这个想法,丢了关键数据。别让这种事发生在你身上。