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工作空间修改对应文件即可