激光雷达与相机联合外参校准
前言
一、入门
1.1 安装
此软件包仅在 ROS Melodic 中进行过测试。
本地ROS
1 在catkin_ws/src/目录下载cam_lidar_calibration
(注本文后续将cam_lidar_calibration放在主目录下,并不是catkin_ws/src/目录下)
git clone -c http.sslverify=false https://gitlab.acfr.usyd.edu.au/its/cam_lidar_calibration.git
2 下载 ros 和 python 依赖
sudo apt update && sudo apt-get install -y ros-melodic-pcl-conversions ros-melodic-pcl-ros ros-melodic-tf2-sensor-msgs
pip install pandas scipy
3 构建包并获取setup.bashorsetup.zsh文件
catkin build cam_lidar_calibration
source ~/catkin_ws/devel/setup.bash
Docker
运行 docker 镜像(将被拉取到 dockerhub)。如果您的计算机具有 Nvidia GPU,请设置 cuda 标志--cuda on。如果您没有,请设置--cuda off(注:原文中命令为./run.sh --cuda on,原因是不加sudo会提示权限不足)
新开一个终端运行以下命令
cd cam_lidar_calibration/docker
sudo ./run.sh --cuda on
1.2 快速启动
根据下载包里面的自带数据进行快速入手测试
1 运行校准过程
roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=true
2.获取和评估校准结果
运行以下代码,查看校准结果,如下图所示
roslaunch cam_lidar_calibration assess_results.launch csv:="$(rospack find cam_lidar_calibration)/data/vlp/calibration_quickstart.csv" visualise:=true
二、使用您自己的数据进行校准
可采用离线与在线的方法进行校准,据体可见链接
2.1 校准目标的设置
准备一个矩形棋盘打印输出。论文中使用的棋盘图是一张A1(594 x 841mm),有95mm的正方形和7x5的内顶点(与网格正方形的数量不同),下载自
https://markhedleyjones.com/projects/calibration-checkerboard
1 将棋盘牢固地固定在一块刚性、不透明和矩形的棋盘上,使其中心对齐(尽可能最好)并且它们的边缘保持彼此平行。
2 选择一个合适的支架,可以安装目标,并且几乎没有板边缘突出的元素。
3 旋转棋盘,使其呈菱形(与地面成 45° 角)并将其安装在支架上。
4 在下图中,展示了与此软件包一起使用的两个棋盘架。
2.2 配置文件
下面解释/cfg/params.yaml中的字段
1 指定激光雷达和相机主题的名称。例如,在例子中是:
camera_topic: "/gmsl/A0/image_color"
camera_info: "/gmsl/A0/camera_info"
lidar_topic: "/velodyne/front/points"
2(可选)指定点云过滤的默认边界。如果您不确定,请随时跳过此步骤。
3 输入您准备的棋盘目标的详细信息:
pattern_size:这些是棋盘的内部顶点(不是正方形的数量;请参阅第 2.1 节中的棋盘)
square_length (mm):棋盘格的长度。
board_dimension (mm):棋盘印刷所在的背板的宽度和高度。
translation_error:棋盘中心与背板中心的偏移(见下图)
2.3 捕捉姿态并获得最佳校准参数集
1 启动校准包
roslaunch cam_lidar_calibration run_optimiser.launch import_samples:=false
2 隔离棋盘
使用 rqt_reconfigure 窗口,将 x、y 和 z 轴限制的值修改为仅显示棋盘。如果棋盘没有完全隔离,可能会影响棋盘的平面贴合,也会导致棋盘尺寸误差较大。