3. 日志分析工具链:从原始数据到故障真相

做飞控日志分析,工具选对了,效率翻倍。选错了,你可能在数据海洋里淹死。

我见过不少新手,拿到一个炸机日志,直接打开文本编辑器看 .ulg 文件。嗯,那里面全是二进制乱码,看一天也看不出名堂。今天我把 PX4 和 ArduPilot 两大生态里最趁手的工具捋一遍,都是我自己项目里反复用过的。

核心观点:没有万能工具。每个工具都有自己的「最佳战场」。你需要的不是学会所有工具,而是知道什么场景该掏出哪一把刀。

3.1 PX4 生态:ulog2csv 与 FlightPlot

PX4 的日志格式是 .ulg(ULog)。这个格式设计得很紧凑,但人眼没法直接读。所以第一步永远是转换。

3.4.1 ulog2csv:最朴素的转换器

这是 PX4 官方提供的命令行工具。说白了,就是把二进制 .ulg 文件拆成一堆 .csv 表格。

用法极其简单:

ulog2csv log001.ulg -o ./output_folder

跑完之后,你会看到每个话题(topic)都生成一个独立的 CSV 文件。比如 vehicle_attitude_0.csv、vehicle_gps_position_0.csv。

我的习惯:我会在输出文件夹里建一个 raw 子目录,把原始 CSV 扔进去。然后用 Python 或 Excel 做二次处理时,不会污染原始数据。这个小习惯帮我避免过好几次「数据被误改」的尴尬。

ulog2csv 的优势是轻量、无依赖。你甚至可以在嵌入式板子上直接跑。但缺点也很明显——没有可视化,你得自己处理数据。

3.4.2 FlightPlot:PX4 的官方可视化利器

FlightPlot 是 PX4 团队开发的 Java 桌面应用。我个人觉得,它是目前 PX4 生态里最直观的日志查看器。

它能做什么?

  • 多曲线叠加:把姿态、高度、油门画在同一张图上,一眼看出关联性。
  • 3D 轨迹回放:把飞行路径在三维空间里重放,配合姿态数据,能还原炸机前的每一秒。
  • 数据导出:支持导出为 CSV、MAT 格式,方便做进一步分析。

我记得有一次,一个客户说飞机在空中突然翻滚。用 FlightPlot 打开日志,把 roll 和 yaw 曲线叠在一起,发现 yaw 指令发出后 roll 有 200ms 的异常抖动。最后定位是方向舵舵机齿轮打滑。如果没有这种可视化叠加,光看数字根本发现不了。

注意:FlightPlot 需要 Java 运行环境。如果你用的是 macOS 最新版,可能需要手动安装 JDK 11 以上版本。我第一次装的时候被这个坑了半小时。

3.2 ArduPilot 生态:Mission Planner 日志分析器

ArduPilot 的日志格式是 .bin 或 .log。Mission Planner 自带的日志分析器是我用过最「一站式」的工具。

打开 Mission Planner,点击 Flight Data 标签,然后 Log → Download 或 Load。加载完成后,你会看到:

  • Graph 面板:自由选择参数,绘制曲线。支持缩放、测量、标注。
  • Status 面板:显示当前帧的飞行状态、模式、传感器数据。
  • Map 面板:在地图上显示飞行轨迹,配合高度色标。

我最常用的是它的 Auto Analysis 功能。点一下,它会自动扫描日志,标记出异常事件,比如 GPS 丢失、电池电压骤降、EKF 警告等。对于快速排查,这个功能能省下 80% 的时间。

避坑指南:我曾经遇到过一个情况——Auto Analysis 报告说「GPS 健康度正常」,但飞机就是飘。后来我手动查看 GPS 的 numSats 和 hdop 曲线,发现虽然卫星数量够,但 HDOP 在某个区域突然跳变。自动分析没抓到这种「量变到质变」的细节。所以,自动分析只是起点,不是终点。

3.3 跨平台利器:MAVExplorer 与 PlotJuggler

这两个工具不挑飞控,PX4 和 ArduPilot 都能用。我强烈建议你至少掌握其中一个。

3.3.1 MAVExplorer:命令行里的瑞士军刀

MAVExplorer 是 ArduPilot 团队开发的命令行工具,但它的能力远超「命令行」三个字。

它能做什么?

  • 实时过滤:比如只提取 GPS 丢失前后的 10 秒数据。
  • 数学运算:直接在命令行里计算两个参数的差值、比值、积分。
  • 生成报告:一键输出 HTML 格式的分析报告。

举个例子,你想看「油门和高度变化率的关系」:

mavexplorer log.bin --plot "CTUN.ThrOut, GPS.Alt" --diff

它会直接画出一张对比图。嗯,就是这么粗暴。

我的建议:如果你习惯用终端,MAVExplorer 是你的不二之选。它特别适合批量处理——比如一次分析 50 个日志,找出所有「GPS 丢失」事件。用 GUI 工具一个个点,手会断的。

3.3.2 PlotJuggler:数据可视化的终极形态

PlotJuggler 不是飞控专用工具,但它被飞控社区「捧红」了。因为它太适合处理时序数据了。

它的核心优势:

  • 拖拽式操作:把参数从列表拖到画布上,自动生成曲线。
  • 自定义公式:支持 JavaScript 表达式,可以实时计算衍生数据。
  • 布局保存:你可以保存一个「标准分析布局」,每次加载日志后自动套用。

我自己保存了一个布局,叫 standard_analysis.xml。里面包含了:姿态角、高度、空速、电池电压、GPS 状态。每次拿到新日志,直接加载这个布局,5 秒钟就能看到所有关键数据。

注意:PlotJuggler 默认不支持 .ulg 和 .bin 格式。你需要安装插件。PX4 用户装 ulog_reader 插件,ArduPilot 用户装 bin_reader 插件。别搞反了,我第一次就装错了,折腾了一下午。

3.4 工具选型对比

为了让你快速决策,我整理了一张对比表。你想想看,什么场景下该用什么工具:

工具 适用飞控 核心优势 最佳场景 学习曲线
ulog2csv PX4 轻量、无依赖 批量转换、脚本处理 低
FlightPlot PX4 可视化直观、3D回放 单日志深度分析 中
Mission Planner ArduPilot 一站式、自动分析 快速排查、现场调试 低
MAVExplorer 通用 命令行、批量处理 批量分析、自动化 高
PlotJuggler 通用 灵活、可定制 复杂数据对比、自定义分析 中高

3.5 工具链工作流

说了这么多,这些工具到底怎么配合?我画了一张流程图,展示我日常的分析流水线:

日志分析工具链工作流 日志分析工具链工作流 原始日志文件 .ulg / .bin / .log 格式转换 ulog2csv / MP 下载 可视化分析 FlightPlot / MP Graph / PlotJuggler 深度分析 / 批量处理 MAVExplorer / Python 脚本 故障定位报告 💡 我的经验 先可视化,再深度分析 不要跳过中间步骤 ⚠️ 常见错误 直接读二进制日志 跳过转换步骤

这个流程我用了三年,基本没变过。核心思路是:先快速可视化,找到可疑区域;再深度分析,定位根因。不要一上来就钻到数据细节里,你会迷失的。

3.6 我的工具包推荐

如果你问我,作为一个飞控工程师,电脑里必须装哪几个工具?我的答案是:

  1. PlotJuggler —— 通用性最强,PX4 和 ArduPilot 通吃。
  2. Mission Planner —— 如果你主要做 ArduPilot,这个绕不开。
  3. MAVExplorer —— 批量处理时,命令行比 GUI 快 10 倍。
  4. ulog2csv —— 轻量级,放在 U 盘里随身带。

最后一个小建议:别贪多。先精通一个工具,比如 PlotJuggler。把它用透了,再学其他的。我见过太多人每个工具都只会皮毛,遇到真问题的时候,哪个都用不好。