☰
多传感器融合第一步:IMU标定原理与实战全解
2026/10/29 6:12:58 网站建设 项目流程

做多传感器融合的项目,尤其是VIO、LIO这类涉及视觉惯导和激光惯导的系统,第一关永远不是算法选型,而是数据质量。而数据质量的头号前提,就是IMU标定。我见过太多人拿一个没标过的IMU直接跑优化,结果前端初始化疯狂漂移,还以为是算法写错了。其实问题往往出在传感器本身就带着一堆出厂误差。

IMU标定按我的习惯,会分成两条线:一条是内参标定,把加速度计、陀螺仪自身的零偏、尺度因子、安装误差尽量洗干净;另一条是外参标定,也叫联合标定,把IMU与相机、激光雷达之间的相对位姿关系搞准。这两种标定方式解决的问题完全不同,缺一不可。这篇文章就把这两类标定的原理、实操流程和经验教训一次性讲透,适合刚入门SLAM和多传感器融合的开发者,也适合被标定问题反复折腾的老工程师用来对照排查。

1. 两种标定方式的本质区别:先搞清楚你到底要标什么

1.1 IMU误差模型:零偏、尺度因子、安装误差与非正交

IMU本质上是一个测量加速度和角速度的传感器。加速度计测比力,陀螺仪测角速度——这是它的物理基础。但真正输出出来的数字,跟真实物理量之间存在系统误差。常见的误差源可以分成三类:零偏,尺度因子,以及安装误差。

零偏好比一把尺子的刻度起点没对齐。IMU静止的时候,加速度计理论上应该读到1g的重力,陀螺仪理论上应该读0,但由于电路偏置、温度漂移,实际静置时读数会有一个固定偏移。尺度因子则是刻度粗细不一致:真实输入1g,它读出1.003g,这个比例偏差就是尺度因子。安装误差更复杂,它通常来自三轴加速度计或三轴陀螺仪本身的轴并非严格正交,也可能来自传感器贴装到电路板时芯片的微小歪斜。

如果只是做滤波、做状态估计,零偏影响最大,因为一次积分误差就会随时间累积;尺度因子和安装误差虽然影响相对隐蔽,但在高动态运动和长时积分下同样会显著放大误差。这也是为什么完全依赖出厂参数跑SLAM,经常出现不可复现的漂移,同一个设备换个温度环境,表现就判若两机。

1.2 内参标定与外参标定的分界

这两种标定方式,分界线就是坐标系不同。

内参标定工作在IMU自身的坐标系里,目标是让加速度计和陀螺仪的输出尽量逼近真实物理量。标定完,你手里的IMU输出才算“可信”。外参标定则完全不同:IMU自身的输出已经准确了,但IMU和相机、激光雷达之间还隔着一个刚体变换。比如车载套件里相机装在挡风玻璃后,IMU装在车辆中轴附近,它们之间有一个固定的旋转和平移关系。这个关系如果错了,多传感器融合里所有残差项的坐标系就对不上,优化必崩。

用个生活化的类比:内参标定是让一把尺子本身的刻度精准;外参标定是搞清楚这把尺子相对于桌子的位置关系,确保你量出来的结果能换算到桌子坐标。它们分别解决“明明量错了”和“量对了但不知道是相对于哪个参照物”这两种问题。

这个区别在实际项目中非常关键。很多人把Kalibr、lidar-imu标定挂在嘴边,以为跑个现成工具就是“IMU标定”,结果根本不清楚自己到底在标内参还是外参,一旦结果不对就无从下手排查。

2. 方式一:IMU内参标定,让加速度计和陀螺仪“各自归位”

2.1 多位置静态法的原理与数学本质

内参标定最常见的思路是多位置静态法。它的物理基础很简单:重力是一个已知大小和方向的参考量。IMU静止放置时,加速度计理论上读到的就是重力加速度向量,陀螺仪理论上读到的就是0。利用这个基准,把IMU摆放成不同姿态,就能构造出一组约束方程,求解误差模型里的各个参数。

误差模型通常可以写成这样:

a_meas = S * R * a_true + b + n

其中a_meas是加速度计的实际测量输出,a_true是真实加速度,S是尺度因子矩阵,R包含安装误差引起的旋转(非正交),b是零偏,n是随机噪声。摆放N个不同姿态,每个静止姿态下加速度计的模长必须等于重力加速度大小,把所有姿态的约束叠加起来,就可以用最小二乘把S、R、b一起估计出来。

陀螺仪的零偏标定相对简单:静态放置足够长时间,输出均值就是零偏。但陀螺仪的尺度因子和安装误差没法靠重力来标,因为静止时陀螺的输入角速度是0,根本没有激励。所以陀螺仪的完整标定往往需要转台提供已知角速度,或者借助相机视觉求出的角速度作为参考。

2.2 六面法与转台法的实操对比

我在实际中使用最多的内参标定手段有两种:手摆六面法和转台法。

手摆六面法,就是把IMU按六个方向依次静止放置:X轴朝上、X轴朝下、Y轴朝上、Y轴朝下、Z轴朝上、Z轴朝下。每个方向采30秒到1分钟的静态数据。这个方法的门槛极低,不需要额外硬件,一张水平桌面就行,适合快速估计零偏,也适合在户外现场给VIO系统做一个基础校准。它的缺点是对尺度因子的约束不够充分,因为每个轴只经历了正负1g两种输入,能覆盖的工作区间有限。

转台法则是利用精密转台提供已知角速度,同时激励加速度计和陀螺仪的动态误差。转台旋转时,陀螺仪输入角速度是精确已知的参考值,这样尺度因子和安装误差的约束就非常充分。有条件的话,转台法标出的内参精度会显著高于手摆法,适合量产级传感器出厂标定。

从经验来讲,做科研或者原型验证,手摆六面法已经够用;做量产或者追求高精度,转台法几乎是必需品。这里有一个非常关键的细节:无论用哪种方法,标定过程中IMU必须被固定牢固,不能有轻微晃动,否则加速度数据会混入振动噪声,对拟合结果产生明显干扰。

2.3 内参标定实操中的数据采集细节

很多人觉得标定就是把IMU摆几个姿态,然后交给工具去算。实际上数据采集阶段决定了结果的上下限,具体来说有几个要点。

第一,要保证IMU在采样前充分供电稳定。不少IMU上电初期零偏漂移很大,需要预热几分钟才能进入稳定状态。我一般会先让设备通电静置5分钟,再开始采数据。第二,每个位置静态采集时间不能太短。加速度计的随机噪声虽然不大,但采集时间太短会让均值估计很不稳定,30秒是一个比较合适的下限。第三,摆放姿态要尽量覆盖三维空间。除了官方推荐的正交方向,我会追加几个斜45度方向,增加约束,让尺度因子和安装误差解得更稳定。

下表是我常用的一种六面法采集方案,供参考:

序号姿态描述采集时长意图
1X轴朝上,水平放置30s以上激励X轴正重力响应
2X轴朝下30s以上激励X轴负重力响应
3Y轴朝上30s以上激励Y轴正重力响应
4Y轴朝下30s以上激励Y轴负重力响应
5Z轴朝上30s以上激励Z轴正重力响应
6Z轴朝下30s以上激励Z轴负重力响应
7-9可选斜45度姿态30s以上增强尺度因子约束

这套流程下来,总共也就五六分钟,却能把内参拟合得比较稳。实际采集时注意桌面不要有软垫,最好用硬质平台,防止微小形变带来的误差。

2.4 Allan方差与噪声特性分析

内参标定除了零偏、尺度因子、安装误差,还有一个经常被忽略的环节:噪声特性分析,最常用的工具是Allan方差法。让IMU长时间静止放置,通常1小时以上,对陀螺仪输出做Allan方差分析,会得到一条双对数曲线。曲线上不同斜率的段分别对应量化噪声、角度随机游走、零偏不稳定性、速率随机游走等指标。

读这条曲线的规律大致是:斜率约-1的段对应量化噪声,斜率约-1/2的段对应角度随机游走,曲线底部平坦段对应零偏不稳定性,斜率约+1/2的段对应速率随机游走,斜率约+1的段对应速率斜坡。很多VIO系统在配置噪声参数时直接照抄数据手册,而实际项目里参数跟手册标称差很大是常态。所以建议大家养成长时间采集一组静止数据、做一次Allan方差分析的习惯,把噪声协方差直接写进系统模型。

我在工程上常用的做法是:对静态数据做Allan方差分析,提取角度随机游走和零偏不稳定性的数值,再换算到离散状态方程里的噪声协方差。这一步换来的收益非常直接,滤波器对噪声参数的敏感度立马下降,调参时间能省一大截。

2.5 内参标定结果怎么验证

标完内参不是结束,验证才是关键。我的习惯是三步走。

第一步,重采一段静态数据。如果标定结果正确,加速度计三轴输出的模长应该非常接近重力加速度g,且波动很小;陀螺仪输出均值接近零。如果加速度计模长偏得离谱,多半是尺度因子或零偏没收敛。第二步,做一次短时积分测试。把IMU随手拿起来运动几十秒,用标定后的数据做姿态积分,看看最终姿态角有没有明显漂移。零偏没标干净的话,角度会随时间线性漂移。第三步,放进实际系统里跑一下。在VIO系统里,如果内参准了,初始化的收敛速度和前端残差会明显变好。这些都可以量化,不是玄学。

3. 方式二:IMU外参标定:搞清IMU与相机和雷达之间的那个R和T

3.1 手眼标定与AX=XB

外参标定里最核心的数学模型就是手眼标定,核心公式是AX = XB。这里X是待求的外参矩阵,包含旋转和平移。A是IMU在两个时刻之间的运动变换,B是相机或激光雷达在同一时间段内的运动变换。因为IMU和相机刚性连接,所以满足A*X = X*B这个约束,多组运动约束联立起来就能解出X。

手眼标定原本来自机器人领域,解决的是“相机装在机械臂末端,怎么求相机和末端之间关系”的问题,所以叫“眼在手上”。后来被推广到多传感器融合,变成了“眼在手外”的标定场景。无论是相机-IMU联合标定,还是LiDAR-IMU标定,本质上都在解同一个方程。

理论听起来简单,实际上要解好AX=XB并不容易。因为A和B都来自传感器估计,带着噪声和误差。运动幅度太小、旋转轴单一,都会造成方程组条件数过大,结果极其不稳定。这也是为什么外参标定前一定要充分激励传感器,让运动轨迹足够丰富,才能保证姿态估计的几何约束足够强。

3.2 相机-IMU联合标定:Kalibr的完整流程

相机-IMU联合标定最常用的开源工具是Kalibr。这套工具出自苏黎世理工的机器人系统实验室,支持标定相机内参、IMU内参以及相机和IMU之间的外参。整个流程可以归纳为三步:准备、录制、求解。

准备阶段的核心是标定板。Kalibr官方推荐使用Aprilgrid棋盘格,它有编码信息,角点能自动编号,即使部分遮挡也能检测。标定板要打印平整、贴在硬质板子上,不能折叠或卷曲,否则检测到的角点位置有偏差,直接拉低标定精度。我见过太多人用A4纸打印标定板,还卷边,结果重投影误差怎么都降不下来。

录制阶段,需要把相机和IMU固定在同一刚性结构上,手持或者装在支架上,在一个纹理丰富、光照稳定的环境里做充分的六自由度运动。录制时的激励要求是“三轴充分旋转,同时保持平滑加速”,一般建议运动1到2分钟。太剧烈的抖动会造成图像模糊,太平滑的旋转又会让旋转约束不够,这两种都是最典型的失败原因。录制完成后,用kalibr_calibrate_imu_camera加载相机标定参数、IMU自带参数和bag文件,工具会依次完成角点检测、时间戳同步、非线性优化,最终输出相机-IMU外参以及IMU内参。

看到结果文件不要直接跑路,要认真读results文件里的残差和重投影误差。如果优化收敛但残差很大,通常说明初始值给得不好,或者激励不充分。重跑之前,先检查录制数据质量,而不是一味调参数。

3.3 录制标定数据时的运动激励设计

这一点我想单独拿出来说,因为很多人在这里吃亏。所谓“充分激励”,不是拿在手里乱晃,而是要保证绕各自轴的旋转和平移都有足够丰富的变化。我常用的运动模板是数字“8”字形运动,配合几个方向上的翻转,确保三轴角速度都有明显峰值交叉出现。

一个特别容易犯的错误是只做二维平面内的运动。比如有人手持传感器在水平面画圈,这样相机和IMU主要只绕竖直轴旋转,外参里的俯仰和横滚约束几乎没有,工具即使能跑通,结果也接近随机。我录数据前会在心里做个检查:有没有绕X、Y、Z三个轴都转了?有没有上下左右平移?加速度计是否经历了几组不同的朝向?如果这些答案都是肯定的,再开始正式录制。

3.4 LiDAR-IMU标定的思路与工具

LiDAR-IMU联合标定的思路和相机-IMU类似,但因激光数据形式不同,约束构造也有区别。比较常见的做法是利用点云帧间配准求出的相对位姿作为B,同时用IMU积分求出的相对位姿作为A,再进入手眼标定框架求解外参。如果环境里有地面或平面,也可以用点到面的距离约束来辅助标定平移分量。

开源工具方面,lidar-imu-cali是比较成熟的一套,流程基本也是“录数据、跑优化、看结果”。需要特别注意,LiDAR-IMU标定对场景要求很高:场景不能太单调,否则点云配准会退化;也不能有大量动态物体,否则配准出来的相对位姿带着动态噪声,标定结果被严重污染。实际操作时,我会优先选一个有缓坡、柱子、墙角的室内场地,把雷达架高一点,保证前后左右都有足够几何特征。

3.5 时间戳同步是外参标定的隐形杀手

外参标定最容易忽视、也最致命的问题是时间戳同步。手眼标定公式里,A和B必须是同一时间段内传感器各自测得的运动。如果IMU和相机的时间戳有偏差,哪怕只是几十毫秒,只要运动稍快,A和B的对应关系就错位了,标出来的外参肯定偏得离谱。

因此,录制标定数据之前,务必确认各传感器的时间戳是基于同一时钟源同步的。在ROS环境下,我建议先跑一遍话题时间同步检测,看看时间戳差值的分布是否稳定。很多标定工具内置了时间偏移估计,比如Kalibr会输出timeoffset参数,但它只能做微小修正,不能掩盖硬件上的大时间戳错乱。这个坑我踩过很多次,每次都是标定结果诡异,排查到最后才发现是时间戳没对齐。

4. 实操中最容易踩的坑与排查技巧

4.1 激励不充分:绝大多数标定失败的元凶

不管是Kalibr还是其他标定工具,官方文档都会反复强调运动激励,但大家就是容易忽视。我见过有人拿着IMU和相机在桌上平放着录了两分钟视频,期望能标出外参——这基本不可能。因为所有轴都要有充分旋转,传感器要在六个自由度上“都动起来”。

一个有效的检查方法是:录制完成后画一下IMU的角速度曲线,看是不是每个轴都有明显的峰谷和方向变化。如果某个轴几乎是平的,那就算标定过程不报错,结果也是不可信的。下面是我常用的检查逻辑,可以套用:

检查项判断标准
每轴角速度峰谷至少出现3次以上明显变化
每轴加速度波动涵盖多个朝向,不只是同一平面
运动时长90秒到3分钟之间
是否有静止段开头和结尾各3-5秒

4.2 数据长度与静止段的取舍

有些工具要求数据中包含初始静止段,用来估计零偏、建立初始状态。所以录制时提前让IMU静止3到5秒再开始运动,别一开机就动,也别录完就立刻关机。另外,数据太长不见得是好事,超过5分钟的数据会让优化时间成倍增加,却不一定带来精度提升。我一般把有效运动数据控制在90秒到3分钟之间,足够覆盖充分运动,又能保证求解速度。

很多时候,标定失败不是算法问题,而是录制习惯问题。养成“先静后动、三段式录制”的习惯之后,成功率会提高很多。

4.3 标定结果的四个快速验证法

拿到标定结果后,教大家四个快速验证手段。

第一,看残差和重投影误差,正常收敛时残差应该在一个可接受的范围内,如果出现数量级异常,基本可以断定标定数据有问题。第二,用标定的外参把IMU轨迹投影到图像序列上,观察投影轨迹是否与视觉特征点运动一致。如果轨迹和图像内容有交错或者明显偏离,说明外参旋转部分出了问题。第三,在一个闭环系统里做一次短时融合,看初始化是否快速收敛。第四,把同一组数据重复标定两次,对比结果的一致性。如果两次外参旋转差异超过零点几度,说明数据质量不够稳定,建议重新录制。

这四个方法各有侧重:残差看收敛、投影看几何、融合看整体、重复看稳定性。项目汇报或者写文档的时候,把这四组数据都附上,也能让结果更有说服力。

4.4 标定现场容易忽略的硬件问题

标定问题很多时候出在硬件本身。固定不当是最常见的:相机和IMU之间只要有一点点松动,外参就会随时间漂移,标定时时而好时而坏。很多人把传感器用双面胶临时粘在一起做标定,一次性实验也许没事,但只要中间有过碰撞或震动,位置就会变化,必须重新标定。

另一个容易忽略的是供电。IMU对供电电压很敏感,电池电量和稳压模块状态不同,零偏都会不一样。如果标定完的零偏值和之前差很多,先检查供电而不是怀疑算法。温度也一样,冷启动和热机状态下测出的零偏可能完全不同,量产测试时需要做温度补偿。

4.5 内参与外参标定的先后顺序

最后再说一个比较容易被新手忽略的流程问题:内参标定永远先于外参标定。这一点我踩过两次坑之后就再也没跳过顺序。内参不准时,外参标定的激励数据本身就带着系统误差,解出来的外参即使看起来收敛,也会在局部补偿内参误差,掩盖真实问题。

所以标准流程是:先做IMU静态多位置内参标定,再做相机内参标定(张正友法或者Kalibr的相机标定模块都可以),最后才做相机-IMU联合外参标定。如果项目中还涉及LiDAR,同理,雷达自身的位姿估计质量也要先确认,再进外参联合优化。

这个顺序本质上是“先尽量把单一传感器洗白,再谈传感器之间的对齐”。

5. 写在最后的经验总结

做标定这件事,大部分时间不是在跑工具,而是在伺候数据。录制环境、光照、标定板状态、时间戳对齐、激励形式,每一项都直接影响最终精度。我现在的习惯是,每次进场做新设备测试,第一件事就是花半小时录制一组标准标定数据,之后所有传感器实验都复用这套数据。这半小时投资换来的,是后面调参时大量减少的返工时间。

最后再分享一个小技巧:标定这事别只做一次。传感器的零偏会随温度和供电电压漂移,外参会因为机械结构的微小松动而变化。我一般会在每次实验前快速标定一次零偏,每隔一段时间重新做一次完整的外参标定,并且把历次标定结果记录成表格。你会发现,设备状态的变化都藏在标定结果的时间序列里,这比任何额外状态监测都直观得多。把标定当成一个持续的过程,而不是一次性的仪式,多传感器融合的稳定性才能真正立得住。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询