日志分析工具链:QGC内置日志查看器、FlightPlot、PX4日志分析工具(pyulog)、MATLAB/Simulink日志分析

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

我刚开始接触PX4日志时,拿着一个几十MB的ulog文件,用记事本打开——全是乱码。后来才知道,这玩意儿得用专门的工具。今天我把常用的几套工具链捋一遍,都是我在项目中实际用过的,优缺点我会说清楚。

核心观点:没有万能工具。快速定位用QGC内置查看器,深度分析用FlightPlot或MATLAB,批量处理用pyulog脚本。

2.1 QGC内置日志查看器——快速扫一眼

QGC自带的日志查看器,说白了就是给你“看一眼”用的。飞机刚落地,想知道刚才有没有报错?打开它,拖进去,几秒钟就能看到关键信息。

优点:

  • 不用装任何东西,QGC自带
  • 加载速度快,适合现场快速排查
  • 能显示基本的飞行轨迹、姿态、油门、GPS状态

缺点:

  • 不能做复杂的数学运算
  • 不能叠加多个变量对比分析
  • 图表交互性差,缩放、平移不流畅

我记得有一次在户外测试,飞机突然偏航。客户催得急,我直接在笔记本上打开QGC,加载日志,看到GPS的hdop值在某个时刻跳到了3.5以上。嗯,问题找到了——卫星信号被遮挡。前后不到两分钟。

我的习惯:现场排查用QGC内置查看器,只看三个东西:飞行轨迹(看有没有异常抖动)、GPS状态(看卫星数和hdop)、报错信息(看有没有EKF警告)。其他数据,回去再细看。

2.2 FlightPlot——飞控工程师的瑞士军刀

FlightPlot是我个人最常用的工具。它专门为PX4日志设计,界面比QGC专业得多。

它能做什么?

  • 同时打开多个变量,叠加对比
  • 支持数学表达式计算(比如把加速度计原始值转成g值)
  • 可以导出图片,方便写报告
  • 支持时间轴缩放、区域选择

举个例子,你想看“电机输出”和“期望推力”是否匹配。在FlightPlot里,把actuator_outputs和vehicle_attitude_setpoint拖到一起,一眼就能看出偏差。

安装方式:

# 从GitHub下载最新版本
# 或者用pip安装
pip install flightplot
避坑:FlightPlot对中文路径支持不好。我曾经把日志放在“D:\测试数据\2024-03-15\”下,结果打不开。改成英文路径就好了。所以,养成好习惯——所有日志文件路径不要有中文。

2.3 pyulog——批量处理的利器

当你手上有几十个日志文件,一个一个拖进FlightPlot看?太慢了。这时候就需要pyulog。

pyulog是PX4官方提供的Python库,专门用来解析ulog文件。你可以写脚本批量提取数据、做统计分析、甚至自动生成报告。

常用命令:

# 查看日志基本信息
pyulog_info flight.ulg

# 提取某个topic的数据为CSV
pyulog_extract flight.ulg --topic sensor_accel

# 列出所有topic
pyulog_list flight.ulg

我的一个实际案例:有一次我们需要分析100架次飞行中“振动水平”的变化趋势。手动看?不可能。我写了一个Python脚本,用pyulog批量读取所有日志,提取每个架次的振动RMS值,然后画成趋势图。结果发现,某批次的电机振动明显偏高——后来查出是螺旋桨动平衡出了问题。

核心代码片段:
import pyulog
import pandas as pd

# 读取日志
ulog = pyulog.Pyulog('flight.ulg')
ulog.read_all_messages()

# 提取振动数据
vibe_data = ulog.get_dataset('sensor_vibration')
df = pd.DataFrame({
    'timestamp': vibe_data.timestamp,
    'vibration_x': vibe_data.data['vibration_x'],
    'vibration_y': vibe_data.data['vibration_y'],
    'vibration_z': vibe_data.data['vibration_z']
})

# 计算RMS
rms = (df['vibration_x']**2 + 
       df['vibration_y']**2 + 
       df['vibration_z']**2)**0.5
print(f'振动RMS值: {rms.mean():.3f}')

2.4 MATLAB/Simulink日志分析——学术级深度分析

如果你要做控制系统的深度分析,比如系统辨识、频域分析、滤波器设计,那MATLAB是绕不开的。

PX4官方提供了px4_log_analysis.m脚本,可以直接导入ulog文件。但说实话,这个脚本功能有限,我一般自己写分析脚本。

MATLAB分析流程:

  1. 用ulogreader函数读取ulog文件
  2. 提取需要的topic数据
  3. 做FFT分析、绘制波特图、计算时域指标
  4. 对比不同参数下的响应曲线

示例代码:

% 读取ulog文件
ulog = ulogreader('flight.ulg');

% 提取姿态数据
attitude = readTopic(ulog, 'vehicle_attitude');
time = attitude.timestamp;
roll = attitude.Roll;

% 绘制时域曲线
figure;
plot(time, roll*180/pi);
xlabel('时间 (s)');
ylabel('横滚角 (deg)');
title('飞行姿态分析');
grid on;
我的建议:MATLAB适合做“为什么”的分析——为什么PID参数调不好?为什么有高频振荡?而FlightPlot适合做“是什么”的快速查看。两者搭配使用,效率最高。

2.5 工具链对比总结

工具 适用场景 学习成本 分析深度 批量处理
QGC内置查看器 现场快速排查 低 浅 不支持
FlightPlot 日常分析、对比 中 中 有限
pyulog 批量处理、自动化 高(需Python基础) 深 强
MATLAB/Simulink 学术研究、系统辨识 高 最深 强

2.6 我的工具链选择策略

说了这么多,你可能会问:那我到底该用哪个?

我的做法是这样的:

  • 现场测试:只用QGC内置查看器,快速确认有没有明显问题
  • 日常分析:FlightPlot为主,配合pyulog做数据预处理
  • 疑难杂症:MATLAB上场,做频域分析、系统辨识
  • 批量报告:pyulog写脚本,自动生成分析报告
重要提醒:不管你用哪个工具,一定要保证日志文件完整。我遇到过几次,日志文件在写入过程中断电,导致文件损坏。所以,养成好习惯——飞行结束后,先检查日志文件大小是否正常,再拔SD卡。
日志分析工具链选择流程 拿到ulog日志文件 现场排查? 还是深度分析? QGC内置查看器 批量处理? 还是单文件? pyulog脚本 日常分析? 还是学术研究? FlightPlot MATLAB/Simulink 工具选择原则 现场快速排查 → QGC | 日常对比分析 → FlightPlot | 批量自动化 → pyulog | 深度研究 → MATLAB 没有万能工具,根据场景灵活切换才是高效之道