4、震动数据采集:Mission Planner日志设置、震动日志下载、Excel/Matlab数据导入

好,咱们进入实操环节。前面讲了震动理论,现在得真刀真枪地采集数据了。说白了,没有数据,你分析个啥?

我个人习惯,拿到一架新飞机,第一件事不是调PID,而是先飞一个震动日志采集航线。为什么?因为震动是基础,基础不牢,后面全是白费功夫。我见过太多人,调了一整天PID,结果发现是震动太大,IMU数据都飘了,你说冤不冤?

4.1 Mission Planner日志设置

先打开Mission Planner,连接飞控。嗯,这里要注意,一定要用USB线或者数传连接稳定,别飞到一半断连,那日志就废了。

进入「初始设置」→「日志」页面。你会看到一堆选项,别慌,我们只关心震动相关的。

关键日志位设置:

  • IMU(惯性测量单元):必须勾选。包含加速度计和陀螺仪的原始数据,震动分析全靠它。
  • GPS:建议勾选。震动会影响GPS定位精度,尤其是高度数据。
  • RCIN(遥控器输入):可选。如果你怀疑震动导致遥控信号抖动,可以勾上。
  • CTUN(控制回路):建议勾选。可以看到油门输出和姿态角,辅助判断震动来源。

我曾经遇到一个案例,飞友说飞机悬停时左右晃,查了半天IMU日志,发现震动不大。后来勾上CTUN一看,油门输出在剧烈抖动,原来是电调信号线被螺旋桨气流吹得乱晃。你看,多一个数据源,就多一条线索。

设置好之后,点击「保存」或「写入参数」。然后断开USB,准备起飞。

4.2 震动日志下载

飞完一个架次,落地,别急着拔电池。先连上Mission Planner,进入「飞行数据」→「日志」页面。

你会看到一堆日志文件,命名规则是 YYYY-MM-DD-HH-MM-SS.bin。选最新的那个,点击「下载」。下载速度取决于日志大小,一般几MB到几十MB不等。

注意:下载过程中不要断开连接,否则日志文件可能损坏。我有个同事,下载到一半手贱拔了USB,结果日志打不开,白飞了一趟。

下载完成后,你会得到一个 .bin 文件。这个文件是二进制格式,不能直接用Excel打开。别急,我们后面会处理。

4.3 Excel/Matlab数据导入

拿到 .bin 文件,怎么分析?两种主流方法:Excel和Matlab。我个人更推荐Matlab,处理大数据快,画图也漂亮。但Excel胜在方便,谁电脑上还没个Office呢?

4.3.1 用Excel分析

首先,你需要一个工具把 .bin 转成 .csv。Mission Planner自带这个功能:

  1. 打开Mission Planner,进入「日志」页面。
  2. 点击「打开日志」,选择你下载的 .bin 文件。
  3. 在左侧列表中找到 IMUACC 数据。
  4. 点击「导出CSV」按钮,保存到桌面。

然后,用Excel打开这个CSV文件。你会看到一堆数字,别晕。我们只关心几列:

  • TimeUS:时间戳,单位微秒。
  • AccX, AccY, AccZ:三轴加速度,单位m/s²。
  • GyrX, GyrY, GyrZ:三轴角速度,单位rad/s。

选中这些列,插入一个折线图。嗯,你马上就能看到震动波形了。如果波形像心电图一样乱跳,说明震动很大。如果像一条平滑的波浪线,恭喜你,飞机状态不错。

小技巧:Excel的图表功能有限,建议只做初步查看。真要深入分析,还得上Matlab。

4.3.2 用Matlab分析

Matlab处理 .bin 文件,我一般用两种方法:

方法一:直接读取二进制文件

ArduPilot的日志格式是公开的,你可以写个脚本解析。但说实话,太麻烦,不推荐。

方法二:使用Mission Planner导出的CSV

和Excel一样,先导出CSV,然后用Matlab的 readtable 函数读取:

% 读取CSV文件
data = readtable('log_2024_01_15_10_30_00.csv');

% 提取加速度数据
acc_x = data.AccX;
acc_y = data.AccY;
acc_z = data.AccZ;

% 绘制时域波形
figure;
subplot(3,1,1);
plot(acc_x);
title('AccX 时域波形');
xlabel('采样点');
ylabel('m/s²');

subplot(3,1,2);
plot(acc_y);
title('AccY 时域波形');

subplot(3,1,3);
plot(acc_z);
title('AccZ 时域波形');

运行这段代码,你就能看到三个轴的加速度波形。如果某个轴波形特别剧烈,说明那个方向震动大。

但时域波形只能看个大概,真正判断震动频率,还得做FFT(快速傅里叶变换)。

% 对AccX做FFT
Fs = 1000; % 采样频率,通常IMU是1kHz
L = length(acc_x);
Y = fft(acc_x);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;

% 绘制频谱
figure;
plot(f, P1);
title('AccX 频谱');
xlabel('频率 (Hz)');
ylabel('幅度');
xlim([0 100]); % 只看0-100Hz

为什么只看0-100Hz?因为螺旋桨的震动频率通常在50-100Hz之间,电机震动在100-200Hz。超过200Hz的震动,多半是结构共振或者轴承问题。

实战经验:我曾经帮一个飞友分析他的六轴无人机,悬停时总是偏航。我让他采集震动日志,用Matlab做FFT,发现Y轴在80Hz处有一个尖峰。后来检查发现,是其中一个电机的动平衡没做好,换了个电机就好了。你看,FFT一出手,问题就暴露了。

4.4 知识体系总览

为了让你更直观地理解整个流程,我画了一张图:

震动数据采集流程 1. 日志设置 勾选IMU/GPS/CTUN 2. 飞行采集 悬停/航线飞行 3. 日志下载 获取.bin文件 4. 分析 Excel/Matlab Excel 分析路径 • 导出CSV文件 • 插入折线图 • 观察时域波形 • 初步判断震动大小 Matlab 分析路径 • 读取CSV或直接解析.bin • 绘制时域波形 • 做FFT频谱分析 • 定位震动频率和幅值

这张图把整个流程串起来了。从日志设置开始,到飞行采集,再到下载和分析。你想想看,是不是每一步都有坑?日志设置漏了关键数据,分析就白搭;飞行时震动太大,数据就没参考价值;下载时断了,一切归零。

所以,我建议你每次飞行前,都按这个流程走一遍。养成习惯,后面调滤波器、优化PID,才能事半功倍。

个人习惯:我会在每次飞行后,把日志文件按日期和飞机编号命名,比如 20240115_QuadA_vibration.bin。这样以后查起来方便。别小看这个习惯,我见过有人日志文件堆了一桌面,想找某个数据,翻半天。

好了,数据采集这块就讲到这里。你拿到数据后,下一步就是分析震动特征,然后配置滤波器。别急,我们一步步来。


专注资料整理