2. 日志查看工具:QGC内置日志查看器、FlightPlot、PlotJuggler、MATLAB/Simulink日志分析
日志拿到手了,一堆 .bin 或 .ulg 文件。怎么打开?怎么看?
说实话,我刚入行那会儿,面对一堆二进制日志也是一脸懵。后来慢慢摸清了门道。今天我把常用的四款工具给你捋一遍。它们各有各的脾气,也各有各的绝活。
核心观点:没有万能工具。QGC 适合快速排查,FlightPlot 适合飞控老手,PlotJuggler 适合深度数据挖掘,MATLAB 适合科研级分析。你得学会根据场景选工具。
2.1 QGC 内置日志查看器:最轻量的快速排查工具
QGC 自带的日志查看器,说白了就是“看一眼”的工具。它不需要额外安装,打开 QGC 就能用。
怎么打开?
- 菜单栏 → 分析工具 → 日志查看
- 或者直接拖拽 .bin / .ulg 文件到 QGC 窗口
它能干什么?
- 快速查看主要的传感器曲线:加速度计、陀螺仪、磁力计、GPS 状态
- 查看飞行模式切换、遥控器信号、电池电压
- 查看故障保护触发记录(比如“GPS loss”、“EKF failure”)
注意:QGC 日志查看器只能看,不能做复杂运算。它不会帮你做 FFT 分析,也不会计算振动频谱。如果你发现曲线异常,但 QGC 里看不出原因,就该换工具了。
我的经验:有一次飞机在空中突然偏航,我第一反应就是打开 QGC 日志查看器。一看磁力计曲线,在某个时间段出现了明显的尖峰。嗯,基本确定是电磁干扰。QGC 帮我快速定位了问题区间,省了我不少时间。
2.2 FlightPlot:PX4 生态的“老伙计”
FlightPlot 是 PX4 官方推荐的日志分析工具。它比 QGC 强大,但比 MATLAB 轻量。我个人习惯用它做日常的“深度体检”。
安装方式:
- Windows / macOS / Linux 都有独立安装包
- 下载地址:PX4 官网的 Tools 页面
核心功能:
| 功能模块 | 说明 | 我的常用场景 |
|---|---|---|
| 曲线绘制 | 支持多轴、多曲线叠加对比 | 对比左右电机的转速曲线,排查动力不平衡 |
| 3D 飞行轨迹 | 在地图上显示飞行路径,带姿态信息 | 看飞机是不是在某个点突然掉高 |
| 消息解析 | 自动解析 PX4 uORB 消息 | 查看 actuator_controls 和 actuator_outputs 是否一致 |
| 统计面板 | 自动计算最大值、最小值、均值、标准差 | 快速评估振动水平:看 accel 的方差 |
操作小技巧:
- 按住 Ctrl 可以同时选择多个曲线
- 右键曲线可以导出 CSV 数据,方便导入其他工具
- 在 3D 视图里,可以用鼠标拖拽旋转视角
避坑指南:我曾经用 FlightPlot 分析一次炸机日志。一开始只看姿态曲线,没发现问题。后来切换到“电机输出”曲线,才发现有一个电机的输出值在某个时刻突然降为 0。原来是电调过热保护了。所以,别只看姿态,电机输出、电池电流这些“底层”数据往往藏着真相。
2.3 PlotJuggler:数据挖掘的“瑞士军刀”
PlotJuggler 不是飞控专用工具,但它是我见过最灵活的时序数据可视化工具。它支持多种数据源:ROS bag、CSV、ULog、MAT 文件。
为什么我推荐它?
- 拖拽式操作:从左侧列表拖变量到画布,自动生成曲线
- 强大的变换功能:可以对曲线做数学运算:加减乘除、FFT、积分、微分
- 布局保存:你可以把常用的分析布局保存为 .xml 文件,下次直接加载
典型用法:
- 打开 PlotJuggler,加载 .ulg 文件
- 从左侧拖出
vehicle_acceleration[0]到画布 - 再拖出
vehicle_acceleration[1]和vehicle_acceleration[2] - 右键曲线 → 变换 → FFT,查看振动频谱
- 如果发现 50Hz 附近有尖峰,大概率是螺旋桨共振
核心优势:PlotJuggler 的 FFT 功能是我排查振动问题的首选。QGC 和 FlightPlot 都没有这么方便的频谱分析能力。
我的经验:有一次飞机在悬停时出现高频抖动。我用 PlotJuggler 对加速度计数据做 FFT,发现 80Hz 处有一个明显的峰值。对照电机转速,发现是电机在 80Hz 附近产生了共振。调整了螺旋桨平衡后,问题解决。没有 PlotJuggler,我可能还在盲目调 PID。
2.4 MATLAB/Simulink:科研级日志分析
如果你要做深度的数据分析,比如系统辨识、控制性能评估、故障诊断,MATLAB 是绕不开的。
怎么用?
- PX4 官方提供了
px4_log_analysis.m脚本,可以自动解析 .ulg 文件 - 也可以自己写脚本,用
ulogreader函数读取数据
示例代码:
% 读取 ULog 文件
ulog = ulogreader('flight_log.ulg');
% 获取加速度计数据
accel = readTopicMsgs(ulog, 'sensor_accel');
time_us = accel.Time;
accel_x = accel.Data(:,1);
accel_y = accel.Data(:,2);
accel_z = accel.Data(:,3);
% 绘制曲线
plot(time_us/1e6, accel_x);
hold on;
plot(time_us/1e6, accel_y);
plot(time_us/1e6, accel_z);
legend('X', 'Y', 'Z');
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('Accelerometer Data from ULog');
MATLAB 的优势:
- 可以做系统辨识:用日志数据辨识飞机的传递函数
- 可以设计滤波器:根据振动频谱设计陷波滤波器
- 可以批量处理:一次分析几十个日志,自动生成报告
注意:MATLAB 的学习曲线比较陡。如果你只是偶尔分析一次日志,没必要上 MATLAB。先用 PlotJuggler 和 FlightPlot 就够了。MATLAB 适合做“研究”而不是“排查”。
2.5 工具选择指南
你可能会问:这么多工具,我到底该用哪个?
我根据不同的场景,给你一个参考:
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 快速查看飞行状态 | QGC 日志查看器 | 打开即用,无需安装 |
| 日常飞后检查 | FlightPlot | 功能全面,操作直观 |
| 振动/频谱分析 | PlotJuggler | FFT 功能强大,操作灵活 |
| 科研/系统辨识 | MATLAB/Simulink | 算法丰富,可定制性强 |
| 批量分析/自动报告 | MATLAB + 脚本 | 可以自动化处理大量日志 |
我的建议:新手先从 QGC 开始,熟悉日志的基本结构。然后切换到 FlightPlot,学会看关键曲线。等你遇到振动、控制这类复杂问题时,再学 PlotJuggler。MATLAB 可以放在最后,按需学习。
2.6 本章知识结构图
下面这张图,帮你理清这四款工具的关系和适用场景:
这张图你看懂了吗?核心就一句话:日志文件是源头,工具是手段,解决问题才是目的。