日志参数配置:LOG_BACKEND_TYPE、LOG_FILE_BUFSIZE、LOG_DISARMED 等关键参数详解

日志系统,说白了就是飞控的「黑匣子」。没有它,飞机炸了你都不知道为什么。我见过太多新手,飞机一炸就懵了,连日志都没开,那真是叫天天不应。

今天咱们就把日志配置的几个核心参数掰开揉碎讲清楚。你只要记住这三个:LOG_BACKEND_TYPELOG_FILE_BUFSIZELOG_DISARMED。搞定它们,你的日志系统就稳了八成。

1. LOG_BACKEND_TYPE:日志往哪写?

这个参数决定了日志的存储位置。ArduPilot 支持多种后端,常见的有:

参数值 后端类型 说明
1 SD卡 / 内部存储 最常用,写入速度快,容量大
2 MAVLink 遥测 通过数传实时发送到地面站,适合短时调试
3 两者同时 既写本地,又发遥测,但会占用更多带宽
4 仅 MAVLink 不写本地,纯靠数传,风险较大

我个人习惯用 1,也就是只写 SD 卡。为什么?因为稳定。遥测链路一旦断连,日志就丢了,你想想看,那得多冤。

小技巧: 如果你在做长航时飞行,建议用值 1。遥测日志可以作为辅助,但别依赖它。

2. LOG_FILE_BUFSIZE:缓冲区多大才够?

这个参数很多人忽略,但它直接影响日志的完整性。它控制的是写入 SD 卡前的内存缓冲区大小,单位是 KB

默认值通常是 16KB。对于大多数场景够用,但如果你遇到以下情况,就得调大:

  • 飞控频繁报「Log buffer overflow」警告
  • 日志文件出现时间戳跳跃
  • SD 卡写入速度慢(比如用了劣质卡)

我建议:

  • 普通飞行: 64KB 足够
  • 高速机动或高频传感器: 128KB 起步
  • 极限情况: 256KB,但别超过 512KB,否则会占用太多内存
注意: 缓冲区不是越大越好。调太大,会挤占其他任务的内存。我曾经遇到过一例,飞友把缓冲区调到 512KB,结果飞控在高速转弯时直接死机。嗯,这就是典型的过犹不及。

3. LOG_DISARMED:解锁前要不要记日志?

这个参数很有意思。它控制飞控在 未解锁(disarmed) 状态下是否记录日志。

默认值是 0,也就是不记录。但我的建议是:改成 1

为什么?因为很多故障发生在解锁之前。比如:

  • GPS 搜星异常
  • 罗盘校准失败
  • 传感器自检报错
  • 遥控器信号不稳定

这些信息,如果你不提前开日志,根本抓不到。等飞机解锁起飞了,问题可能已经埋下了。

我的经验: 有一次,一个客户反映飞机解锁后总是偏航。我让他把 LOG_DISARMED 打开,重新上电后看日志,发现是罗盘在解锁前就已经偏了 30 度。如果没有这个参数,我可能得排查半天。

4. 其他值得关注的参数

除了上面三个,还有几个参数我顺带提一下:

参数名 作用 建议值
LOG_BITMASK 控制记录哪些类型的消息 默认 0xFFFF(全开)
LOG_REPLAY 是否记录用于回放的数据 调试时开,平时关
SD_LOG_RATE 日志写入频率 默认 10Hz,一般够用

这里有个坑:LOG_BITMASK 如果设置得太小,可能会漏掉关键数据。我建议新手先全开,等熟悉了再按需裁剪。

5. 一张图看懂日志参数配置

下面这张图,是我自己总结的日志参数配置流程。你照着走一遍,基本不会出错。

日志参数配置决策流程 开始配置日志 LOG_BACKEND_TYPE 选哪个? 选 1:仅 SD 卡 选 2/3:含遥测 LOG_FILE_BUFSIZE 设多大? LOG_DISARMED 开不开? 配置完成

6. 实战建议:我的配置模板

最后,分享一套我常用的配置。你可以直接抄作业:

# 日志后端:仅 SD 卡
LOG_BACKEND_TYPE = 1

# 缓冲区大小:128KB
LOG_FILE_BUFSIZE = 128

# 解锁前也记录日志
LOG_DISARMED = 1

# 日志位掩码:全开(调试阶段)
LOG_BITMASK = 0xFFFF

# 写入频率:10Hz
SD_LOG_RATE = 10
避坑指南: 我曾经遇到过一位飞友,把 LOG_FILE_BUFSIZE 设成 0,结果日志直接不写了。嗯,这个参数不能为 0,至少 16KB 起步。

好了,日志参数配置就讲到这里。你只要记住:后端选 SD、缓冲区给够、解锁前也记,这三点做到,日志系统就不会给你掉链子。


公众号:蓝海资料掘金营,微信 deep3321