日志获取与准备:从飞控下载日志、文件管理与分析工具

拿到一台无人机,第一件事是什么?不是飞,而是搞清楚怎么把飞控里的日志拽出来。我见过不少新手,飞完直接拔电池,结果日志没保存,白忙一场。今天咱们就聊聊日志获取、文件管理,还有三个我用得最多的分析工具。

从飞控下载日志

不同飞控的日志下载方式不太一样。我主要接触PX4和ArduPilot,它们的流程其实大同小异。

飞控固件 日志存储位置 下载方式
PX4 SD卡 /log/ 目录 USB连接QGroundControl,或直接拔卡
ArduPilot SD卡 /APM/LOGS/ 目录 USB连接Mission Planner,或拔卡
Betaflight 板载Flash CLI命令或Blackbox工具

我个人习惯用USB直连。原因很简单——不用拆机。插上线,打开地面站,找到日志管理页面,勾选需要的文件,点下载就行。

小技巧:下载前先看看日志文件大小。一次10分钟的飞行,日志大概50-100MB。如果文件特别小(比如几KB),那多半是飞控没正常记录,得检查SD卡或配置。

日志文件管理

日志多了以后,管理是个大问题。我刚开始做飞控测试时,一个月攒了200多个.ulg文件,找起来简直崩溃。后来我养成了几个习惯:

  • 按日期+任务命名:比如 2024-03-15_loiter_test.ulg,一看就知道是什么时候、什么场景飞的。
  • 建立目录结构:根目录按项目分,子目录按日期分。别把所有日志扔一个文件夹里。
  • 及时清理:飞控的SD卡空间有限,飞完一次就把日志拷出来,然后删掉飞控上的旧文件。
注意:SD卡用久了会出坏块。我曾经遇到过飞控报"log write error",换张卡就好了。建议每3个月格式化一次SD卡,或者直接换新卡。

常用日志分析工具介绍

工具不在多,顺手就行。我主要用三个:FlightPlot、PlotJuggler、pyulog。它们各有侧重,下面详细说说。

FlightPlot

这是PX4官方推荐的桌面工具,Java写的,跨平台。界面比较传统,但胜在稳定。

  • 支持.ulg和.px4log格式
  • 可以同时绘制多条曲线
  • 支持数据导出为CSV
  • 内置了一些常用分析模板(比如姿态、GPS、电池)

我记得有一次,飞控在悬停时突然偏航,用FlightPlot把偏航角、电机转速、磁力计数据叠在一起看,很快就发现是磁力计受到了电机干扰。嗯,这种多曲线对比的功能,FlightPlot做得最顺手。

PlotJuggler

这个工具我强烈推荐。它原本是ROS社区的,后来支持了.ulg格式。界面比FlightPlot现代得多,交互也灵活。

  • 拖拽式操作,想画什么曲线直接拖
  • 支持数据变换(比如求差值、滤波、自定义公式)
  • 可以保存布局,下次直接加载
  • 支持实时数据流(配合ROS或UDP)

说白了,PlotJuggler就是日志分析里的瑞士军刀。我经常用它做快速排查——把可疑的几个参数拖出来,几秒钟就能看出问题。

pyulog

这是Python库,适合批量处理和自动化分析。如果你需要写脚本处理大量日志,pyulog是首选。

# 用pyulog读取.ulg文件并提取数据
from pyulog import ULog

log = ULog('flight_001.ulg')
data = log.get_dataset('vehicle_attitude')
print(data.data['roll'])  # 输出滚转角数据

我写过一个脚本,用pyulog批量检查100份日志,自动标记出GPS丢星、振动超标、电池压降过大的情况。你想想看,要是手动一个个看,得看到什么时候?

工具对比

工具 适用场景 上手难度 我最常用的功能
FlightPlot 单次详细分析 低 多曲线对比、模板分析
PlotJuggler 快速排查、交互式探索 中 拖拽绘图、数据变换
pyulog 批量处理、自动化 高(需编程) 脚本批量分析
我的建议:新手先用FlightPlot,熟悉日志结构。遇到疑难杂症时换PlotJuggler,它的交互方式更容易发现隐藏问题。如果要做批量分析或集成到测试流程,再学pyulog。

本章知识体系

下面这张图总结了日志获取与准备的核心流程,以及三个工具在其中的定位。

日志获取与准备流程 飞控(PX4/ArduPilot) USB直连 / 拔SD卡 / CLI命令 文件管理(命名/归档/清理) 日志分析工具 FlightPlot PlotJuggler pyulog 核心原则:先获取 → 再管理 → 最后分析,工具选顺手就行

这张图把整个流程串起来了。从飞控里把日志弄出来,做好文件管理,然后根据需求选工具。我个人觉得,工具只是手段,关键是你对日志里每个参数的理解。后面几章,咱们会深入每个参数的含义和常见故障模式。