4、传感器仿真:GPS、IMU、空速管、高度计的原理与仿真配置

飞行模式测试,说白了就是看飞控在各种情况下能不能做出正确反应。而飞控的「眼睛」和「耳朵」,就是那一堆传感器。传感器数据不准,后面所有逻辑都是空中楼阁。

我刚开始做仿真时,总觉得传感器模型差不多就行。直到有一次,GPS 仿真里忘了加噪声,结果飞控在仿真里飞得稳稳当当,一上真机就开始抽风。嗯,从那以后我再也不敢糊弄传感器仿真了。

这一章,咱们就把四个核心传感器——GPS、IMU、空速管、高度计——的原理和仿真配置掰开揉碎讲清楚。

传感器仿真知识体系框架 传感器仿真知识体系 飞行模式测试 GPS IMU 空速管 高度计 关键参数 • 经纬度/高度/速度 • 水平精度因子(HDOP) • 卫星颗数/更新率 关键参数 • 加速度计三轴 • 陀螺仪三轴 • 零偏/噪声密度 关键参数 • 动压/静压 • 指示空速(IAS) • 真实空速(TAS) 关键参数 • 气压高度 • 相对高度/绝对高度 • 温度补偿 仿真配置核心:噪声模型 + 更新率 + 坐标系

4.1 GPS 仿真:位置与速度的「假信号」

GPS 的原理其实不复杂——卫星发时间戳,接收机算距离,然后解算出位置。但在仿真里,我们不需要真的去解算卫星信号,而是直接生成经纬度和速度数据。

我个人习惯把 GPS 仿真分成三个层次:

  • 理想模型:直接输出真实位置,没有任何误差。适合做逻辑验证。
  • 噪声模型:在真实位置上叠加高斯噪声,模拟真实环境。
  • 故障模型:模拟丢星、多径效应、跳变等异常情况。

核心配置参数

参数说明典型值
更新率GPS 数据输出频率5 Hz / 10 Hz
水平噪声标准差经纬度方向噪声0.5 ~ 2.0 m
垂直噪声标准差高度方向噪声1.0 ~ 3.0 m
速度噪声标准差地速方向噪声0.05 ~ 0.2 m/s
延迟从测量到输出的时间100 ~ 200 ms

为什么要有延迟?因为真实 GPS 从接收到解算需要时间。我见过有人把延迟设成 0,结果仿真里的控制效果特别好,一上真机就抖。你想想看,这坑踩得值不值?

小技巧:在 SITL 仿真中,GPS 的噪声模型通常用 SIM_GPS_NOISE 参数控制。我一般先设成 0.5 跑通逻辑,再逐步加大到 1.5 验证鲁棒性。

4.2 IMU 仿真:加速度计与陀螺仪的「双簧」

IMU 是飞控最核心的传感器,没有之一。它提供加速度和角速度,飞控靠这些数据做姿态估计和控制。

IMU 仿真比 GPS 复杂得多,因为它的误差源太多了。说白了,你要模拟一个「不那么完美」的 MEMS 传感器。

我记得第一次做 IMU 仿真时,只加了白噪声,结果滤波器收敛得特别快。后来加了零偏和随机游走,才真正看到滤波器的收敛过程。嗯,这才是真实情况。

IMU 误差模型

  • 零偏 (Bias):传感器静止时输出的偏移量。单位:m/s² 或 °/s。
  • 噪声密度 (Noise Density):白噪声的功率谱密度。
  • 随机游走 (Random Walk):零偏随时间缓慢漂移。
  • 尺度因子 (Scale Factor):输入与输出之间的比例误差。
  • 交叉轴耦合 (Cross-axis):一个轴对另一个轴的串扰。

注意:IMU 仿真中,加速度计和陀螺仪的坐标系必须与飞控定义的机体坐标系一致。我曾经因为坐标系搞反,导致仿真里飞机一直往一个方向偏,查了三天才发现是 IMU 的 Z 轴方向反了。

配置示例(以 PX4 SITL 为例):

# IMU 仿真参数
SIM_ACCEL_BIAS_X: 0.01      # 加速度计 X 轴零偏 (m/s²)
SIM_ACCEL_BIAS_Y: -0.005    # 加速度计 Y 轴零偏
SIM_ACCEL_BIAS_Z: 0.02      # 加速度计 Z 轴零偏
SIM_GYRO_BIAS_X: 0.001      # 陀螺仪 X 轴零偏 (rad/s)
SIM_GYRO_BIAS_Y: -0.0005    # 陀螺仪 Y 轴零偏
SIM_GYRO_BIAS_Z: 0.002      # 陀螺仪 Z 轴零偏
SIM_ACCEL_NOISE: 0.01       # 加速度计噪声密度
SIM_GYRO_NOISE: 0.001       # 陀螺仪噪声密度

4.3 空速管仿真:动压与静压的「空气对话」

空速管,也叫皮托管,原理很简单——通过测量动压和静压的差值,算出空速。但仿真里要注意:空速管测的是相对于空气的速度,不是地速。

这个区别很重要。你想想看,顺风飞行时地速可能很大,但空速可能很小。如果飞控用空速做失速保护,那空速仿真必须准确。

空速管仿真需要输入:

  • 真实空速 (TAS):飞机相对于空气的速度。
  • 气压高度:用于计算空气密度。
  • 温度:影响声速和空气密度。

输出就是指示空速 (IAS) 和真实空速 (TAS)。两者之间的换算关系是:

IAS = TAS * sqrt(ρ / ρ₀)

其中 ρ 是当前高度空气密度,ρ₀ 是海平面标准空气密度。

避坑指南:我曾经在仿真里把空速管的延迟设得太小,结果飞控的空速反馈和真实空速几乎同步,滤波器根本不起作用。后来我把延迟设为 50ms,再加一个低通滤波,效果才正常。

空速管仿真配置参数:

参数说明典型值
更新率空速数据输出频率20 Hz
噪声标准差空速测量噪声0.5 ~ 1.0 m/s
延迟传感器响应延迟30 ~ 80 ms
堵塞模拟模拟空速管堵塞启用/禁用

4.4 高度计仿真:气压与海拔的「换算游戏」

高度计,通常指气压高度计。它通过测量大气压力,利用标准大气模型换算出高度。

但这里有个坑:气压高度是相对于标准海平面的,不是相对于起飞点。所以仿真里通常需要同时输出绝对高度和相对高度。

我个人习惯在仿真中配置两个高度源:

  • 气压高度:基于标准大气模型,受天气影响。
  • 相对高度:相对于起飞点的高度,由气压高度减去起飞点气压高度得到。

高度计仿真配置:

# 高度计仿真参数
SIM_BARO_NOISE: 0.5         # 气压噪声标准差 (m)
SIM_BARO_DRIFT: 0.1         # 气压漂移率 (m/s)
SIM_BARO_DELAY: 0.02        # 延迟 (s)
SIM_BARO_TEMP_NOISE: 0.1    # 温度噪声 (°C)

经验之谈:气压高度计对温度很敏感。我在做高原测试仿真时,会把温度噪声加大到 0.5°C,模拟真实环境中的温度波动。你会发现高度数据会跟着温度一起「呼吸」。

4.5 多传感器融合仿真:让数据「打架」再「和好」

单个传感器仿真不难,难的是让多个传感器在一起工作。你想想看,GPS 更新率 5Hz,IMU 更新率 200Hz,空速管 20Hz,高度计 50Hz——这些数据怎么对齐?

我的做法是:

  1. 统一时间戳:所有传感器数据都带上仿真时间戳。
  2. 异步输出:每个传感器按自己的更新率输出,不强制同步。
  3. 加入故障注入:在特定时间点让某个传感器失效,测试飞控的容错能力。

重要提醒:多传感器仿真时,一定要检查数据的时间戳是否合理。我曾经遇到过 GPS 时间戳比 IMU 还早的情况,导致 EKF 滤波器直接发散。后来加了一个时间戳校验逻辑,才把这个问题解决。

好了,传感器仿真的核心内容就这些。记住一句话:仿真里的传感器越「真实」,你的飞控就越经得起考验。别偷懒,把噪声、延迟、漂移都加上,这才是负责任的测试。