相机和激光雷达联合标定(附代码)
相机和激光雷达联合标定(附代码)
https://github.com/Aaron20127/Camera-lidar-joint-calibration
Camera-lidar-joint-calibration
网上找了很多方法,但不太靠谱,自己结合网上方法写了个标定代码,效果还不错,适合16,32,64线激光雷达,下边是代码连接和效果图。只要照着说明做,应该与没问题哈。
如果觉得有用的话,请记得在gtihub上收藏一下哦!
https://github.com/Aaron20127/Camera-lidar-joint-calibration
Aaron20127/Camera-lidar-joint-calibration
1. 所需软件
- PolyWorks 2019.
- Matlab 2019a.
2.程序
卸载此代码并执行以下步骤。
•基本要求
1.所有图像必须不失真。这件事至关重要。
2.校准板需要黑白棋盘格,一侧为奇数,一侧为偶数。
3.棋盘的短边应位于图像的顶部。棋盘的边缘不能与图像的边缘平行。图片中的棋盘姿势必须看起来像下面显示的第一排(第二排是错误的姿势):
4.点云棋盘的短边应位于激光雷达z轴方向的顶部。点云棋盘的边缘不能平行于激光雷达的z轴。
数据存储
1.将相机图像(.png)放入数据/图像中,必须用数字命名。
2.将激光雷达数据(.txt)放入data/pointcloud中,文件的每一行都只有xyz坐标,例如:
0.5363237262 -0.3014609218 -0.1039963961
0.5608119369 -0.3181324303 -0.1093295515
0.5810572505 -0.3322938681 -0.1137738377
0.6180613041 -0.3567755520 -0.1217735633
...
3.可以使用下面的命令,将.pcd文件转换为linux中的.txt文件。
$ pcl_converter -f ascii 1.pcd dst.pcd
$ cat dst.pcd | grep -v [A-Z] | grep -v [a-z] | cut -f 1,2,3 -d ' ' > 1.txt
•将棋盘调整为点云中的正方形
1.打开PolyWorks2019->工具->PolyWorks|inspector。
2.文件->输入->点云,选择.txt文件
3.只选择“毫米”和“空间”,单击“确定”。
4.选择->单元->交互
5.选择背景点,按delete键删除这些点,只保存棋盘点。
6.测量->特性->创建
7.选择正方形
8.选择配件
9.修改参数
10.选择最大值
11.选择->单元->交互,选择所有点
12.创作
13.平方->输出
1.将“.igs”文件保存到data/chesborard_pointcloud_igs。请注意,前缀名称必须是一个数字,并且其前缀名称必须与data/images中图像的前缀名称匹配。
2.重复上述步骤,直到棋盘上的所有点云都拟合好为止。
•配置
1.打开matlab2019,将matlab文件夹更改为根目录Camera-lidar joint calibration/。
2.打开joint_calibration.m文件,需要修改以下选项。
x_grids=5;%棋盘短边格数
y_grids=8;%棋盘长边格数
imageType = 'png'; % image format
% camera parameters
focalLength = [2525.9, 2528.1]; % fx, fy
principalPoint = [942.9102, 584.8342]; % cx, cy
imageSize = [1080, 1920]; % image size
•检查图像角点检测结果
1.如果是第一次运行此代码,应该仔细检查图像角点检测的结果。如果未成功检测到某些图像的角点,则需要调整MinCornerMetric参数。因此,应该按如下方式修改配置。
MinCornerMetric=0.4;%调整此参数可以更好地检测角点onlyShowDetection=“true”;%仅显示图像角点检测的结果
2.运行joint_calibration.m检查结果。绿色表示第一个检测到的角点。
•联合校准
1.如果角点检测成功,则应将共同图形修改为onlyShowDetection='false',以开始联合校准。
2.重投影错误将显示在图像中,十字符号表示重投影点。
3.所有的点云都将被预投影到相应的图像中。
4.校准结果R和T在命令窗口中。
•注意事项
- 从点云到图像的投影公式如下
Pc = K * R * (Pw - T)
2.为了获得更好的结果,应该使用至少20对点云和图像。校准板应尽可能覆盖图像的所有位置。