介绍
由于项目需要,本文借鉴了这篇相机和激光雷达的外参标定方法,完成了联合标定。
准备工作
1.准备一块尽量大的棋盘格,我这里采用的是5 x 5,100cm x 100cm的棋盘格。
2.要标定的相机和激光雷达,我这里采用的激光雷达是VLP-16。
3.准备一个较为空旷的地方。
4.启动相机和激光雷达驱动。
启动相机
roslaunch usb_cam usb_cam-test.launch
启动激光雷达
roslaunch velodyne_pointcloud VLP16_points.launch
5.录制bag
采集相机和激光雷达同时工作时的bag,包括相机和激光雷达的话题,我这里是/usb_cam/image_raw
,/velodyne_points
手持棋盘格,棋盘格倾斜45度,处于图像中至少9个不同的位置,每个位置保持静止10秒左右,保证提取足够的特征点。
标定流程
首先下载源码。
1.修改内参
cfg/initial_params.txt
2.修改rviz配置文件rviz/cam_lidar_calibration.rviz
里的fixed frame。修改为自己的激光雷达坐标系,我这里是velodyne
。
3.启动标定程序
roslaunch cam_lidar_calibration cam_lidar_calibration.launch
4.启动rviz
rviz -d rviz/cam_lidar_calibration.rviz
5.通过rqt_reconfigure
调整ROI,尽量让视野里只有标定板
6.播放bag
7.对每个位置,待稳定之后按i,即使出现直线拟合错误(猜测是因为我的激光雷达线数较少无法匹配到线特征),也按enter作为优化。每个位置只要一个。
8.收集8-9组数据后,按o计算
这里的Extrinsic Parameters即为相机和激光雷达的外参,6个值分别对应:
x,y,z,roll,pitch,yaw
结果查看
1.将计算出的外参写project_img.launch
文件里
<launch>
<node pkg="cam_lidar_calibration" type="projector" name="projector" output="screen">
<param name="roll" value="-1.62814"/>
<param name="pitch" value="0.14207"/>
<param name="yaw" value="1.63132"/>
<param name="x" value="-0.602047"/>
<param name="y" value="-0.0235283"/>
<param name="z" value="-0.871927"/>
</node>
</launch>
2.启动roslaunch cam_lidar_calibration project_img.launch
3.启动rviz
,添加投影后的点云话题,还可以查看tf
可以看到标定的效果还是比较理想的,至此标定结束。