上篇讲了IMU的工作原理——加速度计测比力、陀螺仪测角速度、两者的互补特性。但IMU的数据不是完美的每种传感器都有自己的误差特性。今天就把IMU的误差模型讲透。面试时候被问IMU数据有什么误差很多人只会说有噪声。但面试官想听的是更系统的分析零偏bias、零偏不稳定性bias instability、随机游走random walk、白噪声white noise、尺度因子误差scale factor error、交叉耦合cross-coupling。这些术语你都得知道而且理解它们对姿态估计和导航的影响。陀螺仪的误差模型陀螺仪的输出可以建模为ω_measured (I S) * ω_true bias noise其中S是尺度因子误差矩阵对角线是各轴的尺度因子误差非对角线是交叉耦合bias是零偏noise是随机噪声。零偏Bias陀螺仪静止时的输出不为零这个固定的偏差就是零偏。零偏会直接导致角度积分漂移——零偏为0.01 rad/s积分100秒后角度误差就是1 rad约57度。零偏不稳定性Bias Instability零偏不是恒定的它会随时间缓慢变化。这种缓慢变化称为零偏不稳定性通常用Allan方差来表征。Allan方差是分析IMU噪声特性的标准工具通过不同采样时间的方差变化来分离各类噪声分量。单位是deg/h。典型的MEMS陀螺仪零偏不稳定性在1-10 deg/h。角度随机游走Angle Random Walk陀螺仪输出中的白噪声分量积分后导致角度随机游走。单位是deg/√h。这个参数决定了短时间内的角度精度。尺度因子误差Scale Factor Error陀螺仪的输出和真实角速度之间的比例系数不是精确的1。比如尺度因子误差为1%意味着真实角速度1 rad/s时输出可能是1.01或0.99 rad/s。这个误差在短时间积分中影响不大但长时间累积会导致显著的角度误差。交叉耦合Cross-coupling理想情况下x轴的陀螺仪只测量绕x轴的角速度。但实际上绕y轴和z轴的旋转也会耦合到x轴的输出中。交叉耦合通常用非对角线元素表示量级一般在1%以下。加速度计的误差模型加速度计的误差模型和陀螺仪类似a_measured (I S) * a_true bias noise - R(orientation) * g零偏加速度计静止时的输出减去重力后不为零。典型的MEMS加速度计零偏在10-100 mg量级。零偏不稳定性和陀螺仪类似零偏随时间缓慢变化。尺度因子误差加速度计的灵敏度和标称值有偏差。交叉耦合一个方向的加速度会耦合到其他方向的输出中。振动整流Vibration Rectification这是加速度计特有的误差。高频振动经过加速度计的非线性特性后会被整流成一个直流偏置。这就是为什么IMU要远离振动源——振动不仅增加噪声还会产生系统性的零偏偏移。温度漂移温度变化是IMU误差的重要来源。MEMS传感器的零偏和尺度因子都随温度变化。典型的温度漂移特性零偏随温度线性变化温度系数也可能有二次或三次项。比如一个陀螺仪的零偏温度系数是0.1 deg/s/°C温度变化10°C就会引入1 deg/s的零偏变化——这对积分来说是非常大的误差。高端IMU内部有温度传感器可以做实时温度补偿。厂家会提供温度补偿参数或者你可以通过实验自己标定。# 简单的温度补偿模型 def temperature_compensate(raw_value, temperature, calib_params): 温度补偿 # calib_params包含参考温度下的零偏、零偏温度系数 bias_at_temp calib_params.bias_ref calib_params.temp_coeff * (temperature - calib_params.temp_ref) return raw_value - bias_at_temp对于没有温度补偿的低端IMU一个实用的做法是开机后等待IMU预热到稳定温度通常需要10-30分钟然后在温度相对稳定的时间段内使用。避免在温度快速变化的环境中使用低端IMU。还有一种折中方案在实验室做温度标定实验——把IMU放在温箱中从低温到高温缓慢升温记录每个温度下的零偏值拟合出温度-零偏曲线。然后在实际使用时根据实时温度查表或插值补偿。这种方法虽然不能完美消除温漂但能把温漂的影响降低一个量级。很多中端IMU产品出厂时就做了这种温度标定。实际校准流程拿到一个新的IMU校准流程建议按这个顺序来。第一步做静止标定。把IMU固定在水平台上静止状态下采集10分钟数据取平均值作为零偏。这个方法简单但有效能去除大部分固定零偏。第二步做六面体标定加速度计专用。把IMU分别放在六个面朝上的位置静止采集数据用这六组数据计算尺度因子误差和安装误差角。网上有开源的校准工具比如imu_utils可以直接用。第三步用Allan方差分析噪声特性。采集2小时以上的静止数据用Allan方差工具分析得到零偏不稳定性、角度随机游走等参数。这些参数是配置EKF或SLAM系统时的重要输入。面试中怎么聊面试官问IMU误差模型按这个框架回答先说陀螺仪的误差零偏、零偏不稳定性、随机游走、尺度因子误差、交叉耦合再说加速度计的误差类似的几项加上振动整流然后说温度漂移的影响和补偿方法最后说校准方法六面体标定、静止标定、Allan方差。如果面试官追问零偏和零偏不稳定性有什么区别你可以说零偏是固定的偏差可以通过校准去除零偏不稳定性是零偏随时间的缓慢变化无法完全校准只能通过融合其他传感器来抑制。如果面试官追问怎么选择合适的IMU你可以说根据应用需求看关键指标。姿态估计精度要求高重点看陀螺仪的零偏不稳定性。导航精度要求高重点看加速度计的零偏和尺度因子精度。动态环境温度变化大重点看温度漂移特性。如果面试官追问IMU误差对SLAM有什么影响你可以展开说在视觉惯性SLAMVIO中陀螺仪的零偏不稳定性直接影响姿态估计精度进而影响特征点的3D位置估计。如果陀螺仪漂移严重特征点的轨迹会出现扭曲导致建图失败。加速度计的零偏会影响平移估计导致尺度漂移。这就是为什么VIO系统通常把IMU零偏作为优化变量在滑动窗口优化中在线估计。补充一个实际做IMU校准的经验。当时我们用的是BMI088需要做六面体标定把IMU放在六个不同朝向下静止采集数据。一开始标定结果不理想加速度计的尺度因子误差还有0.5%。排查后发现是标定平台的水平度不够——我们用的是普通桌子本身就不平。后来借了一个精密水平仪先把标定平台调水平再在每个朝向下等5分钟让IMU温度稳定采集1000组数据取平均。重新标定后加速度计的尺度因子误差降到了0.05%以内陀螺仪零偏也从标定前的0.03 rad/s降到了0.005 rad/s。这个经历告诉我IMU标定对环境要求很高温度稳定、平台水平、采集时间足够长三个条件缺一不可。在激光惯性SLAMLIO中IMU的作用类似。高频率的IMU数据用来补偿激光雷达的运动畸变每帧点云扫描期间机器人的运动如果IMU精度不够运动补偿就不准确拼接出来的点云会出现模糊或重影。所以选择IMU时要根据SLAM系统的要求来定。对于消费级应用扫地机器人低端IMU配合视觉或激光雷达的约束就够了。对于高精度应用自动驾驶、测绘需要工业级甚至战术级的IMU。下一篇讲IMU数据预处理——滤波、补偿和对齐。把误差模型搞清楚之后下一步就是如何在实际代码中处理这些误差。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第156篇 IMU工作原理——加速度计和陀螺仪的物理基础 下一篇预告第158篇 IMU数据预处理——滤波、补偿和对齐有任何问题欢迎评论区留言我会尽量回复。