Autoware进行相机雷达联合标定

一、编译安装Autoware

本人是按照官方安装的

二、标定相机内参

1、任意方式标定内参

不管用什么工具什么方式标定完的内参,把内参矩阵,畸变矩阵复制到autoware内参文件里就行了(别忘了改文件里的图像尺寸),autoware内参文件如下,文件名:autoware_camera_calibration.yaml:

%YAML:1.0
---
CameraExtrinsicMat: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
       1. ]
CameraMat: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 1.0358646240234375e+03, 0., 6.3327093505859375e+02, 0.,
       1.0368857421875000e+03, 3.6562481689453125e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data: [ 2.4196624755859378e-02, -3.8360595703125000e-02,
       -1.6517639160156200e-03, -6.3323974609375000e-04, 0. ]
ImageSize: [1280, 720]
Reprojection Error: 0.0
DistModel: plumb_bob

CameraMat为内参矩阵、DistCoeff为畸变矩阵、CameraExtrinsicMat为初始化的外参矩阵(标内参的时候用不上,就用默认值就行)

2、用Autoware标定内参

rosrun autoware_camera_lidar_calibrator cameracalibrator.py --square SQUARE_SIZE --size MxN image:=/image_topic

参数列表:

参数 描述
SQUARE_SIZE 棋盘格的大小,以米为单位,例如0.025
MxN 棋盘格角点,例如129的棋盘格M×N即为118
image 图像话题,改成自己相机发布的话题

其中image的topic可以实时的用相机采集,也可以用提前录制好的bag包
启动autoware后的操作流程:
1.在相机视野内移动棋盘,直到界面中的X、Y、Scale条形变为绿色
2.如果步骤1没问题,CALIBRATE按钮按钮会变绿,点击它
3.按SAVE按钮,标定文件即保存在home目录中,名称为YYYYmmdd_HHMM_autoware_camera_calibration.yaml

三、标定相机外参

roslaunch autoware_camera_lidar_calibrator camera_lidar_calibration.launch intrinsics_file:=/PATH/TO/YYYYmmdd_HHMM_autoware_camera_calibration.yaml image_src:=/image_topic

参数列表:

参数 描述
intrinsics_file 标定好的内参文件
image_src 图像话题,改成自己相机发布的话题

启动成功后,会弹出一个图像查看器显示的是相机话题的图像,然后在一个终端中打开rviz并订阅点云。
开始标定的操作流程:
1.同时观察图像和点云
2.在图像中找到一个像素与点云对应的点(要找到9组对应的点)
3.先点击图像的一个像素点
4.再在rviz中用Publish Point工具单击Rviz中的相应3D点
5.这样点击9组对应的点即可,标定成功的文件在home目录中,名称为:YYYYmmdd_HHMM_autoware_lidar_camera_calibration.yaml
我标定好的文件内容如下:

%YAML:1.0
---
CameraExtrinsicMat: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ -7.7790843100493945e-02, -2.4332492096283465e-02,
       -9.9667272188923595e-01, 2.9736582189798355e-02,
       9.9696831005122966e-01, -3.5685379128176375e-03,
       -7.7726792618500185e-02, 7.8517058864235878e-03,
       -1.6653778276735642e-03, -9.9969755194536147e-01,
       2.4536323097440582e-02, -2.1072627604007721e-01, 0., 0., 0., 1. ]
CameraMat: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 1.0368479264581563e+03, 0., 6.3824154867849927e+02, 0.,
       1.0365568752556060e+03, 3.6724821987437957e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data: [ 1.6957648272811977e-02, 1.8810925993432863e-02,
       -7.4924769244694373e-04, -2.0282223380795470e-04,
       -7.6387620890063776e-02 ]
ImageSize: [ 1280, 720 ]
ReprojectionError: 0
DistModel: plumb_bob

需要提醒的是:这个外参是camera_to_lidar即相机到雷达的外参,不是雷达到相机的外参,如需使用雷达到相机的外参需要将此外参矩阵取逆

四、测试

将点云融合到图像上,即lidar_to_camera
git clone此代码到ros工作空间修改对应文件即可

猜你喜欢

转载自blog.csdn.net/qq_38337524/article/details/112762001