日志分析工具链:QGC内置日志查看器、FlightPlot、PX4日志分析工具(pyulog)、MATLAB/Simulink日志分析
做飞控日志分析,工具选对了,效率翻倍。选错了,你可能在数据海洋里淹死。
我刚开始接触PX4日志时,拿着一个几十MB的ulog文件,用记事本打开——全是乱码。后来才知道,这玩意儿得用专门的工具。今天我把常用的几套工具链捋一遍,都是我在项目中实际用过的,优缺点我会说清楚。
2.1 QGC内置日志查看器——快速扫一眼
QGC自带的日志查看器,说白了就是给你“看一眼”用的。飞机刚落地,想知道刚才有没有报错?打开它,拖进去,几秒钟就能看到关键信息。
优点:
- 不用装任何东西,QGC自带
- 加载速度快,适合现场快速排查
- 能显示基本的飞行轨迹、姿态、油门、GPS状态
缺点:
- 不能做复杂的数学运算
- 不能叠加多个变量对比分析
- 图表交互性差,缩放、平移不流畅
我记得有一次在户外测试,飞机突然偏航。客户催得急,我直接在笔记本上打开QGC,加载日志,看到GPS的hdop值在某个时刻跳到了3.5以上。嗯,问题找到了——卫星信号被遮挡。前后不到两分钟。
2.2 FlightPlot——飞控工程师的瑞士军刀
FlightPlot是我个人最常用的工具。它专门为PX4日志设计,界面比QGC专业得多。
它能做什么?
- 同时打开多个变量,叠加对比
- 支持数学表达式计算(比如把加速度计原始值转成g值)
- 可以导出图片,方便写报告
- 支持时间轴缩放、区域选择
举个例子,你想看“电机输出”和“期望推力”是否匹配。在FlightPlot里,把actuator_outputs和vehicle_attitude_setpoint拖到一起,一眼就能看出偏差。
安装方式:
# 从GitHub下载最新版本
# 或者用pip安装
pip install flightplot
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分析流程:
- 用
ulogreader函数读取ulog文件 - 提取需要的topic数据
- 做FFT分析、绘制波特图、计算时域指标
- 对比不同参数下的响应曲线
示例代码:
% 读取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;
2.5 工具链对比总结
| 工具 | 适用场景 | 学习成本 | 分析深度 | 批量处理 |
|---|---|---|---|---|
| QGC内置查看器 | 现场快速排查 | 低 | 浅 | 不支持 |
| FlightPlot | 日常分析、对比 | 中 | 中 | 有限 |
| pyulog | 批量处理、自动化 | 高(需Python基础) | 深 | 强 |
| MATLAB/Simulink | 学术研究、系统辨识 | 高 | 最深 | 强 |
2.6 我的工具链选择策略
说了这么多,你可能会问:那我到底该用哪个?
我的做法是这样的:
- 现场测试:只用QGC内置查看器,快速确认有没有明显问题
- 日常分析:FlightPlot为主,配合pyulog做数据预处理
- 疑难杂症:MATLAB上场,做频域分析、系统辨识
- 批量报告:pyulog写脚本,自动生成分析报告