公司动态
BMI423 IMU 实战解析:标定、ESKF 噪声模型与多传感器融合
Bosch Sensortec 最近发布了新一代惯性测量单元 BMI423 IMU。做机器人、自动驾驶、包括工业设备姿态控制的朋友应该都清楚 IMU 在整个系统里的分量它不光是姿态估计的基础也是视觉、激光雷达融合里负责“运动先验”的关键传感器。BMI423 发布之后不少人问我这颗料和之前 BMI088、BMI270 这些有什么区别以及拿到手之后标定、融合应该怎么做。这篇文章我就从实际使用角度把这些事一次性聊透包括内参外参标定、静止初始化方差和 ESKF 过程噪声的关系、预积分也会把我在部署中踩过的坑放进来。1. 先聊 BMI423 这颗 IMU 的定位1.1 从产品线看 Bosch 的布局Bosch Sensortec 的 IMU 产品线覆盖很广。消费端常见的是 BMI160、BMI270主打低功耗、小体积用在手机、耳机、手环里工业端有 BMI085、BMI088常用于无人机和机器人大家比较熟。BMI423 的发布从定位上看更像是把工业稳定性和传感器性能再做了一次平衡目标场景明显是无人车、服务机器人、工业 AGV 和部分便携式设备。我个人的理解是BMI423 不是简单替代 BMI088而是给“对功耗和噪声更敏感但对成本不是极度敏感”的中间市场一个更好的选择。如果只做消费级体感交互BMI270 可能足够如果做飞行器或户外机器人BMI088 依然是久经考验的选择BMI423 则是在这两个区间之间打了一个新的锚点。它强调的往往是低噪声、低延迟和良好的温度稳定性这几项对于视觉惯性里程计、LiDAR 惯性融合来说比单纯低功耗重要得多。1.2 IMU 选型时要盯住的几个硬指标datasheet 上参数很多但真正对系统起决定作用的我认为就是这几个零偏稳定性长时间静止时陀螺零偏的漂移程度单位一般是 deg/h 或 deg/hr。这个指标直接影响姿态发散速度也是区分消费级和工业级的关键。角度随机游走陀螺输出的白噪声积分后形成的角度误差单位通常是 deg/√h。ARW 越小短期姿态越平滑。加速度计噪声密度影响速度和位置的估计噪声尤其是在视觉或 LiDAR 退化环境里IMU 会成为唯一速度参考。温度系数零偏随温度变化的大小。户外设备早晚温差大温漂大了姿态会在开机后慢慢飘。g 灵敏度陀螺对线性加速度的敏感程度振动环境下会被额外激励选型时容易被忽略。BMI423 这类新器件通常在噪声和温漂上有优化但选型不能只看纸面。同一颗料不同封装的应力、PCB 布局、焊接温度都会改变实际参数这也是为什么我建议拿到样品后先自己标定而不是直接信任出厂数据。2. 标定这关绕不过去2.1 内参标定为什么出厂数据不能直接信很多朋友问Bosch 这种大厂出厂前不都有校准数据吗为什么还要自己标定。原因是出厂校准的标定环境和你板上实际使用环境不一样。I2C 或 SPI 总线读出来的原始数据经过内部校正后已经能覆盖大部分误差但这里有两个问题一是芯片在出厂后经过回流焊封装和 PCB 之间的热应力会让零偏发生变化二是你的板子如果形状不对称、散热不均匀加速度计的 1g 方向和重力方向之间可能存在小角度偏差这个偏差在水平校准中很难完全消除。所以我在实际项目里的习惯是板子打样回来先做一次完整的加速度计六面标定和陀螺仪角速度标定。加速度计用六面法分别让每个轴朝上和朝下记录静止数据并拟合 bias、scale、misalignment。陀螺标定相对麻烦一点需要一个旋转台如果没有旋转台也可以用转盘或云台匀速旋转采用多角速度分段采样来拟合 scale 和 misalignment。实在不方便至少做一次静止零偏估计把温度场景也覆盖进去。这步做完你会发现将零偏误差从 datasheet 的理论值减小到实际值之后姿态发散的明显改善。尤其是长时间运行的 VIO 系统零偏估计准了后端优化压力会小很多。2.2 相机和 IMU 联合标定的原理与流程相机和 IMU 的离线外参标定常见的开源方案是 kalibr 和 MARG。核心思路是让相机在运动过程中拍摄到足够多静态特征点同时 IMU 记录角速度和加速度然后通过联合优化求解相机到 IMU 的旋转矩阵和平移向量以及时间偏移和各个传感器的噪声参数。这里的难点在于视觉运动恢复和 IMU 积分需要在时间上对齐。一个直观的理解是相机看到的运动轨迹和 IMU 积分出来的轨迹应该是同一条轨迹只是坐标系不同。外参就是要找到那个旋转和平移让两条轨迹尽量重合。实操步骤一般是这样把相机和 IMU 固定在同一块刚性结构板上避免任何柔性变形。准备一个纹理丰富的标定板比如 Aprilgrid 或 Checkerboard也可以直接用周围环境里的静态特征点。开始采集数据不是拿着设备乱晃而是要覆盖三个方向的旋转和三个方向的平移动作要缓急结合保证 IMU 激励充分。录完数据后先看一眼 IMU 数据有没有严重饱和、跳变、丢包再看视觉数据图片是否模糊特征检测是否充分。输入 kalibr 跑标定得到结果后做一次残差检查。一个很容易犯的错是觉得动作越快、越剧烈越好。实际上标定旋转外参时需要足够大的角速度激励但加速度激励要相对适中否则非线性误差和运动模糊会降低精度。最好做多组数据每组运动模式不同再对比标定结果的一致性。标定完成后我一般会做一次“验证跑”记录一段运动数据用标定好的外参把 IMU 积分轨迹投影到相机坐标系下和视觉特征轨迹做定性对比。如果偏差小于几个像素基本可用如果偏差明显就要重新标定。2.3 LiDAR 与 IMU 标定的实操要点LiDAR 和 IMU 的联合标定现在开源工具如 li_calib、livox_camera_lidar、direct_visual_lidar_calibration 都提供了很好的参考但实际用起来还是有不少讲究。LiDAR 点云本身存在运动畸变尤其是在快速旋转或平移时点云的每一束激光对应的时间点不同会产生“拖影”。如果拿带畸变的点云去和 IMU 积分对齐标定精度会大打折扣。所以采集数据时不能只依赖 LiDAR 去畸变更通用的方法是在硬件上让 LiDAR、IMU 和相机尽量同步时间戳或者在算法里做插值。标定流程里我比较推荐先做时间同步再做空间外参。时间同步不准确时空间标定结果会有系统误差。具体做法是让设备做几次大幅度的旋转分别记录 IMU 角速度和 LiDAR 点云中静态平面的法向量变化通过互相关找到时间偏移。LiDAR 和 IMU 标定的环境选择也有讲究。要找一个有大量平面和边角的室内环境不要在大面积玻璃窗、空旷场地或动态行人多的地方采集。否则平面拟合容易出错约束质量下降。我习惯在标定之前先把点云跑一遍平面分割确认有几面完整的大平面再开始采集。另外不同 LiDAR 的噪声模型不一样机械旋转式、固态式、MEMS 式对运动畸变的敏感程度不同。BMI423 这类低噪声 IMU 在 LiDAR 标定中其实很有优势短时间内的姿态轨迹更准能更好地校正 LiDAR 帧内的运动畸变。3. 从静止方差到 ESKF 的过程噪声别搞混3.1 静止初始化得到的测量方差到底是谁在机器人定位里常用 ESKFError-State Kalman Filter来做相机、LiDAR 和 IMU 的紧耦合融合。很多教程会告诉你先把传感器静止放一段时间取 IMU 数据算个方差然后把方差填进滤波器里。这里有一个非常常见的误区静止初始化算出来的方差描述的是“传感器在静止状态下的测量噪声”它可以作为测量噪声协方差 R 的参考但并不能直接当作 ESKF 里过程噪声协方差 Q 来用。过程噪声描述的是你对系统模型本身不信任的程度比如加速度计和陀螺仪的零偏随机游走、模型简化误差、离散化误差等这些都会随着运动状态变化而变化不是静止一分钟就能测出来的。ESKF 的过程噪声 Q通常包含两部分一部分是加速度计白噪声导致的误差漂移另一部分是陀螺仪白噪声导致的姿态漂移。它们需要通过 Allan 方差或者经验值来确定不能简单地用静止数据的 sample variance 代替。3.2 Allan 方差和样本方差要分开静止状态下直接把 IMU 数据求方差得到的是传感器在这个带宽下的随机噪声总能量包含了量化噪声、白噪声和低频漂移。这个值对调滤波器有一定参考价值但它不能分离出每种噪声成分。Allan 方差是 IMU 噪声分析的标准工具。它通过不同积分时间下数据的统计特性把噪声按频率区分开斜率 -1/2 段对应白噪声斜率 0 段对应零偏不稳定性斜率 1/2 段对应速率随机游走斜率 1 段对应速率斜坡等。实际操作中录一段至少一到两小时的静止数据用开源的 imu_utils 或 allan_variance_ros 工具跑一遍能得到角度随机游走和零偏不稳定性这两个关键值。这个过程很耗时但做完之后你对这颗 IMU 的底细就很清楚了。比如一颗被评价“低噪声”的 IMU如果 Allan 方差显示零偏不稳定性很大那它可能在高动态场景表现好但长时间静置定位会飘反过来说零偏稳定但白噪声大的 IMU在快速运动中容易短时间抖动。了解这些之后再调 Q就有方向了。3.3 ESKF 中的过程噪声 Q 怎么定在实际工程里很多人不会手推雅可比而是用经典实现里的默认参数然后凭感觉调。这也没错但理解原理能减少无效调参。ESKF 的 Q 实际上是离散时间过程噪声协方差。它由三个来源组成陀螺仪和加速度计的测量噪声、零偏随机游走噪声以及离散化时的积分误差。本质上你在状态预测时用 IMU 数据进行积分但你知道这个积分是有误差的所以要在预测协方差累加里加入 Q让滤波器对预测结果保持一定的“不确定度”。一个相对实用的做法是先用 Allan 方差得到陀螺仪角度随机游走和加速度计速度随机游走再根据滤波器的运行频率做离散化换算。比如连续时间 ARW 是 0.3 deg/√h运行频率 100Hz那么单步角度噪声方差大约是 (0.3/60)² / 100 这样的数量级。加速度计类似。之后把零偏随机游走也放进去作为 Q 的第二个块。当然这只是初始值。最后还是要放到实际系统里去跑看姿态估计在快速加减速和长时间静止下的表现。如果运动过程中姿态震荡过大说明 Q 可能偏小滤波器过于相信预测如果静止时位置漂移快说明 Q 偏大或者传感器零偏没有充分补偿。我个人习惯是先调陀螺仪相关Q再调加速度计Q因为姿态误差对位置的影响是二次积分关系姿态一旦飘了位置几乎不可能准。3.4 IMU 预积分和噪声传播预积分是 VIO 和因子图 SLAM 中处理 IMU 标准方法。它解决的问题很简单每一帧 IMU 数据都做积分如果后端优化时相机位姿变了难道要重新积分所有 IMU 数据计算量太大。预积分把相邻两帧关键帧之间的相对运动增量提前算好并把这个增量当成一个约束因子和后端优化联合求解。预积分不好使的一个典型问题是零偏更新之后预积分增量也需要线性修正。你不必重新积分但要通过雅可比把零偏的变化补偿到预积分结果上。很多新手在这里容易犯错因为零偏更新后预积分残差还要依赖零偏变化量这个雅可比矩阵如果用错系统会不收敛。另一个坑是积分频率。IMU 数据在预积分时需要离散化通常使用中值积分或 RK4。BMI423 这类高带宽 IMU 如果要发挥低噪声优势采样频率不要压得太低。我一般会设到 200Hz 以上否则高频运动信息被欠采样预积分在急转弯时会产生非线性误差。低频的预积分后端的图像或雷达约束再强也补不回来动态误差。4. 多传感器质量评估不是只看“准不准”4.1 IMU 专属质量指标前面提过 Allan 方差这里再系统讲一下 IMU 质量评估的指标。IMU 作为纯惯性传感器没有绝对参考所以只能通过统计性质判断好坏。零偏稳定性影响长时间姿态漂移是 IMU 档次的核心标准。角度随机游走影响短期姿态噪声决定 VIO 融合时的高频响应质量。带宽决定 IMU 能捕捉多快的运动变化。对于无人机剧烈运动300Hz 以上带宽比较理想对于扫地机器人200Hz 也够。非线性度和刻度因子误差影响大角速度/大加速度下的积分精度是标定要消除的主要对象。振动整流误差在振动环境下非对称的加速度计响应会整流出一个看似直流的偏移这在车辆和机器人上尤其糟糕。选型时如果可能要测试实际振动谱下的输出。我拿到 BMI423 之后会先用 Allan 方差做一个静态测试再用转台做速率测试最后装到车上跑一次实际振动。这个流程虽然耗时但对于评估一颗 IMU 是否适合量产很有必要。4.2 相机、LiDAR、GPS 的评估指标做多传感器融合不能只盯着 IMU。一个系统里四类传感器各自有专属的质量指标评估时要放到同一个框架里看。相机重点看角点重投影误差、图像信噪比、运动模糊程度、卷帘快门效应。不同的光照条件下图像质量变化很大所以要在白天、夜晚、逆光环境下分别评估。LiDAR重点看测距噪声、点云畸变、回波数量、噪点比例以及不同反射率物体下的测距偏差。很多固态 LiDAR 在低反射率物体上的点云会变稀这点比测距精度更影响后续配准。GPS重点看水平位置精度、速度精度、可用率、多路径误差和周跳比例。在城市峡谷或隧道中GPS 质量会急剧下降评估时不能只看开阔地数据。更专业的做法是用 RTK 或已知点做真值对比画出 CDF 曲线看 95% 误差。这些指标之间不是孤立的。比如 IMU 零偏漂移大了会严重影响相机和 LiDAR 在短时间内的相对运动估计GPS 周跳会导致全局位置跳变又反过来影响 IMU 零偏的可观测性。我在实际项目中会把这些指标做成一张质量评估表每次传感器改版都重新测一遍形成对比数据而不是等整机跑崩了才回头查。4.3 多传感器同步和数据质量检查多传感器融合里时间同步的重要性不亚于空间外参。我见过太多系统外参标定得很准但时间戳没对齐结果定位精度一直上不去。IMU 一般有自己的数据帧率比如 BMI423 可以支持几百 Hz相机是按曝光时刻输出LiDAR 是每个点都有时间戳GPS 是整秒脉冲或事件触发。同步方案一般有两种硬件同步通过 PPS 或其他触发信号把所有传感器对齐到同一个时间基准软件同步用一个公共时钟服务给每个数据帧打时间戳然后插值到公共时间点。在实际调试时一个小技巧是让系统做一次快速旋转然后看 IMU 角度积分和相机图像旋转之间的时间偏移。如果两者相差超过几毫秒就要检查驱动或者硬件同步链路。对于 BMI423SPI 接口在低延迟模式下更适合做高精度同步I2C 在某些系统上会因总线负载而引入不确定性这也是我推荐关键项目使用 SPI 的原因。数据质量检查是另一个容易被忽略的环节。我习惯在录包之后先画一张 IMU 数据曲线看有没有毛刺或丢包再画相机的曝光时间和帧间隔时间序列看是否存在掉帧最后用 LiDAR 点云投影到图像上检查空间外参和时间同步的质量。如果这一步没做后面算法跑出奇怪结果时很难快速定位是传感器问题还是算法问题。5. 上手 BMI423 的实际部署经验5.1 硬件布局和焊接的坑BMI423 这类贴片 IMU对 PCB 的布局和焊接工艺比一般传感器更敏感。以下几点是我在实际项目中反复踩过的不要放在板子的角落或悬空区域否则板子的弯曲应力会直接影响零偏。最好放在板子刚性最强的中心区域越靠近安装孔越容易受力。远离大电流走线和功率电感。功率器件产生的磁场和开关噪声会通过衬底耦合进 IMU 内部导致输出噪声异常偏大。回流焊温度曲线要符合芯片需求不要为了赶产量提高峰值温度。过高的焊接温度会在封装内部产生热应力和应力梯度使得常温零偏发生变化。如果有多片 IMU 需要贴装建议在板子打样阶段做应力对比测试。用同一批芯片、不同布局的板子比较静态零偏和温漂差异能发现很多“玄学”问题。另外BMI423 的地脚处理和电源去耦也很关键。数据手册会给出参考电路建议别省略去耦电容电源纹波大时 IMU 输出会出现和电源频率相关的噪声做 Allan 方差时会在特定相关时间上看到明显的“驼峰”。5.2 数据采集与滤波调参心得IMU 原始数据在进入融合算法前经常要加一个低通滤波器把超出运动带宽的高频噪声滤掉。这个截止频率不能乱选需要结合设备实际运动场景。比如无人机角速度运动带宽可以到 50Hz 甚至更高低通截止频率至少要在 100Hz 以上地面机器人运动相对平缓IMU 输出可以适当降到 30-50Hz 低通效果更干净。关键是滤波会带来延迟所以高频率、高带宽场景不能过度滤波否则控制环和融合环会感觉“钝”。我遇到过一种情况在振动剧烈的铺装路面测试时加速度计噪声很大我把低通截止频率从 50Hz 压到 20Hz结果姿态估计在快速转弯时出现明显滞后定位轨迹跟着变形。后来分析发现主要问题不是随机噪声而是机械振动造成的整流误差。这时候单纯靠低通滤波效果有限更好的办法是优化机械结构或增加减振垫让振动传递到 IMU 之前就被吸收。调滤波参数时我通常会用频谱分析工具先看静止状态下的 IMU 输出频谱找到振动峰值的频率段再设计对应的陷波或低通。BMI423 的采样率达到上千赫兹时还能用更丰富的离线滤波策略但实时系统要综合考虑 MCU 负载。5.3 常见问题速查下面根据我排查过的实际问题整理一个速查表现象可能原因解决方向静止时姿态缓慢漂移陀螺零偏未补偿或补偿不准重新做静止零偏估计和温补运动后回到原点位置偏移较大加速度计 scale 或 misalignment 有误差做六面法标定和角速度标定数据曲线出现周期性毛刺电源纹波或 SPI/I2C 总线干扰检查电源去耦降低总线速率增加滤波快速旋转时估计角度滞后低通滤波截止频率过低提高截止频率或减少滤波阶数剧烈振动下姿态震荡明显振动整流误差、机械共振优化安装减振考虑使用带内振动补偿的器件相机和 IMU 融合发散时间同步不准外参标定误差大先校准时间戳再重做外参标定LiDAR 点云漂移IMU 零偏不稳定或运动畸变未处理检查 IMU 质量使用点云去畸变模块长时静置后位置合入变化大零偏随机游走估计不准、Q 偏小用 Allan 方差重新估计噪声调整过程噪声GPS 和 IMU 融合跳变GPS 多路径或周跳在融合前做 GPS 质量检测动态调整权重这些问题的排查思路都是从“数据本身”入手先把每个传感器的原始质量搞清再做融合和调参能少走很多弯路。说到最后我个人在实际部署中的体会是像 BMI423 这样的新 IMU硬件规格只是起点真正决定系统表现的是你有没有把标定、噪声建模和同步这些基础工作做好。拿到芯片后别急着跑算法先花一两天做一次完整的传感器体检。把零偏曲线、Allan 方差、时间同步结果全部留下来形成自己的基线数据。之后不管是调参数还是排查问题手里有数据心里就不慌。这套方法我用在每颗 IMU 上都有效。