第二章 惯性传感器误差:陀螺仪与加速度计的“性格缺陷”

各位同学,大家好。上一章我们聊了惯性导航的基本原理,今天咱们来点实在的——传感器误差。说实话,我做了十几年惯导,最头疼的就是这帮传感器。它们就像有性格缺陷的孩子,你得摸透它们的脾气,才能用好它们。

你想想看,一个理想的陀螺仪,应该完美感知角速度。但现实呢?它会有漂移、刻度不准、安装歪了……这些误差如果不处理,导航结果会越跑越偏。我当年刚入行时,就吃过这个亏,后面会跟大家细说。

核心观点:传感器误差是惯导系统精度的“天花板”。你算法再牛,传感器不行,一切都是白搭。

2.1 陀螺仪误差模型——角速度测量的“三座大山”

陀螺仪的误差,我习惯把它分成三类:漂移、刻度因子误差、安装误差。这三类误差,说白了就是“零偏、比例、方向”三个问题。

2.1.1 漂移(Bias)——最头疼的“慢性病”

漂移是什么?就是陀螺仪静止时,输出却不归零。比如你把它放桌上不动,它告诉你“我在转”,这就是漂移。

漂移的数学模型很简单:

ω_measured = ω_true + ε_b + n

其中 ε_b 是常值漂移,n 是随机噪声。常值漂移可以标定补偿,但随机噪声就麻烦了。

我在项目中遇到过:有一次做车载导航,陀螺仪漂移标定后,静态精度0.01°/s,看起来不错。但车子一开起来,振动环境下漂移直接翻倍。嗯,这里要注意——实验室标定和实际工况是两码事。

我的经验:漂移补偿不能只靠出厂标定。我建议每次上电后做5分钟的静态采集,取平均作为当前漂移值。这叫“上电零偏校准”,简单但有效。

2.1.2 刻度因子误差(Scale Factor Error)——比例尺不准

刻度因子误差,就是陀螺仪输出和真实角速度之间的比例关系不准。比如真实转10°/s,它输出9.8°/s,这就是刻度因子误差。

模型如下:

ω_measured = (1 + S) · ω_true + ε_b

S 就是刻度因子误差,通常用ppm(百万分之一)表示。高精度光纤陀螺能做到10ppm以内,MEMS陀螺可能到1000ppm以上。

避坑指南:我曾经遇到过一台陀螺仪,常温下标定得好好的,温度一升高到60°C,刻度因子变了5%。从那以后,我养成了习惯——做温度补偿模型,至少覆盖-40°C到85°C。

2.1.3 安装误差(Misalignment)——装歪了

安装误差,说白了就是陀螺仪的敏感轴和载体坐标系没对齐。你以为是绕X轴转,它测到的却是X和Y的混合。

安装误差矩阵是个3×3的矩阵:

ω_measured = M · ω_true + ε_b

其中 M = [1, α_xy, α_xz; 
          α_yx, 1, α_yz; 
          α_zx, α_zy, 1]

α_xy 表示X轴对Y轴的耦合系数。理想情况下M是单位阵,但实际总有几毫弧度到几度的偏差。

警告:安装误差在低精度系统中常被忽略,但高精度系统必须补偿。我见过一个案例,安装误差0.1°,导航半小时后位置误差超过1公里。

2.2 加速度计误差模型——比陀螺仪“老实”一点

加速度计的原理比陀螺仪简单,误差模型也类似,但有个特殊项——g灵敏度。

2.2.1 加速度计的主要误差项

加速度计的误差模型:

a_measured = (1 + S_a) · a_true + ε_ba + M_a · a_true + n_a

其中:

  • ε_ba:零偏(bias),单位m/s²或μg
  • S_a:刻度因子误差
  • M_a:安装误差矩阵
  • n_a:随机噪声

我个人习惯:加速度计的零偏比陀螺仪好处理。因为重力是已知的,你可以通过六位置法(正反六个方向)把零偏和刻度因子都标出来。

2.2.2 g灵敏度——加速度计的特殊问题

这个我要重点说一下。有些加速度计,你给它一个横向的g值(比如9.8m/s²),它的输出会受影响。这就是g灵敏度。

模型里加一项:

a_measured = ... + G · g + ...

G是g灵敏度系数,单位是μg/g。好的加速度计能做到10μg/g以下,差的可能到100μg/g以上。

我曾经踩过的坑:有次做无人机惯导,选了款便宜的MEMS加速度计。地面测试一切正常,但飞机一转弯(产生向心加速度),高度通道就发疯。查了三天,最后发现是g灵敏度在作怪。从那以后,我选加速度计必看g灵敏度指标。

2.3 随机误差建模——用Allan方差“解剖”噪声

前面说的都是确定性误差,可以标定补偿。但随机误差呢?它没法直接减掉,只能建模然后用滤波器处理。

Allan方差,就是分析随机噪声的“手术刀”。它能把不同时间尺度上的噪声成分分离出来。

2.3.1 Allan方差的基本思想

你采集一段静态数据,然后按不同时间长度τ来分段,计算每段平均值的方差。τ从0.01秒到几百秒,画出一条曲线。

这条曲线能告诉你:

  • 量化噪声:斜率-1,高频段
  • 角度随机游走:斜率-0.5,中频段
  • 零偏不稳定性:曲线最低点
  • 速率随机游走:斜率+0.5
  • 速率斜坡:斜率+1,低频段

核心参数:零偏不稳定性(Bias Instability)是衡量陀螺仪精度的关键指标。它告诉你,在最优时间尺度下,漂移能稳定到什么程度。

2.3.2 实际操作步骤

我给大家一个简单的Python代码,用来计算Allan方差:

import numpy as np

def allan_variance(data, max_tau):
    """计算Allan方差"""
    N = len(data)
    tau_list = []
    avar_list = []
    
    for tau in range(1, max_tau + 1):
        # 分段
        m = N // tau
        if m < 2:
            break
        
        # 计算每段均值
        segments = data[:m*tau].reshape(m, tau)
        means = np.mean(segments, axis=1)
        
        # Allan方差
        avar = 0.5 * np.mean((means[1:] - means[:-1])**2)
        
        tau_list.append(tau)
        avar_list.append(avar)
    
    return np.array(tau_list), np.array(avar_list)

注意:实际使用时,τ的范围要覆盖1/10采样频率到1/10总时长。数据长度至少需要10⁵个点,否则低频段不可靠。

2.3.3 从Allan方差提取噪声参数

得到Allan方差曲线后,怎么提取参数?我习惯用最小二乘拟合:

# 假设已经得到 tau 和 avar
# 拟合角度随机游走(ARW)
arw = np.sqrt(avar[np.argmin(np.abs(tau - 1))])  # τ=1s时的值

# 拟合零偏不稳定性
bias_instability = np.min(avar)  # 曲线最低点

# 拟合速率随机游走
# 在斜率+0.5的区域取点拟合

我的建议:别完全相信自动拟合。我每次都会把Allan方差曲线画出来,肉眼看一下。有时候数据异常,拟合结果会骗人。

2.4 本章知识体系

下面这张图,是我自己总结的传感器误差知识框架,大家看看:

惯性传感器误差知识体系 陀螺仪误差 漂移 (Bias) 刻度因子 安装误差 加速度计误差 零偏 刻度因子 g灵敏度 随机误差建模 Allan方差 噪声参数 随机游走 误差处理流程 确定性误差 → 标定补偿 → 随机误差 → Allan方差分析 → 滤波器建模

这张图把本章的核心内容串起来了。左边是陀螺仪误差,中间是加速度计误差,右边是随机误差建模。三者共同构成了惯性传感器误差的完整画像。

2.5 本章小结

好了,这一章的内容就这些。总结一下:

  • 陀螺仪误差:漂移、刻度因子、安装误差,三个都要管
  • 加速度计误差:类似陀螺仪,但多了个g灵敏度
  • 随机误差:用Allan方差分析,提取噪声参数用于滤波器

说实话,这些内容看起来枯燥,但实际工程中每一个细节都可能让你加班到深夜。我当年在实验室标定陀螺仪,连续干了三天三夜,就为了把漂移曲线拟合得更准一点。嗯,这些经验,希望大家能少走弯路。

一句话记住:传感器误差不可怕,可怕的是你不知道它存在。标定+建模+滤波,三步走,误差就能被“驯服”。


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