2. 惯性测量单元零偏异常导致位置漂移的排查

故障现象与排查思路

组合导航系统在水下匀速直航段出现缓慢位置漂移,典型表现为:DVL 速度有效、深度计正常、GNSS 无信号(水下),但组合导航输出的位置随时间单向偏移,且偏移方向与航向大致一致。此类现象常见根源之一是 IMU 零偏超限——零偏经一次积分变成速度误差、二次积分变成位置误差,误差随时间平方增长,因此表现为"缓慢但持续"的漂移。

排查的核心是把"零偏是否超限"从"漂移是否由零偏引起"中分离出来,分两步走:

  • 静态零偏测试:设备静止(或系泊)状态下采集 IMU 原始角速度/加速度输出,扣除地球自转与重力投影后统计均值,得到零偏估计值,与器件指标和系统门限比较。
  • 动态航位推算对比:用纯惯性航位推算(不引入 DVL/深度计修正)与组合导航输出对比,观察位置偏差的发散速率,判断零偏量级是否与观测漂移一致。

静态零偏测试:采集与判读

静态测试要求设备严格静止、预热充分(一般 10~30 min 使温度稳定),采样率不低于 100 Hz,采集时长建议 5~10 min。对陀螺三轴分别求均值即为零偏估计(含常值零偏与部分未建模误差)。以下为一段可直接运行的零偏统计脚本(Python,输入为已导出的 CSV:t, gx, gy, gz, ax, ay, az,单位分别为 s、°/s、m/s²):

import numpy as np

# 读取静态采集数据
data = np.loadtxt("imu_static.csv", delimiter=",", skiprows=1)
t  = data[:, 0]
gx, gy, gz = data[:, 1], data[:, 2], data[:, 3]   # deg/s
ax, ay, az = data[:, 4], data[:, 5], data[:, 6]   # m/s^2

# 去掉前 60 s 预热段
mask = t >= 60.0
g = np.vstack([gx[mask], gy[mask], gz[mask]]) * np.pi / 180.0  # rad/s
a = np.vstack([ax[mask], ay[mask], az[mask]])

# 陀螺零偏:均值 + 标准差(1σ 随机游走参考)
gyro_bias = g.mean(axis=1)
gyro_std  = g.std(axis=1, ddof=1)

# 加速度计零偏:扣除重力在机体系的投影(静止时 |a|≈g)
g0 = 9.80665
acc_norm = np.linalg.norm(a, axis=0).mean()
acc_bias = a.mean(axis=1) - np.array([0.0, 0.0, g0])  # 假设 z 轴朝天安装

print("陀螺零偏 (deg/h):", np.degrees(gyro_bias) * 3600)
print("陀螺 1σ (deg/h):", np.degrees(gyro_std) * 3600)
print("加速度计零偏 (mg):", acc_bias / g0 * 1000)
print("静止模长 (m/s^2):", acc_norm)

判读要点:陀螺零偏换算到 °/h 后与器件手册的零偏稳定性指标对比;加速度计零偏以 mg 计,通常要求小于 1~5 mg。若某轴零偏显著大于其余两轴(例如 3 倍以上),优先怀疑该轴器件老化或标定失效。静止模长偏离 9.80665 超过 0.5% 时,需先排除安装倾斜与振动干扰,再下结论。

静态测试必须在无人员走动、无泵组启停、无缆绳拖拽的时段进行;水下设备系泊时水流引起的微幅摆动会抬高零偏估计的方差,建议同时记录姿态角波动作为数据可信度参考。

动态航位推算对比:让漂移"显形"

静态零偏只能说明器件状态,还需证明它确实是本次漂移的主因。做法是:取同一段航行数据,分别运行纯惯性航位推算与组合导航解算,比较两者位置差随时间的增长曲线。若纯惯导相对组合输出的位置偏差呈近似二次增长,且增长率与静态零偏推算的量级吻合,则可判定零偏为主要误差源。

简化验证:以陀螺零偏 ε(rad/s)估算航向误差增长率,航向误差 θ(t)=ε·t,速度误差近似 v·θ(t),位置误差约 ½·v·ε·t²。例如 ε=0.05 °/h ≈ 2.42e-7 rad/s,航行速度 1.5 m/s,2 小时后位置误差量级约 ½×1.5×2.42e-7×(7200)² ≈ 9.4 m。若实测漂移与该量级同阶,则零偏解释成立;若实测漂移远大于此值,应继续排查标度因数、安装失准角或 DVL 标度问题。

静态零偏测试(系泊/静止) IMU 原始输出 陀螺 °/s · 加计 m/s² 预热 ≥ 20 min 采样 ≥ 100 Hz · 5~10 min 无人员走动 / 泵组停 统计量(去预热段后) 陀螺零偏 = mean(gx,gy,gz) → 换算 °/h 加计零偏 = mean(a) − 重力投影 → 换算 mg 1σ 标准差 · 静止模长 |a| ≈ 9.80665 判据 陀螺零偏 ≤ 器件指标(如 0.05 °/h) 加计零偏 ≤ 1~5 mg 单轴零偏 > 其余轴 3 倍 → 疑器件/标定 |a| 偏离 > 0.5% → 先排除倾斜/振动 零偏在限内 转查标度/失准角 零偏超限 补偿或更换 IMU 动态航位推算对比(同一段航行数据) 纯惯性航位推算 仅 IMU,无外部修正 组合导航解算 IMU + DVL + 深度计 时间 t 位置偏差 组合输出(基准) 纯惯导(二次发散) Δp ≈ ½·v·ε·t² 判读 偏差呈二次增长且与静态零偏推算量级吻合 → 零偏为主因 偏差远大于推算值 → 续查标度因数 / 安装失准角 / DVL 标度 示例:ε=0.05 °/h,v=1.5 m/s,2 h → 约 9.4 m

补偿与更换策略

依据两步测试结果分档处理:

测试结果判断处置策略
陀螺零偏在指标内,加计零偏 < 1 mg零偏非主因保留 IMU,转查标度因数、安装失准角、DVL 标度与杆臂
零偏超指标但 < 3 倍,且重复测试稳定常值零偏偏大写入零偏补偿值(在线标定或装订),复测动态漂移是否收敛
零偏 > 3 倍指标,或多次测试离散度大器件退化/故障更换 IMU,更换后重做静态零偏与动态对比验证
单轴异常突出,其余轴正常该轴标定或器件问题优先重标定;标定后仍异常则更换

补偿后必须做闭环验证:同一段航行数据重跑组合导航,确认位置漂移速率下降至可接受范围(例如 2 h 内漂移小于任务允许的定位误差门限),并检查卡尔曼滤波器中陀螺零偏状态的收敛情况——若零偏状态估计持续缓慢爬升而不收敛,说明补偿值或模型仍有偏差。

不要用"加大 DVL 修正权重"来掩盖零偏问题:这会让滤波器长期依赖外部观测,一旦 DVL 失锁(如例 3 的降级场景),位置误差会迅速暴露。零偏问题应在 IMU 层面解决,而非在融合层压制。