2、传感器模型:IMU建模、GPS建模、气压计建模、磁力计建模

传感器是飞控系统的「眼睛」和「耳朵」。没有它们,飞控就是瞎子。

我刚开始做飞控仿真时,犯过一个低级错误——把传感器模型想得太简单。结果呢?仿真里飞得稳稳当当,一上真机就炸。后来才明白,传感器不是理想器件,它有噪声、有偏差、有延迟。这些细节,必须在模型里体现出来。

2.1 IMU建模:惯性测量单元

IMU包含加速度计和陀螺仪。说白了,一个测线加速度,一个测角速度。

理想情况下,IMU输出就是真实的加速度和角速度。但现实中,输出 = 真实值 + 偏差 + 噪声 + 尺度因子误差 + 安装误差。

核心公式(简化版):

acc_measured = acc_true + bias_acc + noise_acc + scale_acc * acc_true
gyro_measured = gyro_true + bias_gyro + noise_gyro + scale_gyro * gyro_true

我在项目中遇到过一个问题:某款IMU的零偏稳定性标称是0.01°/s,但实际跑起来,温度一变,零偏能漂到0.05°/s。所以建模时,我习惯把bias拆成两部分——固定偏置和温漂偏置。

建模小技巧:

  • 噪声用高斯白噪声模拟,方差查芯片手册
  • 偏差用随机游走模型(Random Walk),更贴近真实
  • 别忘了加量化误差——ADC位数有限,输出是离散的

Simulink里怎么做?用「Random Number」模块生成噪声,用「Integrator」模块模拟随机游走。我习惯把IMU模型封装成一个子系统,输入是真实运动状态,输出是带噪声的测量值。

2.2 GPS建模:全球定位系统

GPS提供位置和速度信息。但它的更新频率低(通常5-10Hz),而且有延迟。

你想想看,GPS信号从卫星传到地面,再经过接收机处理,少说也有100-200ms的延迟。这个延迟在仿真里不处理,飞控的估计器就会「时空错乱」。

避坑指南:

我曾经在仿真里忽略了GPS延迟,结果卡尔曼滤波器的协方差矩阵一直发散。查了两天才发现——估计器用的测量值比真实状态「老」了0.2秒。后来老老实实加了延迟模块,问题解决。

GPS模型的核心参数:

参数 典型值 说明
位置噪声(水平) 1-3m (1σ) 取决于卫星颗数、多径效应
速度噪声 0.05-0.1m/s (1σ) 多普勒测速精度较高
更新频率 5-10Hz 民用GPS典型值
延迟 100-200ms 信号处理+传输

Simulink实现时,我习惯用「Unit Delay」模块模拟延迟,用「Sample and Hold」模块模拟低更新率。位置噪声用经纬度误差表示,注意单位转换——1度经度大约111km,但纬度方向会随纬度变化。

2.3 气压计建模:高度测量

气压计用来测高度。原理很简单——气压随高度升高而降低。但实际用起来,坑不少。

首先,气压受天气影响很大。同一个地点,晴天和雨天气压能差几十帕,对应高度误差几十米。其次,气流扰动、发动机振动都会引入噪声。

高度-气压关系(国际标准大气模型):

h = (T0 / L) * [1 - (P / P0)^(R*L/g)]

其中T0=288.15K,L=0.0065K/m,P0=101325Pa,R=287.058 J/(kg·K),g=9.80665 m/s²

嗯,这里要注意——这个公式在低空(<11km)精度还行,高空误差会变大。我一般只在0-500m范围内信任气压计。

建模时,除了加噪声,还要考虑两个关键点:

  • 温漂:气压计芯片本身对温度敏感,需要加温度补偿模型
  • 动态响应:气压计有气室,响应速度慢,可以用一阶低通滤波模拟

我的经验:

气压计噪声功率谱密度不是白噪声,而是有色噪声。简单处理可以用一阶马尔可夫过程,复杂点可以用Allan方差分析后建模。初学者先用白噪声+低通滤波,够用了。

2.4 磁力计建模:航向参考

磁力计测地磁场方向,用来辅助航向估计。但说实话,磁力计是四个传感器里最「娇气」的。

为什么?因为它太容易受干扰了。电机电流、电源线、甚至螺丝刀都能让它「跑偏」。我在一次飞行测试中,发现航向误差越来越大,最后排查发现——机臂上的螺丝是铁质的,产生了硬磁干扰。

磁力计干扰类型:

  • 硬磁干扰:固定偏置,来自铁磁性材料
  • 软磁干扰:比例缩放,来自导磁材料
  • 动态干扰:电流变化引起,时变

建模时,我通常这样处理:

mag_measured = R * (mag_true + hard_iron) * soft_iron + noise

其中R是旋转矩阵,hard_iron是硬磁偏置向量,soft_iron是软磁缩放矩阵(3x3)。

磁力计还有一个特点——它测量的是磁场方向,不是航向角。要得到航向,需要知道当地磁偏角,并且把机体坐标系下的测量值转换到水平坐标系。这个转换依赖俯仰角和横滚角,所以磁力计和IMU是「绑定」的。

建模建议:

我习惯把磁力计模型和IMU模型放在同一个子系统里。因为它们的测量值需要时间对齐,而且磁力计对姿态角敏感,姿态角又来自IMU积分。分开建模容易忽略耦合关系。

2.5 传感器融合与时间同步

四个传感器各有优缺点:

传感器 优点 缺点
IMU 高频、短时精度高 积分漂移
GPS 无漂移、绝对位置 低频、有延迟、易遮挡
气压计 低成本高度测量 受天气影响、响应慢
磁力计 提供航向参考 易受干扰、依赖姿态

在仿真中,时间同步是个大问题。IMU输出200Hz,GPS输出10Hz,气压计50Hz,磁力计100Hz。不同频率、不同延迟,怎么对齐?

我的做法是:在Simulink里用统一的仿真步长(比如1ms),每个传感器模型内部用「Rate Transition」模块做速率转换。延迟则用「Variable Transport Delay」模块,延迟时间可以设成随机值,模拟真实情况。

传感器模型知识体系 传感器模型 IMU(加速度+陀螺) 偏差、噪声、尺度因子 GPS(位置+速度) 延迟、低更新率、噪声 气压计(高度) 温漂、动态响应、天气 磁力计(航向) 硬磁/软磁干扰、姿态依赖 时间同步 → 传感器融合(卡尔曼滤波)

最后说一句:传感器模型建得好不好,直接决定了你的飞控仿真有没有「实战价值」。别偷懒,把噪声、延迟、偏差都加上去。这样仿真里调出来的参数,上真机才靠谱。


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