利用 IMU 批量采样器测量振动¶
IMU BatchSampler 可用于将 IMU 传感器的高频数据记录到(飞行)控制器的数据闪存日志中。飞行后可对这些数据进行分析,利用数据的快速傅立叶变换 (FFT) 创建的图表诊断振动问题。
FFT 将数据从时域转换到频域。换句话说,随时间(即飞行)记录的加速度计数据可以转换成显示振动频率的图表。这些图表的一个常见特征是螺旋桨的 "叶片通过频率"(叶片越过机臂的频率)会出现尖峰,从而导致机身加速。FFT 有以下局限性:
FFT 无法显示传感器采样率一半以上的频率
可以显示的最小频率是样本量的一半除以采样率
采样的速率通常与(飞行)控制器陀螺仪更新的速率相同。例如,如果您使用 快速样本 如果您使用的是 MPU9250 传感器(现代 Pixhawk 级(飞行)控制器上的典型传感器),则采样频率为 8KHz,但经过平均和降采样后为 1KHz。如果您使用的(飞行)控制器不具备快速采样功能,则采样率为 1KHz
1 千赫兹的 "后端 "速率是陀螺仪进行滤波(即低通滤波和带阻滤波器)的速率,在较小的旋翼飞行器上,1 千赫兹的速率不足以避免较高频率的噪声造成的混叠。例如,3 英寸的旋翼飞行器全油门电机频率可能为 600 赫兹。由于滤波器只能应用于采样频率的一半(奈奎斯特限制),因此当采样频率为 1Khz 时,无法过滤 600Hz 的噪声,噪声将被混叠到较低的频率。
对于支持快速采样的 IMU(如 Invensense 传感器),后端速率是可配置的,以便支持更高的速率。后端速率可通过设置 INS_GYRO_RATE.默认值 0 与之前固件版本的行为相同。速率为 N 时,后端速率为 2^N Khz,例如,速率为 1 时,后端速率为 2Khz,等等。
备注
这将提高所有陀螺滤波器的运行速度,计算成本可能很高,具体取决于配置的凹槽数量。只有在 F7 或 H7 平台上才建议使用高于 0 的值,而高于 1 的值只能在仔细调整后使用。这些平台会自动进行调整。这样就可以在这些(飞行)控制器上捕捉 1KHz 及以下的频率。
飞行前设置¶
设置 ins_log_bat_opt = 4 进行滤波前和滤波后 1KHz 采样
设置 ins_log_bat_mask = 1 从第一个 IMU 收集数据
ins_log_bat_lgin 是批次采样之间的间隙,通常无需更改。可以降低该间隙以提高 FFT 结果的准确性,但根据系统记录速度的不同,该间隙可能会失效。
LOG_BITMASK的 IMU_RAW 位必须 不 进行检查。默认 LOG_BITMASK 值即可。如果选中该值,结果可能会令人困惑,因为如果使用后置过滤器或常规日志记录,则不会获得任何采样;但如果使用传感器速率日志记录,且 SD 卡能够满足要求,则会获得采样。
飞行和飞行后分析¶
进行至少 1 分钟的常规飞行(不只是轻微盘旋),并且 下载数据闪存日志
打开Mission Planner地面站,在设置/高级下按 FFT 按钮,按 "IMU 批量采样 "并选择上面下载的 .bin 日志文件
从图中应该可以发现一个与马达旋转频率相对应的噪音峰值。较小的旋翼飞行器可能在 200Hz 左右,较大的旋翼飞行器/垂直起降机可能在 100Hz 左右。通常还会有电机旋转频率的谐波(2 倍频或 3 倍频)。下面是一个 5 英寸四轴飞行器的例子,该飞行器没有设置凹槽,陀螺仪滤波器的低通滤波器设置为 20 赫兹:
显示了四幅图:ACC0- 过滤前的加速度计频谱、ACC1- 过滤后的加速度计频谱、GYR0 - 过滤前的陀螺仪频谱和 GYR1- 过滤后的陀螺仪频谱。频率超过 100Hz 的振动可能会导致姿态或位置控制问题。
电机在悬停时会出现明显的 180Hz 噪声峰值,二次谐波较小。
请注意,传感器上的低通滤波器大大降低了噪音,但代价是产生了明显的相位滞后,从而降低了调整的精确度。应该可以 "剔除 "180Hz 的电机噪声尖峰,并将陀螺仪的低通滤波器提高到 60 或 80Hz,以便进行更精确的调整。加速度计路径并不那么重要,因为它在基于速率 PID 控制器的陀螺仪周围形成了一个外环。将其低通滤波器保持在 10Hz 不会影响载具快速拒绝干扰的能力,而这正是速率控制器的主要任务。
如果我们只是将陀螺仪的低通滤波器从 20HZ 提高到 60HZ,而不添加带阻滤波器来降低电机噪音,就会产生这样的结果,这是不可接受的:
谐波带阻滤波器设置¶
可以通过激活谐波带阻滤波器来过滤部分噪声,以提高性能和改善飞行稳定调整。参见 利用动态谐波带阻滤波器管理陀螺仪噪声 了解详情。
如果使用基于节气门的动态谐波凹槽,您需要从日志中获取一些额外信息。 基于节流阀的动态凹槽设置使用相同的日志,在任务计划程序中以常规方式打开日志并绘制节流阀值:CTUN.ThO (Copter) 或 QTUN.ThO (QuadPlane)..由此确定悬停节流阀的平均值,该值将用于 INS_HNTCH_REF.- 也可以使用 移动学习 在 Copter 中 = 2,并读出 MOT_THST_HOVER或 q_m_hover_learn 在 QuadPlane 中 = 2,并读出 Q_M_THST_HOVER - 这样就有了悬停电机频率 悬停频率 和推力值 悬停推力 .请注意,只有在无俯仰角或滚转角的高度控制模式下才能学习悬停推力。因此,应在风平浪静的条件下进行,至少 10 秒钟内不输入飞行员操纵杆。
配置后确认飞行和飞行后分析¶
与 ins_log_bat_mask 仍设为 = 1,以收集第一个 IMU 的数据:
设置 ins_log_bat_opt = 2 捕获滤波后陀螺仪数据
执行类似的悬停飞行,并以同样的方式分析数据闪存日志。这次您应该会看到噪音明显减少,更重要的是电机噪音峰值得到了衰减。如果峰值似乎没有得到很好的衰减,那么您可以尝试增加缺口的带宽和衰减。不过,切口越宽,对飞机控制的延迟就越大,因此这样做可能会适得其反。
下面是同一个 5" quad 的例子,配置了谐波带阻滤波和 60Hz 陀螺低通滤波器:
备注
请务必重置 ins_log_bat_mask 在完成分析飞行后,请将该选项设置为 "0",以释放该功能占用的内存。在某些(飞行)控制器中,如果启用了批量日志记录功能,则无法执行其他内存密集型任务,如指南针校准或 MAVftp。
高级配置和分析¶
设置 ins_log_bat_opt = 1 以启用传感器最高速率的批量采样,从而可以对 InvenseSense 的超快 IMU 进行 500hz 以上的分析。
ins_log_bat_mask 可用于仅对单个传感器采样。这将增加从单个传感器(例如平台上最好的传感器)获取的样本数量,从而为分析提供更好的数据
ins_log_bat_cnt 指定将收集的样本数量。增加采样次数可以获得更有代表性的问题频率。当除以采样率时,将得到可检测到的最低频率,因此 1024kHz 采样率下的 1024 个样本将(较差地)采集到 0.5Hz 的频率。
ins_log_bat_lgin 向数据闪存日志推送采样的时间间隔(毫秒)。 增加该值可减少向数据闪存日志刷新数据的时间,从而缩短循环时间。但这将增加系统负荷,并可能导致数据闪存日志无法处理其他信息。
ins_log_bat_lgct 每计数一次要推送的样本数 ins_log_bat_lgin 毫秒。增加此值可在每次向数据闪存日志发送时推送更多采样。增大此值可能会导致定时抖动,并可能使数据闪存日志无法处理其他信息
备注
在基于 H7 的(飞行)控制器(如 CubeOrange 或 Zealot H743)上,可以使用原始 IMU 日志,并为分析提供更好的数据。设置 ins_log_bat_mask = 0,则在"...... "中设置原始 IMU 位(位 19)。 LOG_BITMASK,设置 ins_log_bat_opt = 原始日志记录对过滤器调整很有帮助,但会产生大量日志,通常意味着你不希望将其开启。
基于网络的 带阻滤波器审查工具 可用于分析批量采样或原始 IMU 日志生成的槽口过滤日志。
以下两张图表来自 PixRacer (飞行)控制器上的同一次飞行。右侧的 Accel[0] 是 InvenseSense IMU,显示的频率高于左侧较慢的 IMU
日志信息内容¶
批量采样涉及两种类型的数据闪存日志信息、 ISBH 和 ISBD.
ISBH 是一个批次标题;它包括一个批次编号和有关批次的元数据。
ISBD 信息包含批次的实际数据,并按批次编号引用标题。
使用 pymavlink 进行分析¶
pymavlink 是一款以开发人员为中心的工具,支持图形 FFT 数据
pbarker@bluebottle:~/rc/ardupilot(fastest-sampling)$ ~/rc/pymavlink/tools/mavfft_isb.py /tmp/000003.BIN 处理日志 /tmp/000003.BIN 跳过 ISBH 以外的 ISBD (fftnum=0) 跳过 ISBH 以外的 ISBD (fftnum=0) 跳过 ISBH 以外的 ISBD (fftnum=0) 跳过 ISBH 以外的 ISBD (fftnum=0) 跳过 ISBH 以外的 ISBD (fftnum=0) ...............................32560s 信息 48433 信息/秒 1904039 kB/秒 提取 10 个 fft 数据集 传感器:陀螺仪[0] 传感器加速度[0]
输出结果显示 mavfft_isb.py 从单 IMU 多旋翼飞行器日志中提取数据。
该多旋翼飞行器机架明显显示出 80Hz 范围内的振动。
这架多旋翼飞行器明显显示出 80Hz 范围内的旋转振动。