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自带这个功能:
- 打开Mission Planner,进入「日志」页面。
- 点击「打开日志」,选择你下载的
.bin文件。 - 在左侧列表中找到
IMU或ACC数据。 - 点击「导出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 知识体系总览
为了让你更直观地理解整个流程,我画了一张图:
这张图把整个流程串起来了。从日志设置开始,到飞行采集,再到下载和分析。你想想看,是不是每一步都有坑?日志设置漏了关键数据,分析就白搭;飞行时震动太大,数据就没参考价值;下载时断了,一切归零。
所以,我建议你每次飞行前,都按这个流程走一遍。养成习惯,后面调滤波器、优化PID,才能事半功倍。
个人习惯:我会在每次飞行后,把日志文件按日期和飞机编号命名,比如 20240115_QuadA_vibration.bin。这样以后查起来方便。别小看这个习惯,我见过有人日志文件堆了一桌面,想找某个数据,翻半天。
好了,数据采集这块就讲到这里。你拿到数据后,下一步就是分析震动特征,然后配置滤波器。别急,我们一步步来。