3. 空速校准与标定:风洞校准方法、飞行中校准(GPS对比法)、卡尔曼滤波融合

空速不准,飞控就是瞎子。这话我常跟团队里的新人讲。

你想想看,固定翼飞机在空中,机翼升力直接跟空速的平方成正比。空速计偏了5%,失速速度判断就偏了10%以上。这可不是闹着玩的。我在一个项目中就遇到过,一架翼展3米的无人机,因为皮托管安装位置不对,巡航时读数偏大,结果实际速度偏低,最后在顺风转弯时失速坠地。嗯,从那以后,空速校准就成了我每次装机必做的功课。

3.1 空速测量原理与误差来源

说白了,空速测量就是测动压。皮托管测总压,静压孔测静压,两者一减就是动压。然后根据伯努利方程算出空速:

V = sqrt(2 * (P_total - P_static) / ρ)

但这里有个坑——空气密度ρ不是常数。高度变了,温度变了,密度就变了。我习惯在飞控里用气压高度和温度传感器实时修正密度,而不是用海平面标准值。

误差来源主要有三个:

  • 安装位置误差——皮托管离机身太近,气流受扰动,读数就偏
  • 静压孔误差——机身表面气流加速或减速,导致静压不准
  • 传感器本身误差——MEMS差压传感器的零偏和温漂
注意:皮托管安装时,一定要避开机翼前缘和螺旋桨滑流区。我曾经见过有人把皮托管装在机头正下方,结果大迎角时完全被机身遮挡,空速直接掉到零。

3.2 风洞校准方法

风洞校准是最准的,但也是最麻烦的。你得有风洞,还得有合适的工装。

流程其实不复杂:

  1. 把飞机或皮托管固定在风洞中
  2. 风洞从低速到高速,记录每个风速下的传感器读数
  3. 拟合出校准曲线

校准曲线通常是一个多项式:

V_true = a0 + a1 * V_raw + a2 * V_raw^2 + a3 * V_raw^3

我在项目中一般用三阶多项式就够了。高阶项太多反而容易过拟合,尤其是传感器本身线性度还不错的时候。

风洞校准的优点是精度高,能到0.5%以内。缺点也很明显——你不可能每次飞都去风洞。而且飞机在使用过程中,皮托管可能被灰尘堵塞,或者安装位置因振动而松动,这时候风洞数据就失效了。

我的习惯:风洞校准只做一次,作为基准。后续用飞行中校准来修正漂移。

3.3 飞行中校准:GPS对比法

这才是实战中最常用的方法。原理很简单——用GPS地速和风向风速信息,反推出空速。

你想想看,空速和地速的关系是:

V_air = V_ground - V_wind

但风向风速是未知的。所以我们需要一个技巧——让飞机在不同航向上飞行,通过多组数据解算出风速。

具体做法:

  1. 飞机在无风或微风条件下,做几个360度转弯
  2. 记录每个时刻的GPS地速和航向
  3. 用最小二乘法拟合出风速矢量
  4. 然后用V_air = V_ground - V_wind算出真实空速
  5. 对比传感器读数和计算值,得到校准系数

代码实现大致是这样:

// 假设有N组数据:ground_speed[i], heading[i]
// 待求:wind_e, wind_n, true_airspeed
// 方程:ground_speed * cos(heading) = true_airspeed * cos(air_heading) + wind_e
// 简化:假设飞机在转弯中空速恒定

for (int i = 0; i < N; i++) {
    double vg = ground_speed[i];
    double hdg = heading[i];
    // 构建观测矩阵 H
    H[i][0] = 1.0;  // wind_e
    H[i][1] = 0.0;  // wind_n
    H[i][2] = cos(hdg); // true_airspeed * cos(air_heading)
    // 实际观测值 vg * cos(hdg)
    z[i] = vg * cos(hdg);
}
// 然后用最小二乘法解 H * x = z
关键点:GPS对比法要求飞机在转弯过程中空速保持恒定。我一般让飞机以固定油门和固定俯仰角做匀速转弯,这样空速变化最小。

这个方法精度取决于GPS精度和转弯的完整性。一般能做到2-3%的精度,对于大多数固定翼无人机来说已经足够了。

3.4 卡尔曼滤波融合

风洞校准准,但会漂移。GPS对比法实时,但受风场影响大。怎么办?融合呗。

卡尔曼滤波在这里的作用,就是把风洞校准的静态精度和GPS对比法的动态修正结合起来。

状态量我一般选:

  • 真实空速 V_true
  • 空速传感器偏差 bias
  • 风速(东向和北向分量)

观测值有两个:

  • 空速传感器读数 V_raw
  • GPS地速和航向(通过空速-地速关系间接观测)

卡尔曼滤波的预测方程:

V_true(k+1) = V_true(k) + 过程噪声
bias(k+1) = bias(k) + 过程噪声  // 偏差缓慢变化
wind(k+1) = wind(k) + 过程噪声  // 风速缓慢变化

观测方程:

V_raw = V_true + bias + 观测噪声
V_ground = V_true + wind + 观测噪声  // 简化版

我在实际项目中,会把卡尔曼滤波的更新频率设在10Hz左右。太高了计算量大,太低了跟不上空速变化。

调参经验:过程噪声协方差矩阵Q不要设太大。我习惯把bias的过程噪声设得很小(比如1e-6),因为偏差确实变化很慢。风速的过程噪声可以大一些(1e-3),因为风确实会变。

3.5 实战中的避坑指南

讲几个我踩过的坑:

  • 皮托管堵塞——飞完沙地后一定要检查。我有一架飞机在沙漠飞了20分钟,皮托管里进了沙子,空速直接卡死。后来我在皮托管入口加了防尘罩,起飞前才取下。
  • 静压孔结冰——高空低温时,静压孔可能结冰。我一般在静压孔附近加个小加热片,功率不用大,1瓦就够。
  • GPS对比法在强风下不准——风速超过10m/s时,GPS对比法的误差会显著增大。这时候我倾向于信任风洞校准数据,降低GPS对比法的权重。
  • 卡尔曼滤波初始化——刚上电时,卡尔曼滤波还没收敛。我一般让飞机先平飞10秒,用GPS对比法做一次粗校准,再启动卡尔曼滤波。
重要提醒:空速校准不是一劳永逸的。每次换皮托管、换静压孔位置、甚至换机头罩,都要重新校准。我见过有人换了机头罩没重校,结果空速偏了8%,幸亏试飞员及时发现。

3.6 本章知识体系

下面这张图,是我自己总结的空速校准与标定的完整流程。从风洞到飞行,从静态到动态,最后用卡尔曼滤波兜底。

空速校准与标定知识体系 皮托管 + 静压孔 原始差压信号 GPS 接收机 地速 + 航向 大气传感器 气压 + 温度 风洞校准 多项式拟合 精度 0.5% GPS对比法 最小二乘解算 精度 2-3% 密度修正 气压温度补偿 实时计算 卡尔曼滤波融合 状态量:空速 + 偏差 + 风速 观测值:传感器读数 + GPS地速 校准后的空速输出 用于控制律、导航、失速保护 在线更新校准系数

这张图把整个流程串起来了。从传感器原始数据开始,经过三种校准方法,最后用卡尔曼滤波融合输出。注意那个反馈箭头——卡尔曼滤波会在线更新校准系数,让系统越飞越准。

好了,空速校准这块就讲到这里。记住一句话:空速不准,飞控白费。花时间把校准做好,后面控制律调参能省一半功夫。


公众号:蓝海资料掘金营,微信deep3321