第二节 传感器误差模型:零偏、标度因数、交轴耦合、随机游走、高斯白噪声的数学建模
各位同学,咱们今天来聊聊传感器误差模型。说实话,这是整个飞控系统里最「磨人」的部分。你想想看,一个IMU(惯性测量单元)从流水线上下来,它天生就是「不完美」的。我做了这么多年飞控,见过太多因为误差模型没建好,导致无人机在天上画「8」字的案例了。
嗯,咱们得先把这些误差拆开来看。我习惯把它们分成两大类:确定性误差和随机性误差。确定性误差,说白了就是可以通过标定来补偿的;随机性误差,那是老天爷给的,只能靠滤波去估计。
核心观点:没有完美的传感器,只有建好的误差模型。你模型建得多细,你的融合结果就有多稳。
2.1 零偏(Bias)—— 最熟悉的「陌生人」
零偏是什么?就是传感器在静止状态下,输出却不归零。比如一个加速度计平放着,理论上应该输出[0, 0, g],但实际输出可能是[0.02, -0.01, 9.82]。这多出来的0.02和-0.01,就是零偏。
数学上,零偏模型很简单:
y_measured = y_true + b + n
其中b就是零偏,n是噪声。但这里有个坑——零偏不是一成不变的。我记得有一次做高塔巡检项目,无人机刚起飞时零偏很小,飞了20分钟后,IMU温度升高了,零偏直接漂了0.5度/秒。嗯,这就是所谓的「零偏稳定性」问题。
我个人习惯把零偏拆成两部分:
- 常值零偏(b_0):出厂时就有,可以通过六位置法标定去掉。
- 温漂零偏(b_T):随温度变化,需要建温度补偿模型。
避坑指南:我曾经在某个项目中,只做了常温标定,结果冬天在东北试飞,零偏直接翻了一倍。从那以后,我每次做标定都会带上温度箱,至少测-20°C到60°C的曲线。
2.2 标度因数(Scale Factor)—— 你以为是1,其实不是
标度因数,说白了就是传感器的「放大倍数」不准。理想情况下,输入1度/秒的角速度,陀螺应该输出1度/秒。但实际可能是0.98或者1.02。
模型长这样:
y_measured = (1 + s) * y_true + b + n
这里的s就是标度因数误差,通常用ppm(百万分之一)来表示。比如一个1000ppm的陀螺,意味着每转一圈,误差会累积0.36度。你想想看,如果飞10分钟,这个误差能有多大?
标度因数还有个让人头疼的特点——它和输入量的大小有关。小信号时标度因数误差大,大信号时反而准一些。我建议在做标定时,至少取3个不同的输入速率点,比如100°/s、200°/s、300°/s,然后拟合出一条曲线。
| 传感器类型 | 典型标度因数误差 | 影响 |
|---|---|---|
| 消费级MEMS陀螺 | 1000 - 5000 ppm | 航向角快速发散 |
| 工业级MEMS陀螺 | 100 - 500 ppm | 可支撑10分钟导航 |
| 光纤陀螺(FOG) | < 50 ppm | 可用于战术级导航 |
2.3 交轴耦合(Cross-axis Coupling)—— 三个轴在「打架」
交轴耦合,这是最容易被忽略的误差。你想想看,理想的IMU,三个轴应该是完美正交的。但实际加工时,X轴和Y轴之间可能差了0.1度,Y轴和Z轴之间可能差了0.2度。这就导致一个问题:当你在X轴输入一个角速度时,Y轴和Z轴也会感应到信号。
数学上,交轴耦合用一个3x3的矩阵来表示:
y_measured = M * y_true + b + n
其中 M = [1, m_xy, m_xz;
m_yx, 1, m_yz;
m_zx, m_zy, 1]
这里的m_xy表示X轴对Y轴的耦合系数,通常用百分比表示。比如m_xy = 0.01,意味着X轴输入100°/s时,Y轴会多输出1°/s。
我记得有一次做四旋翼的悬停测试,发现飞机总是往一个方向偏。查了半天,最后发现是加速度计的交轴耦合没补偿。你想想看,重力在Z轴是1g,如果Z轴对X轴有1%的耦合,那X轴就会多出0.01g的假信号。这个假信号会被飞控当成水平加速度,然后飞机就开始「溜冰」了。
注意:交轴耦合的标定需要精密转台,普通手工标定很难做准。如果条件有限,至少保证三个轴的安装误差在0.5度以内,剩下的靠算法去扛。
2.4 随机游走(Random Walk)—— 误差在「散步」
随机游走,这是随机性误差里最让人头疼的。它不像零偏那样是个固定值,也不像白噪声那样均值为零。随机游走的特点是:误差会随着时间累积。
数学上,随机游走可以用积分形式表示:
b(t) = b(t-1) + w(t)
其中w(t)是高斯白噪声。你看,每一时刻的零偏,都是上一时刻的零偏加上一个随机增量。这就导致零偏会像喝醉了酒一样,慢慢悠悠地到处「散步」。
在飞控里,我们通常用Allan方差来分析随机游走。Allan方差能告诉你:
- 角度随机游走(ARW):陀螺的噪声积分特性,单位是°/√h
- 速率随机游走(RRW):零偏的长期漂移特性,单位是°/h/√h
我建议你在做传感器选型时,一定要看数据手册里的ARW指标。消费级MEMS陀螺的ARW通常在0.1-0.5°/√h,而工业级的能做到0.01°/√h以下。这个指标直接决定了你的姿态估计算法能撑多久。
实战经验:我曾经用ARW=0.3°/√h的陀螺做纯惯性导航,10秒后航向误差就超过了5度。后来换成ARW=0.05°/√h的,同样时间误差只有0.8度。所以,别在传感器上省钱,省下来的钱都得花在算法上。
2.5 高斯白噪声(Gaussian White Noise)—— 最「老实」的误差
高斯白噪声,这是所有误差里最「善良」的一个。为什么这么说?因为它有明确的统计特性:均值为零,方差固定,不同时刻之间不相关。
数学上,高斯白噪声n(t)满足:
E[n(t)] = 0
E[n(t) * n(t+τ)] = σ² * δ(τ)
其中σ²是方差,δ(τ)是狄拉克函数。说白了就是:噪声的均值是0,功率是σ²,而且不同时刻的噪声互不相关。
在卡尔曼滤波里,高斯白噪声是最好处理的。你只需要给它一个协方差矩阵R,滤波器就能自动把它「消化」掉。但要注意,实际传感器的噪声往往不是纯白噪声,而是有色噪声。比如MEMS陀螺的低频噪声就比高频大得多。
我个人习惯的做法是:先采集一段静态数据,然后做功率谱密度分析。如果发现低频段有「1/f噪声」的特征,那就不能简单用白噪声模型了,得考虑在状态向量里增加一个「一阶马尔可夫过程」来建模。
2.6 完整的误差模型
好了,我们把上面这些误差都加起来,一个完整的传感器误差模型就是:
y_measured = (I + S) * M * y_true + b + n
其中:
- I 是单位矩阵
- S 是标度因数误差矩阵(对角阵)
- M 是交轴耦合矩阵(非对角阵)
- b 是零偏(包含常值零偏和随机游走)
- n 是高斯白噪声
这个模型看起来复杂,但实际使用时,我们通常只保留最主要的几项。比如消费级飞控,标度因数和交轴耦合可以合并成一个「综合误差矩阵」,然后通过在线标定去估计。
下面这张图,是我自己总结的传感器误差建模流程,你可以参考一下:
嗯,到这里,传感器误差模型的数学基础就讲完了。你可能会问:「这么多误差,我到底该先处理哪个?」我的建议是:先搞定确定性误差,再处理随机性误差。先把零偏、标度因数、交轴耦合这些「硬伤」通过标定去掉,剩下的随机游走和白噪声,交给卡尔曼滤波去处理。
记住一句话:标定做得好,滤波省一半。我在项目里见过太多人,卡尔曼滤波调了几个月都调不好,结果一查,是标定没做干净。所以,别急着上滤波,先把误差模型建扎实了。