来源:任乾@知乎
链接:https://zhuanlan.zhihu.com/p/156176570
一、概述
多传感器的外参标定和时间同步(统称时空标定)是融合的重要前提条件,前面介绍的所有融合都是默认已经标定好了的。但实际上,标定当然是需要在融合之前做的,之所以放在后面讲,是因为标定所用到的知识比融合多,或者可以讲,标定是一种更高级别的融合。
由于标定的方法多种多样,要标定的内容也十分的多,所以本篇文章无法对每一种方法进行详细的介绍,索性我们在这里把常见方法的思路汇总梳理一下,弄清楚什么情况下该选什么类型的方法,等真正用到再去了解它的细节,也未尝不可。
二、外参标定方法
相比于时间标定,外参的标定更简单一些,那么我们就先从简单的开始介绍。
外参标定方法可以按以下方式进行分类
之所以按有无共视进行区分,是因为二者在原理和精度上都有本质区别,而且在实际应用中,也会尽可能让传感器之间产生共视。
1.雷达和相机外参标定
这类任务中,主要是用的就是pnp方法,可参考的资料有:
论文1:LiDAR-Camera Calibration using 3D-3D Point correspondences
代码1:https://github.com/ankitdhall/lidar_camera_calibration
论文2:Automatic Extrinsic Calibration for Lidar-Stereo Vehicle Sensor Setups
代码2:https://github.com/beltransen/velo2cam_calibration
详细的公式和实现细节大家可以看论文和代码,这里更倾向于用文字描述直观地解释一下它的原理。有共视的视觉与雷达的标定原理很简单,从图片中可以看到,二者都可以扫到标定物,而且都能够提取物体的边缘(线或点),建立一个残差模型,描述二者的边缘之间的距离,残差是以外参为自变量的,因此进行优化让残差最小,即可找到二者之间的外参。
2.多雷达外参标定
参考资料:
论文:A Novel Dual-Lidar Calibration Algorithm Using Planar Surfaces
代码:https://github.com/ram-lab/lidar_appearance_calibration
这类方案的核心思路是,在每个雷达各自的点云中提取平面特征,理论上,当外参已知且精确时,同一个平面在所有雷达中的扫描应该是重合的(转换到同一个坐标系下),反之,当二者不重合时,即说明外参有误差,以平面的不重合度为残差,以外参作为自变量,建立优化模型,进行优化,即可得到外参结果。
3. 手眼标定
手眼标定的名字最早来自于机械手的标定,机械手上有摄像头,标定摄像头和机械手之间外参的方法被叫做手眼标定。但是这种工作原理,可以应用在所有无共视且二者都能进行位姿解算的传感器标定任务中(比如相机与IMU、雷达与IMU、相机与雷达等等)。
它的原理很简单,就一个公式:
其中 X 就是要标定的外参,A和B分别为两个传感器各自解算的相对位姿。这个公式结合上面的图,我想应该就不用过多解释了。
相关参考资料为:
论文:LiDAR and Camera Calibration using Motion Estimated by Sensor Fusion Odometry
https://github.com/ethz-asl/lidar_align
4. 融合中标定
我们通过前面多篇文章的介绍,应该已经明白融合是怎么回事,也应该清楚融合的模型是什么样子,而在融合中标定,指的是把外参作为状态量加入到融合模型中去,一起进行状态估计。随着变量的增多,融合的精度、观测性要求都更高,因此前面才说标定是一种更高级别的融合。
在实际使用中,融合中标定方法的一个重要贡献是可以进行在线标定,即在融合任务执行的过程中,就把外参给搞定了,而不需要像其他方法一样先标定再融合。这方面的工作有很多,其中包含众多vio/lio系统,如vins、lio-mapping、M-Loam 等。由于都是很出名的工作,所以论文和代码就不一一列出了。
三、时间标定方法
在实际使用中,很多时候各个传感器都是用自己的时钟,由于各个时钟之间不同步,因此需要估计他们之前的时间差,也就是这里所说的时间标定。
时间标定是一个很复杂,且很难做的精确的事情。因此在实际使用中,更倾向于用硬件解决问题,比如让多个传感器使用同一个时钟源,或者用一个共同的时间戳给所有传感器打时间标签等等。总之,时间标定是一个没有办法的办法,它是有精度代价的,一般在没有条件做硬件同步(比如手机)时,才做这一项工作。
时间标定方法按照原理主要可以分为离散时间方法和连续时间方法。
1.离散时间方法
离散时间方法指的是在原有离散时间融合模式下,简单地解决时间同步问题。
在业内,比较有名的有下面两类方法。
1)方案1
这是港科大秦通的一篇工作,应用在vins上,论文为 Online Temporal Calibration for Monocular Visual-Inertial Systems。
它的思想很巧妙,让IMU时间保持不变,图像上特征点基于匀速运动模型修改位置(示意图如下)。与不考虑时间误差时相比,架构不变,使用极小的改动,实现了期望的效果。
2)方案2
第二个方案的思路是在滤波中计算相机位姿时,直接按时间差对积分区间进行调整(论文题目:Online Temporal Calibration for Camera-IMU Systems: Theory and Algorithms)。
此时对应的状态量为
相机位姿估计的模型就变为
2. 连续时间方法
连续时间指的是把输入(加速度、角速度)建立为连续时间函数,而不是它原来的离散时刻。这是因为,预积分中把时间差作为待估状态量,对时间差进行建模时,会得到以下结果:
由于要对时间差求雅可比,因此插值函数必须可导(可到要求必须连续,因此要使用连续时间模型),此时雅可比如下:
剩下的就可以使用正常的优化步骤去求解问题了。
当然连续时间slam是一个很大的话题,三言两语肯定介绍不完,感兴趣的可以去看以下论文
a. kalibr 系列
论文:Continuous-Time Batch Estimation using Temporal Basis Functions
论文:Unified Temporal and Spatial Calibration for Multi-Sensor Systems
论文:Extending kalibr Calibrating the Extrinsics of Multiple IMUs and of Individual Axes
代码:https://github.com/ethz-asl/kalibr
b. 其他
论文:Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation
代码:https://github.com/APRIL-ZJU/lidar_IMU_calib
四、总结
有工程经验的都知道,方法归方法,效果归效果,理论的东西推导的再完整,他们的效果总归是有差异的,因此选择方法时要有一个优先级。
对于外参标定方法,可以粗略认为,三种思路的精度由高到低依次为
a. 基于共视的标定
b. 融合中标定
c. 手眼标定
因此,当高精度等级的方法能够使用时,就尽量不要使用低精度等级的方法。
对于时间标定方法,应尽量使用硬件同步方案,不得已时,再使用算法去估计时间差,而且,估计时,应该在环境好(特征充足)的情况下去估计。
本文仅做学术分享,如有侵权,请联系删文。