2. 陀螺仪零偏静态标定与补偿

零偏标定的对象与判据

陀螺仪在完全静止时,理想输出应为 0,但实际输出存在一个缓慢变化的直流分量,即零偏。零偏由常值分量 b0 与随机漂移组成,是短时方位角解算的主要误差源之一。本案例的任务是:用一段静止采集的角速度序列估计 b0,用统计量判断这段数据是否"够稳",再做补偿并量化补偿前后的角度漂移。

关键约定:陀螺敏感轴输出角速度 ω(t),单位 °/s;采样间隔 Δt 固定;角度由角速度积分得到,θ(t)=∫ω dt。零偏补偿即 ω_c(t)=ω(t)−b̂0,补偿后角度漂移应显著小于补偿前。

静止序列 → 零偏估计 → 补偿 → 漂移对比 静止采集序列 ω[0..N-1],N=6000 Δt = 0.01 s(100 Hz) 时长 60 s,全程无转动 单位:°/s 零偏估计 b̂0 = mean(ω) σ = std(ω) 稳定性:σ 与 Allan 方差 示例:b̂0 = 0.0120 °/s 零偏补偿 ω_c = ω − b̂0 θ = Σ ω_c·Δt 对比 θ 与 θ_c 漂移量 = max|θ| 结果判读 补偿前漂移 补偿后漂移 下降比 ≥ 10× 视为标定有效 补偿前后积分角度漂移(示意,60 s 静止) t / s θ / ° 0 20 40 60 0 补偿前:b̂0·t 线性漂移 补偿后:残余随机漂移 补偿前 补偿后

零偏估计与稳定性检验

静止序列的均值就是常值零偏的估计。但仅给均值不够,还要回答"这段数据能不能用":如果序列中存在明显趋势、阶跃或异常尖峰,均值会被污染,补偿后反而引入新的偏差。因此标定流程必须包含稳定性检验。

下面是一段可直接运行的 Python 实现,输入为已对齐的静止角速度序列(单位 °/s),输出零偏估计、稳定性指标与补偿前后漂移对比。示例数据由固定随机种子生成,用于演示流程,不代表真实器件实测值。

import numpy as np

# ---- 1. 构造教学示例:静止 60 s,100 Hz ----
rng = np.random.default_rng(20240501)
dt = 0.01
N = 6000
t = np.arange(N) * dt

b0_true = 0.0120          # 示例常值零偏,°/s
noise = rng.normal(0, 0.0008, N)   # 随机噪声,°/s
omega = b0_true + noise            # 静止输出序列

# ---- 2. 零偏估计 ----
b_hat = omega.mean()
sigma = omega.std(ddof=1)

# ---- 3. 稳定性检验 ----
# 3a. 分段均值漂移:把序列切成 6 段,看各段均值差异
seg = omega.reshape(6, -1).mean(axis=1)
seg_spread = seg.max() - seg.min()

# 3b. 线性趋势斜率(最小二乘)
slope = np.polyfit(t, omega, 1)[0]

# 3c. 异常点比例(3σ 准则)
outlier_ratio = np.mean(np.abs(omega - b_hat) > 3 * sigma)

print(f"b_hat = {b_hat:.6f} °/s")
print(f"sigma = {sigma:.6f} °/s")
print(f"分段均值极差 = {seg_spread:.6f} °/s")
print(f"趋势斜率 = {slope:.3e} °/s²")
print(f"3σ 异常点比例 = {outlier_ratio:.4%}")

# ---- 4. 补偿与漂移对比 ----
theta_raw = np.cumsum(omega) * dt
theta_cmp = np.cumsum(omega - b_hat) * dt

drift_raw = np.max(np.abs(theta_raw))
drift_cmp = np.max(np.abs(theta_cmp))
print(f"补偿前最大漂移 = {drift_raw:.4f} °")
print(f"补偿后最大漂移 = {drift_cmp:.4f} °")
print(f"漂移下降比 = {drift_raw / drift_cmp:.1f}×")

判据与结果解读

稳定性检验的通过条件建议同时满足:分段均值极差小于 3 倍噪声标准差、趋势斜率接近 0(例如 |slope|·60 s 小于 0.5 倍 b̂0)、3σ 异常点比例低于 1%。任一条件不满足,说明这段静止数据混入了转动、温漂或干扰,应重新采集而不是强行补偿。

补偿效果的判据是漂移下降比。以示例参数推算:补偿前漂移约 0.0120 × 60 ≈ 0.72°,补偿后残余漂移由随机噪声积分决定,量级在 0.0008 × √6000 × 0.01 ≈ 0.0006° 附近,下降比可达数百倍。实际器件因零偏不稳定度更大,下降比通常明显低于此值,但仍应显著大于 1;若下降比接近 1,说明零偏估计被趋势或异常点污染,需回到稳定性检验排查。

零偏补偿只消除常值分量。若静止序列存在明显温漂趋势,应改用分段零偏或趋势项建模,否则长时间积分后残余漂移仍会累积。
不要用含转动的数据段估计零偏。判断"是否静止"应结合转台状态或多轴一致性,而不是仅看单轴输出是否接近 0。

标定记录表(可直接填写)

项目符号/公式示例值通过条件
采样率与时长1/Δt,N·Δt100 Hz,60 s覆盖预期工作时段
零偏估计b̂0 = mean(ω)0.0120 °/s—
噪声标准差σ = std(ω)0.0008 °/s与器件指标同量级
分段均值极差max(seg)−min(seg)待填< 3σ
趋势斜率polyfit 一次项待填|slope|·60 s < 0.5·b̂0
异常点比例|ω−b̂0| > 3σ待填< 1%
补偿前漂移max|Σω·Δt|≈0.72 °—
补偿后漂移max|Σ(ω−b̂0)·Δt|待填显著小于补偿前
漂移下降比drift_raw / drift_cmp待填≥ 10×

填写时把示例值替换为本次采集的真实统计量;若某项不通过,先排查采集条件(是否真正静止、有无温升、线缆扰动),再决定是否重新采集,而不是直接调低判据。