无人车之美——外参标定方法汇总(激光雷达)

写在前面

我们都知道,无人车上有很多状态检测装置,典型的有里程计、毫米波雷达、激光扫描器、相机和GPS。为了有效地进行数据融合,这些装置之间的相对位姿标定,具有重要的意义。

理论上讲,虽然可以通过测量来获取各检测装置之间的转换关系,但由于以下原因导致无法直接使用人工测量的数据:

1)人工测量精度差、易受仪器质量和使用者水平影响;

2)专业检测设备价格贵、在狭窄空间的特殊情况也不容易实施;

3)安装结构的松动或调整导致需要定期调校,对标定步骤的简易性提出了要求;

4)量产化需求引出的自动参数调校需求,对标定结果的可信度提出了要求;

基于以上原因,在业内,一般以人工测量或从设计图纸得到的理论数据作为基础值,再使用相应的方法进行优化,以得到检测装置之间更准确的转换关系。

为了便于后续学习与提高,特意开此帖子,持续更新业内主流的解决方法。

围绕SLAM的两大分支,我们将外参标定分成激光扫描器和相机两部分,分别总结激光扫描器和相机与其他检测装置之间的参考标定方法。

注:本文只总结方法,提炼思路,不做公式推导,请轻松食用!

1.  激光雷达的标定

激光雷达的标定有2种,分为激光雷达到IMU的标定和激光雷达之间的标定。

1.1 激光雷达到IMU的标定可使用经典的手眼标定

外参标定也分两部进行。先找初值,再进行优化。

1.1.1 外参初值

外参找初值的基本原理是,激光雷达到IMU的标定是一个经典的手眼标定问题 AX=XB 。

其中,X 为激光雷达到IMU的坐标转换矩阵, A 为激光雷达2次移动的坐标转换, B 为IMU2次移动的坐标转换,最后用最小二乘法,求解出激光雷达到IMU的坐标转换关系 X 。

可以自己写一个,也可以试试OpenCV的calibrateHandEye手眼标定接口。

1.1.2 外参优化

有了外参初值后,进行外参优化。

基于前一步求得的外参初值,对激光雷达点云进行拼接。由于初值求解误差的存在,不同位置采集的点云拼接后存在对齐误差。具体表现为拼接点云视觉效果模糊、场景中的边缘结构不锐利。为此,算法第二部分将利用优化拼接的方法对外参进行优化。

可使用经典的GICP以及Entropy的代价函数即可。

参考博文(介绍优化器、标定方法和标定流程)

激光雷达和IMU标定_海清河宴的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/lpj822/article/details/122451778

1.1.3 瑞士苏黎世联邦理工大学的方案(lidar-align)

它来自瑞士苏黎世联邦理工大学------自动驾驶实验室,其git仓库如下:

lidar_align: finding the extrinsic calibration between a 3D lidar and a 6-dof pose sensorhttps://github.com/ethz-asl/lidar_align        根据网上文章的介绍,个人认为,精度不高,但成功率高,适合练手。

Note: Accurate results require highly non-planar motions, this makes the technique poorly suited for calibrating sensors mounted to cars.

        这是git仓库的提示。如果使用这种方法取获取高精度,需要极大程度的非平面运动。这也间接地说明,这种技术不太适用于车载传感器的外参标定。

参考资料:

参考博客1(安装与编译):Ubuntu20.04安装和编译运行lidar_align来联合标定lidar与imu的外参

参考博客2(时间戳对齐):【学习总结】Lidar与IMU标定 

1.1.4 浙江大学开源的方案(lidar_IMU_calib)

该方案提出了一个精确的和可重复的LIDAR-IMU标定方法——LI-Calib,用来标定3D LIDAR和惯性测量单元(IMU)之间六自由度的外参。基于LIDAR和IMU高频率数据捕获的特点,LI-Calib采用了一种基于连续时间B-Spline的策略,相比基于离散时间的方法,该策略更适于融合高频率和同步测量。此外,LI-Calib将空间分解为单元和用于数据关联的平面段,这使得标定问题在通常无标靶的环境中有了很好的约束。同时在虚拟仿真和真实环境中验证了该方案提出的标定方法的有效性。

据方案对应的论文介绍,该方法在人为场景下显示出高频率和较好的可重复性。

git仓库如下:

lidar_IMU_calib: Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch EstimationTargetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimation - GitHub - APRIL-ZJU/lidar_IMU_calib: Targetless Calibration of LiDAR-IMU System Based on Continuous-time Batch Estimationhttps://github.com/APRIL-ZJU/lidar_IMU_calibpipeline如下:

无人车之美——外参标定方法汇总(激光雷达)_第1张图片

源码只支持VLP-16线激光雷达。

若使用其他雷达(比如RS-32线激光雷达) 参考下文:

激光雷达和IMU联合标定包 lidar_IMU_calib 基于RS-32的扩展https://blog.csdn.net/weixin_46416017/article/details/120316198

附:lidar_IMU_calib代码编译过程中可能会出现的问题

无人车之美——外参标定方法汇总(激光雷达)_第2张图片

解决方法:修改ndt_omp包内的CMakeList.txt,将C++版本改为14或更高。

参考资料:

参考博客1(安装与编译及论文) :激光雷达与惯性测量单元标定Lidar和IMU的标定lidar_IMU_calib

参考博客2(标定原理分析及算法改进): Lidar与imu外参标定

1.1.5 只能标定旋转的方案lidar_imu_lidar(注意,它并非浙大的lidar_IMU_lidar)

这个方案的大致思想是:在基于3D激光雷达开发slam时,经常使用imu为匹配算法(icp, ndt)提供先验,所以需要校准lidar和imu之间的变换。对于匹配算法,transfom中的姿态比transform中的位置更重要 , 并且位置通常设置为 0。所以这个功能包只校准激光雷达和 imu 之间转换中的姿态分量

 功能包地址:

https://github.com/chennuo0125-HIT/lidar_imu_calibicon-default.png?t=M85Bhttps://github.com/chennuo0125-HIT/lidar_imu_calib参考博文1:实测 ubuntu 20.04 使用 lidar_imu_calib 功能包 进行 激光雷达与imu标定

 

1.2 多个激光雷达之间的标定——点云配准

点云配准法的原理是,通过配准2个激光雷达之间的点云,得到2个激光雷达之间的位姿关系,从而完成激光雷达之间的标定。实际标定过程中,可以先标定主激光雷达,然后再标定其它激光雷达到主激光雷达之间的坐标转换关系;也可以两两标定后,再进行图优化。

需要注意,有时候,激光雷达的配置并不相同。

如果激光雷达点云的稠密程度不同(因传感器的配置高低有别),或者2个激光雷达之间的点云重叠区域很小(因两个雷达受机械结构阻挡或相距较远),可以先分别对激光雷达各自的点云进行拼接,然后再用拼接后的点云做NDT匹配,从而得到激光雷达之间的转换关系。

2.  相机的标定

(链接)

最后的话

兴趣所至,不断更新。

希望对你有所帮助。

------------------------------------------------

参考文献:

1)激光雷达和IMU联合标定并运行LIOSAM

2)激光雷达与惯性测量单元标定Lidar和IMU的标定lidar_IMU_calib - Lachiven - 博客园

3)激光雷达和IMU联合标定包 lidar_IMU_calib 基于RS-32的扩展

你可能感兴趣的:(无人车之美,人工智能,汽车,自动驾驶,自动化,算法)