4. 传感器仿真与数据生成:IMU、GPS、磁力计与噪声建模

各位同学,欢迎来到传感器仿真这一章。

说实话,飞控算法里最让我头疼的,不是控制律设计,而是传感器数据。你想想看,算法写得再漂亮,传感器一抖、一漂、一丢星,全白搭。所以这一章,咱们把传感器仿真这件事彻底聊透。

4.1 IMU仿真模型:加速度计与陀螺仪

IMU是飞控的“内感受器”。它告诉你:我现在的加速度是多少?角速度是多少?

但IMU有个毛病——它测的不是理想值。加速度计测的是比力,不是纯重力。陀螺仪测的是角速度,但会漂。我刚开始做仿真时,直接拿理想值往里怼,结果算法在仿真里飞得挺好,一上真机就炸。嗯,从那以后,我再也不敢忽略IMU的测量模型了。

加速度计仿真模型

真实加速度计的输出,可以写成:

a_meas = a_true + g + b_a + n_a

其中:

  • a_true:真实加速度(机体坐标系)
  • g:重力加速度在机体坐标系下的投影
  • b_a:加速度计零偏(随时间缓慢变化)
  • n_a:高斯白噪声

陀螺仪仿真模型

陀螺仪的输出类似:

w_meas = w_true + b_g + n_g

其中:

  • w_true:真实角速度
  • b_g:陀螺仪零偏
  • n_g:高斯白噪声
我的经验:零偏不是常数。它受温度、时间影响。我一般用一阶马尔可夫过程来模拟零偏的缓慢变化。别小看这个细节,它直接影响你的滤波器收敛速度。

4.2 GPS仿真模型

GPS是飞控的“外感受器”。它告诉你:我在哪?我飞多快?

但GPS有延迟、有丢星、有多路径效应。我见过一个项目,仿真里GPS数据完美无缺,结果真机测试时,GPS一丢星,无人机直接飘走。所以,GPS仿真必须包含这些“坏情况”。

GPS位置仿真

pos_gps = pos_true + n_pos + bias_pos

其中:

  • n_pos:位置噪声(一般1-3米标准差)
  • bias_pos:缓慢变化的定位偏差

GPS速度仿真

vel_gps = vel_true + n_vel

速度噪声一般比位置噪声小,约0.1-0.3 m/s。

注意:GPS更新频率低(5-10Hz),而且有固定延迟(约100-200ms)。仿真时必须加入延迟模块,否则你的估计算法会“超前”于真实数据。

4.3 磁力计仿真模型

磁力计用来测航向。但它特别娇气——周围有铁磁物质、电机电流、甚至地磁异常都会干扰它。

我曾经在测试时发现,无人机一靠近金属护栏,航向就偏了20度。查了半天,原来是磁力计被干扰了。所以,磁力计仿真必须包含硬铁和软铁干扰。

磁力计仿真模型

mag_meas = R * mag_earth + b_hard + S_soft * R * mag_earth + n_mag

其中:

  • R:从导航系到机体系的旋转矩阵
  • mag_earth:当地地磁场矢量
  • b_hard:硬铁干扰(恒定偏置)
  • S_soft:软铁干扰(比例矩阵)
  • n_mag:测量噪声
核心要点:磁力计校准的本质,就是估计并消除b_hard和S_soft。仿真时故意加入这些干扰,可以检验你的校准算法是否靠谱。

4.4 传感器噪声与误差建模

噪声建模,说白了就是让仿真数据“像真的”。我见过很多同学直接加高斯白噪声,但真实传感器的噪声远不止这些。

常见的噪声类型:

噪声类型 来源 仿真方法
高斯白噪声 电子热噪声 np.random.normal()
随机游走 积分漂移 对白噪声积分
闪烁噪声 半导体缺陷 1/f噪声生成
量化噪声 ADC量化 四舍五入到固定位数

误差建模的“避坑指南”:

  • 我曾经在仿真里只加白噪声,结果滤波器收敛得特别快。一上真机,收敛时间翻了三倍。后来才发现,我忘了加随机游走。
  • 量化噪声容易被忽略。但如果你用16位ADC,量化步长约0.3mg,这个误差在低动态场景下不可忽视。
  • 温度漂移:我习惯在仿真中加入温度循环,让零偏随温度变化。这样能检验算法对温度变化的鲁棒性。

4.5 传感器数据融合仿真

数据融合,就是把多个传感器的数据“揉”在一起,得到更准确的状态估计。最经典的方法就是扩展卡尔曼滤波(EKF)。

EKF融合的基本流程:

  1. 预测步:用IMU数据预测状态(位置、速度、姿态)
  2. 更新步:用GPS和磁力计数据修正预测结果
  3. 时间对齐:处理不同传感器的延迟和频率差异

下面是一个简化的EKF融合代码框架:

# 预测步(IMU驱动)
def predict(imu_data, dt):
    # 用陀螺仪更新姿态
    # 用加速度计更新速度
    # 更新协方差矩阵
    pass

# 更新步(GPS/磁力计)
def update(measurement, H, R):
    # 计算卡尔曼增益
    # 更新状态估计
    # 更新协方差矩阵
    pass
我的建议:先做“松耦合”融合——IMU做预测,GPS做修正。等松耦合跑通了,再上“紧耦合”——直接融合原始观测量。别一上来就搞紧耦合,调试起来会让你怀疑人生。

数据融合仿真还有一个关键点:一致性检验。我习惯在仿真中故意加入传感器故障(比如GPS突然跳变),看滤波器能不能检测并隔离故障。这个能力在实际飞行中比精度更重要。

本章知识体系

下面这张图,是我自己总结的传感器仿真与数据融合的知识结构。你可以把它当作一个“地图”,随时回来对照。

传感器仿真与数据融合知识体系 IMU模型 GPS模型 磁力计模型 传感器噪声与误差建模 高斯白噪声 | 随机游走 | 闪烁噪声 | 量化噪声 | 温度漂移 传感器数据融合仿真 EKF预测步 | EKF更新步 | 时间对齐 | 故障检测与隔离 真实感传感器数据流 → 飞控算法验证

好了,这一章的内容就到这里。传感器仿真这件事,说难不难,说简单也不简单。关键是要把“真实世界的坏脾气”加进去——噪声、漂移、延迟、干扰。只有这样,你的飞控算法才能在仿真里“挨过打”,上了真机才能“扛得住”。