1、无人机日志概述

各位同学,欢迎来到《无人机日志分析与故障排查》的第一章。我是你们这门课的主讲,干了十来年无人机系统工程师,飞过的机型从开源飞控到工业级垂起,踩过的坑也不少。今天咱们先聊聊最基础的东西——日志到底是什么,它凭什么能帮我们修飞机。

什么是无人机日志

说白了,无人机日志就是飞机自己写的一份「飞行日记」。飞机上的飞控、传感器、电机、电池,每个部件都在不停地往外吐数据。日志把这些数据按时间顺序存下来,就像黑匣子一样。

我习惯把日志分成两类:

  • 系统日志:飞控固件自己产生的,记录状态切换、报错信息、参数变更。比如 Pixhawk 的 .bin 文件。
  • 数据日志:传感器和遥控信号的采样值,比如加速度、角速度、GPS 坐标、PWM 输出。这类数据量大,频率高。

嗯,这里要注意:不是所有飞控都默认开日志。我见过不少新手飞手,飞机炸了才想起来问「日志呢?」——结果根本没开。所以拿到一台新飞机,第一件事就是确认日志开关是打开的。

日志的作用与价值

日志能干什么?我总结了三层价值:

  1. 故障定位:飞机为什么突然翻滚?为什么 GPS 丢星?日志里每一毫秒的数据都能告诉你真相。
  2. 性能评估:电池压降是否正常?电机响应有没有延迟?调参前后对比日志,比凭感觉靠谱一百倍。
  3. 事故复盘:炸机之后,保险公司、厂家、用户各执一词。日志是唯一客观的证据。我在项目里遇到过好几次,用户说飞控失控,结果日志一看,是遥控器信号丢失导致触发 failsafe。

核心观点:没有日志的无人机,就像没有仪表盘的飞机。你只能靠猜。

常见日志格式

目前主流的飞控日志格式有三种。我列个表,大家先混个眼熟:

格式 扩展名 典型飞控 特点
ULog .ulg PX4 二进制,体积小,带自描述头
BIN .bin ArduPilot 二进制,按消息 ID 组织,解析快
CSV .csv 部分商业飞控 / 后处理导出 纯文本,可读性好,但体积大

ULog(PX4 原生格式)

ULog 是 PX4 团队自己设计的二进制日志格式。它的好处是自带「目录」——文件头里就写明了包含哪些消息类型、每个消息的字段名和数据类型。你想想看,解析的时候不用猜,直接按索引读就行。

我个人习惯用 ulog2csv 工具把它转成 CSV,方便在 Excel 里快速预览。但注意,转出来的 CSV 文件会很大,一个 10 分钟的飞行日志,转成 CSV 可能上百兆。

# 把 ulog 转成 csv
ulog2csv flight_001.ulg -o ./output/

BIN(ArduPilot 原生格式)

ArduPilot 的 .bin 文件也是二进制的,但结构跟 ULog 不太一样。它按消息 ID 来组织数据,每个 ID 对应一种数据结构。比如 ID=1 是 GPS 数据,ID=2 是 IMU 数据。

我曾经遇到过一个问题:用 Mission Planner 下载日志时,选了「只下载最近一次飞行」,结果下载下来的 .bin 文件只有几 KB。后来才发现,是飞控的 SD 卡满了,日志根本没写进去。嗯,从那以后我每次飞完都会检查一下日志文件大小。

# 用 mavlogdump 查看 bin 文件头
mavlogdump.py --types GPS flight_001.bin | head -20

CSV(通用格式)

CSV 其实不算飞控的原生日志格式,更多是后处理工具导出的中间产物。它的优点是任何文本编辑器都能打开,缺点也很明显——没有元数据,字段名全靠第一行,时间戳经常是微秒级整数,看着头疼。

小技巧:拿到 CSV 日志后,先检查第一行字段名是否完整。我见过不少 CSV 文件因为导出时编码问题,字段名乱码,导致整列数据对不上号。

日志格式对比总结

三种格式各有优劣,我画了一张图帮大家理清关系:

无人机日志格式关系图 无人机日志格式关系图 PX4 飞控 ArduPilot 飞控 商业飞控 ULog (.ulg) BIN (.bin) 私有格式 CSV(通用导出格式) 分析工具:Excel / Python / Mission Planner / QGC 说明:飞控产生原生格式日志,通过工具可导出为 CSV,最终由分析工具处理

避坑指南:我曾经遇到过用户把 .bin 文件直接改后缀名成 .csv,然后说「打不开」。千万别这么干!二进制文件必须用专用工具解析,改后缀名只会让文件损坏。

怎么选择日志格式

说实话,选哪种格式不是你能决定的——取决于你用的飞控。但理解它们的差异,能帮你少走弯路:

  • 如果你用 PX4,默认就是 ULog。建议保留原始 .ulg 文件,需要时再转 CSV。
  • 如果你用 ArduPilot,默认是 .bin。Mission Planner 自带的日志浏览器就很好用。
  • 如果你拿到的是 CSV,先确认字段名和时间戳格式,别急着分析。