激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

简单记录一下使用Autoware对lidar和cam联合标定的步骤和一些注意事项。

首先,开源的lidar和cam标定方案不多,花了一天查资料大概有以下几个:

but_velodyne

https://github.com/robofit/but_velodyne

https://github.com/robofit/but_velodyne_lib

https://blog.****.net/learning_tortosie/article/details/82385394

这是一个最简单、最单纯的lidar和cam联合标定的方案,但是需要openCV2.4.9,我的当前版本为3.2,懒得重新装而且看博客感觉别人也没有成功,所以放弃了。

lidar_camera_calibration

https://github.com/ankitdhall/lidar_camera_calibration

https://blog.****.net/a2281965135/article/details/79785784

仔细看了一下,这个是基于深度相机/双目的标定方案。

https://github.com/beltransen/velo2cam_calibration

这个也是。

Autoware

https://github.com/CPFL/Autoware/wiki

https://blog.****.net/learning_tortosie/article/details/82347694

https://blog.****.net/AdamShan/article/details/81670732

这是日本开源的一个自动驾驶平台,其中也包含了lidar和cam的联合标定,适合于velodyne,看博客感觉效果还不错,需要的数据和材料也不麻烦,但是标定过程需要不断的手动把cam中的标定板在lidar点云中的位置圈出来,有点麻烦(也有点蠢...)。

apollo

https://github.com/ApolloAuto/apollo/blob/master/docs/quickstart/apollo_2_0_sensor_calibration_guide.md

https://blog.****.net/learning_tortosie/article/details/82351553

http://apollo.auto/index_cn.html

这是百度的阿波罗自动驾驶平台,其中包含了lidar和cam的标定方案,仔细看完感觉要求过高,不但需要普通的数据,还需要IMU、里程计等传感器数据,不太适合单纯的lidar和cam标定。而且需要较为精确的lidar和cam相对的初始安装角和广角相机,可以尝试先用Autoware标定一遍之后再用这个标定使得结果更精确。

 

综上所述,最后采用Autoware的标定方案。在开始简述一下其基本原理:

首先和普通cam标定一样,通过标定板的变化算出cam的位姿矩阵;然后再手动用小圈把点云中对应的标定板框出来,看下文介绍可以理解,小圈最少包含了两条点云线,两条线即可构成一个面,就是标定板所在的平面。我们就能通过lidar相对于这个面的角度推算出lidar的姿态,通过这个面点云的距离算出其位置,再和cam相对比,就能得到cam_lidar的外参矩阵了。

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

 

在安装中,建议选用第二个,一般来说ROS和OpenCV都是有的,再安装个Qt就可以了,很简单的。官网推荐的第一种方案需要固定的硬件配置,很麻烦。

具体标定方法可以看这个视频(需要*)

https://www.youtube.com/watch?v=pfBmfgHf6zg

没条件的可以认真的看这个操作说明

https://github.com/CPFL/Autoware/wiki/Calibration

说一下可能存在的疑惑:

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

其中提到了rosbag的制作,之前在用Kalibr标定IMU和cam时有明确要求制作的rosbag的格式,包括照片的格式、命名要求,IMU数据格式、频率等,就很好奇Autoware标定的rosbag要求是怎么样的,但是官网没有说明。尝试发现,使用ros格式数据就可以了,比如点云为ros的PointCloud2,直接发布话题,然后用rosbag record /image /point_cloud 记录下rosbag就可以了。

在之后的输出用rosbag play /image:=image_raw /point_cloud:=points_raw,就可以将自己的topic名转换成Autoware标定程序需要的image_raw和points_raw。在rosbag play时可以按空格暂停。

标定界面

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

需要手动在右下方的图中,不断的把标定板对应的点云图给框出来,为了达到比较好的标定效果,需要的数据量越多越好,图中大概选了100张图,然后project检查效果的时候把不好的十来张删了,最后用了90张图。(一个个框出来还是很累的...总共花了一个多小时roz。

这里说一下数据采集和标定的时候的注意事项:

建议标定至少两次,首先第一次得看最后的标定效果,如图:

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

这是一次标定结果不是很好的情况,看2处就很明显image和pointcloud就没有对齐。

先说一下1.标定板要注意的,首先最好用官网给的尺寸,质地要比较硬,拿起来才不会弯曲;然后其原理是默认点云全是打在标定板上的,所以拿标定板的人最好能藏在标定板背后而且如果使用标定纸贴在一个硬纸板上的,那硬纸板的大小得和标定纸一样大,才能保证点云是打在标定板而不是后面加固的硬纸板上。

2.最好选一个前面空旷但周围有一点背景,能识别标定效果的地方。前面空旷是为了保证没有和标定板相近的点云对标定效果的干扰。还要注意lidar的线的距离,尽量能标定到最上面的和最下面的,本文使用的是VLP16,相比32线的站在5m,16线的开始稍微往前站一点。

3.标定前要测出相机视野的两端的位置,才能最大限度的提高标定结果。

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

 

4.标定的时候要注意这个小圈的垂直方向,这是最重要的。务必保证小圈的垂直轴垂直于标定板平面。

 

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

最后标定的结果文件:最重要的就是外参矩阵

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

补上最后的结果:

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)

激光雷达(lidar)和相机(camera)联合标定调研(基于Autoware的详细步骤)