2. 风扰模型与传感器:理解阵风模型、IMU与光流/GPS在风中的表现差异

调参之前,得先搞清楚你的对手是谁。

风不是均匀的,传感器也不是完美的。我见过太多人一上来就调PID,结果飞起来还是晃,为什么?因为你根本没理解风是怎么作用在飞机上的,也没搞懂IMU和光流在风里各自是什么“脾气”。

这一章,咱们就把这两件事掰开揉碎了讲清楚。

2.1 阵风模型:风不是“推”一下那么简单

很多人以为风就是一股恒定的力,像有人一直推着飞机。其实不是。真实的风是阵风,是随机的、有频谱的。

我个人习惯把阵风模型拆成三部分来看:

  • 平均风(稳态分量):持续吹的风,比如5m/s的恒定侧风。飞控能通过积分慢慢消除稳态误差。
  • 阵风(动态分量):突然的 gusts,持续时间短,幅度大。这是最考验飞控响应速度的。
  • 湍流(高频噪声):风场中的小尺度涡旋,频率高,幅度小。IMU和光流对这种噪声的反应完全不同。

核心观点:抗风调参,本质上是让飞控在“响应阵风”和“抑制湍流噪声”之间找到平衡。只盯着稳态误差调,永远调不好。

我在项目中常用的是 Dryden 风模型,它用成形滤波器把白噪声变成符合大气湍流统计特性的风速序列。简单说,就是模拟出“真实的风”。

// Dryden 模型简化实现(C语言伪代码)
// 输入:高斯白噪声 w(t)
// 输出:阵风速度 v_gust(t)
// 时间常数 tau = L / V (L为湍流尺度,V为空速)

float v_gust = 0;
float tau = 50.0 / 10.0; // 假设湍流尺度50m,空速10m/s

void update_gust(float dt, float white_noise) {
    v_gust += ( -v_gust / tau + white_noise * sqrt(2.0 / tau) ) * dt;
}

这段代码虽然简单,但能帮你理解:阵风是有“惯性”的,不是瞬间跳变。调参时,如果你发现飞机对风反应过于剧烈,往往不是P太大,而是D的微分项放大了阵风的高频成分。

我的经验:在仿真里先用 Dryden 模型注入阵风,观察姿态角的响应曲线。如果角度波动频率跟阵风频率接近,说明带宽匹配;如果出现高频抖动,说明D项需要降噪处理。

2.2 IMU在风中的表现:它“感觉”到了什么?

IMU(惯性测量单元)包含加速度计和陀螺仪。风本身不直接作用在IMU上,但风引起的机体运动,IMU全能测到。

这里有个关键点:IMU测量的是“本体系”下的加速度和角速度。风推着飞机平移,加速度计会感受到一个水平方向的加速度;风让飞机倾斜,陀螺仪会感受到旋转角速度。

但IMU有个天生的毛病——漂移。尤其是陀螺仪的零偏,会随着温度和时间缓慢变化。在阵风扰动下,如果你只用IMU做姿态估计,积分出来的角度会越偏越远。

传感器 风中优势 风中劣势
加速度计 对瞬时推力响应快,能快速感知风引起的加速度 受振动噪声影响大,阵风中的高频分量会被误读
陀螺仪 对角速度敏感,能快速捕捉风引起的旋转 零偏漂移,长时间积分后角度误差累积

避坑指南:我曾经在调一台大四轴时,发现悬停时姿态角一直在缓慢漂移。查了半天,发现是陀螺仪温漂在阵风引起的温度变化下被放大了。后来加了温度补偿,问题才解决。所以,别忽略IMU的温漂特性。

2.3 光流与GPS在风中的表现:谁更靠谱?

光流和GPS都是位置传感器,但它们在风中的表现天差地别。

光流:对“相对运动”敏感

光流传感器本质上是一个摄像头,它通过计算图像中特征点的移动来推算飞机的水平速度。在无风环境下,光流很准。但一旦有风,问题就来了:

  • 阵风引起的高度变化:光流测速依赖于离地高度。阵风可能导致飞机上下起伏,高度变化会直接影响速度测量的准确性。
  • 光照变化:阵风可能吹动树叶、草等地面纹理,造成光流特征点匹配错误。
  • 低空 vs 高空:光流在低空(<10m)表现很好,高空(>20m)时地面纹理太模糊,基本失效。

GPS:对“绝对位置”敏感

GPS提供的是绝对位置和地速(相对地面的速度)。在风中,GPS的优势很明显:

  • 不受阵风引起的机体姿态变化影响:GPS测的是卫星信号,跟飞机姿态无关。
  • 无漂移:长时间积分不会累积误差。

但GPS也有硬伤:

  • 更新率低:通常5-10Hz,对阵风的快速变化响应慢。
  • 多路径效应:在城市峡谷或树荫下,信号反射会导致位置跳变。
特性 光流 GPS
更新率 50-200 Hz 5-10 Hz
风中精度 受高度、光照影响大 稳定,但延迟大
漂移 有累积漂移 无漂移
适用场景 低空、室内、无风或微风 高空、开阔环境、强风

我的建议:在强风环境下,优先信任GPS的位置和速度估计,用光流做辅助修正。我习惯在EKF(扩展卡尔曼滤波)里把光流的速度观测噪声设得比GPS大一些,这样风大时飞控会自动降低光流的权重。

2.4 传感器融合:如何“取长补短”?

既然每个传感器都有短板,那就要靠融合算法来互补。最常用的是 EKF,它把IMU的高频、短时精度,和光流/GPS的低频、无漂移特性结合起来。

融合的核心思想是:

  1. 预测步:用IMU的加速度和角速度积分,预测下一时刻的状态(位置、速度、姿态)。
  2. 更新步:用光流或GPS的测量值,修正预测的误差。

在风中,EKF的噪声矩阵需要动态调整。比如:

  • 阵风强烈时,增大IMU加速度计的观测噪声(因为振动和瞬时加速度干扰大)。
  • 光流质量下降时(比如高度变化大),增大光流速度的观测噪声。
// EKF 噪声调整示例(伪代码)
// 根据风速估计动态调整观测噪声协方差矩阵 R

float wind_speed_estimate = get_wind_speed(); // 从空速计或GPS地速估算

// 阵风强时,增大加速度计噪声
if (wind_speed_estimate > 5.0) {
    R_accel = 10.0;  // 默认是1.0
} else {
    R_accel = 1.0;
}

// 光流质量下降时,增大光流噪声
if (height_variation > 0.5) { // 高度变化超过0.5m
    R_optical_flow = 5.0;
} else {
    R_optical_flow = 1.0;
}

注意:不要把所有传感器噪声都设成固定值。我见过有人把EKF参数调了一整天,结果风一来就炸机,就是因为没考虑风对传感器噪声的影响。动态调整噪声矩阵,是抗风调参的进阶技巧。

2.5 知识体系总览

下面这张图总结了本章的核心逻辑:风如何影响传感器,以及我们如何通过融合来应对。

风扰模型与传感器融合框架 风扰模型与传感器融合框架 风扰模型 平均风(稳态) 阵风(动态) 湍流(高频噪声) IMU 光流 GPS IMU:高频、漂移 光流:相对速度、低空 GPS:绝对位置、无漂移 EKF 融合 姿态估计 速度估计 位置估计 动态调整噪声矩阵

这张图把本章的核心逻辑串起来了。你看,风扰模型是源头,它决定了传感器会“看到”什么。IMU、光流、GPS各有优劣,而EKF融合就是那个“和事佬”,通过动态调整噪声矩阵,让飞控在风中依然能输出稳定可靠的姿态、速度和位置估计。