一. 背景介绍
联合标定是做多传感器融合的基础工作,也是一个没有最好只有更好的研究方向,相关论文也是层出不穷,网上也有许多开源的工作,包括Autoware的工具箱我也试过,感觉标定效果不是特别好,标定效果不稳定,有时候好,有时候不好(也可能当时经验有限,好多点没注意),后来Matlab2020b推出了激光雷达和相机的联合标定教程,简单试了一下,效果不错,2020b中有个bug, 2021a中已经修复了,并且把demo做成了像相机标定一样的工具箱,后来多次标定也总结了一些标定过程中的经验,简单分享一下.
当然如果你有标定间,就不要看了,没标定间的标定精度高的...
二. 标定教程
所有的博客资料都有时效性,官方文档是一直在更新的,参考官方教程,仔细看一遍,可避免一些低级问题.
官方链接:Lidar and Camera Calibration- MATLAB & Simulink- MathWorks 中国
What Is Lidar-Camera Calibration?- MATLAB & Simulink- MathWorks 中国
标定操作视频:帮助中心 - MATLAB & Simulink
标定原理可参考论文:
[1] Zhou, Lipu, Zimo Li, and Michael Kaess. “Automatic Extrinsic Calibration of a Camera and a 3D LiDAR Using Line and Plane Correspondences.” In 2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 5562–69. Madrid: IEEE, 2018. https://doi.org/10.1109/IROS.2018.8593660.
三. 标定流程:
1. 使用Matlab Camera Calibrator标定相机内参
注意事项:
(1)首先标定板一定要平整,不能轻易因为外力发生弯曲或者随时间发生形变,棋盘格表面选用哑光材料覆盖,确保边缘清晰。
(2)标定板一定要覆盖全整个相机视野,可以将相机视野范围划分为九宫格,确保标定板主体出现在每个格子中,每个位置前后左右倾斜采图。
(3)倾斜标定板幅度不要过大,标定板和相机平面尽量保持在45度以内。
(4)在标定后可以观察重投影误差,可以删除误差大的图片重新标定,删除图片时需要保证样本的均衡性,图像视场的每个区域保留数目应差不多,不能标定板位于图像边缘或角落的全部删除, 最好mean error 在0.25下。
(5)多采图片,标定板一定要出现在图像边缘和四个角,能更好的估计畸变系数。
(6)参考Evaluating the Accuracy of Single Camera Calibration文中所提到一些提高精度的tips:主要针对宽视场的相机,可以计算3个径向畸变系数,切向畸变和skew参数。
(7)相机内参的标定最好在装车之前完成,这样可以保证采图均匀有效,标定内参效果更好。
(8)如果相机装在车内玻璃下面,应尽可能靠近玻璃,四周用外壳挡住,避免玻璃反光影响图像。内参建议隔着玻璃重新标定。
2. 采集联合标定数据
注意事项:
(1)采集数据前确保传感器刚性连接,不会被随意移动位置,或者震动导致姿态变化.
(2)没有特殊要求,激光雷达和相机原点越近越好,视差小,有利于后期融合算法的开发.
(3)最好做完硬件时间同步再采数据,尽可能保证后期点云和图像是为同一时刻, 这里可以采用市场上一些成熟的时间同步盒,图像采集卡,或者一些成熟的域控制器产品,在保证相机和激光雷达时钟源一致情况下,最好可以读取相机拍摄触发时刻.或者激光雷达触发相机拍照,配置激光雷达相位锁定(旋转式机械雷达)位于相机朝向中心.
(4)传感器驱动:激光雷达点云和图像数据借助ROS发布出来,注意驱动中时间戳获取形式。
(5)离线程序订阅话题根据时间戳,将激光雷达和相机同步数据保存成0001.pcd和0001.jpg文件,名称一致。
(6)标定板最好无白边,黑白格为8*9奇数和偶数,不要完全对称,表面哑光材料覆盖.
(7)标定场地最好水平空旷,标定板附近不要太多杂物,更有利于点云平面的拟合.
(8)标定板参考教程中,要45度摆放,可以更准确拟合角点,不要随意转动.
(9)最好标定板固定采集同步数据,如果人拿着标定板,每个位置保持一秒,不要快速移动.
(10)采集联合数据参考相机标定,标定板要完整覆盖图像视野,可前后移动3-5米采集两组数据.
3. 联合标定
参考官方教程,将输入改为自己生成的点云和图像即可.
注意事项:
(1)拟合点云的ROI不要设置太大,可借助rviz网格找到有标定板在点云中最大最小的边界.
(2)在脚本中detectRectangularPlanePoints函数,可适当调大一下阈值,不然可能无法拟合出平面,得不到有效数据.
(3)对于筛选出来的点云和图像数据对,可先用CameraCalibrator检测一下,检查标定板角点能否正确检出,删除背景和边缘误检的数据对.
(4)在运行过程中观察图像标定板四个边的颜色顺序是否保持一直,如果发生切换,可能导致标定失败,找到对应数据,删除重新标定.
4. 重投影验证效果
将标定得到的tform矩阵保存即可.将点投影到图像观察效果,检查墙体和杆子的边缘拟合程度.
(1)图1 是车辆在50km/h速度下软同步投影效果,可见150m左右车辆点匹配良好.
图1
(2)图2是也在50km/h左右,软同步,未作点云运动畸变补偿,可见图像右侧匹配良好,左侧未能完全匹配,运动补偿可提升匹配效果.
关于运动补偿请参考另外两篇博客
apollo7.0------浅谈激光雷达运动补偿(一)_龙性的腾飞的博客-CSDN博客_apollo运动补偿
apollo7.0------浅谈激光雷达运动补偿(二)--计算解析_龙性的腾飞的博客-CSDN博客_apollo 运动补偿
图2
以上为个人经验总结,认识有限,错误难免,欢迎交流指正。
感觉标定还比较好用,就是matlab太大了,要是能将matlab工具箱用C++写一个单独的工具就好了,有时间得尝试一下,还有自标定的方法还可以研究研究。