Autoware标定激光雷达和相机记录

以Rfans-16为例,简单记录一下自己的学习标定之路,注意:如果激光雷达不是X轴朝前,需要对点云做一下旋转变换。

0. 连接相机和激光雷达,激光雷达X轴向前,Y轴向左,Z向上,相机默认正向前方。建立ROS工作空间

$ mkdir -p catkin_lidar_camera/src
$ catkin_make

1. 首先下载相机驱动,可以在github上找usb_cam https://github.com/ros-drivers/usb_cam将usb_cam 包放到src下,同将激光雷达的包放到src下。

2. 在catkin_lidar_camera目录下打开终端

$ source devel/setup.bash
$ catkin_make 编译项目。

3. 修改usb_cam-test.launch 中相机的端口号,启动usb相机

$ roslaunch usb_cam usb_cam-test.launch

4. 启动rfans激光雷达

$ roslaunch rfans_driver node_manager.launch

5. 下载autoware,在~/autoware/ros目录下打开终端

$ catkin_make 

编译项目需要一段时间,期间最好不要运行其他程序(注意cuda和驱动等)

6. 编译成功后继续执行

$ ./run

出现Autoware的主界面,证明编译成功。

 

Autoware标定激光雷达和相机记录_第1张图片

7. 点击界面rviz打开,读取rfans的rviz配置文件(在rfans驱动包),在文件栏添加panels,添加ImageViewerPlugin

(NOTE: 或者进入autoware根目录终端后,source devel/setup.bash,再打开rviz,直接终端打开rviz找不到这个插件)

8. 标定相机参数,这部分就是ros里面的相机标定,标定后文件在home文件夹下,square 是标定板的大小,单位米,image:后面维图像的话题。

rosrun autoware_camera_lidar_calibrator cameracalibrator.py --square 0.04 --size 8x8 image:/usb_cam/image_raw
%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: [ 3.8450357054617172e+02, 0., 3.4754519060153473e+02, 0.,
       3.8333442838042225e+02, 2.6041442152424389e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrix
   rows: 5
   cols: 1
   dt: d
   data: [ -1.1129042524997940e-02, -8.0253952291279903e-03,
       -3.2209335857971981e-04, 1.3874403093426296e-03,
       2.9361254263442723e-03 ]
ImageSize: [640, 480]
Reprojection Error: 0.0
DistModel: plumb_bob

9. 重新打开一个终端,启动标定程序

$ roslaunch autoware_camera_lidar_calibrator camera_lidar_calibration.launch intrinsics_file:=/home/sun/20200530_1126_autoware_camera_calibration.yaml image_src:=/usb_cam/image_raw

会出现一个畸变矫正后的图像。

10. 开始标定:选择图像中和点云中匹配的点对

在图像中点一下,会出现一个小红点,在rviz的点云中选择对应的点,先点击publish,再点击对应的三维点,在程序终端会出现选择的点的结果。(注意选对应点的时候,为了尽可能保证正确匹配,尽量选择点云中的拐角或者交叉点,另外,将点云旋转到一个合适的位置,尽量保证你选择的点没有其他太多不同深度的点,以免出现误点,影响标定的效果)。

11. 连续选择9对匹配点后,观察终端,在/home下会生成标定文件。

%YAML:1.0
---
CameraExtrinsicMat: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ 8.5796696358197755e-02, 2.7875146135983625e-01,
       -9.5652315689886724e-01, 1.1717870086431503e-01,
       9.5397844721965463e-01, 2.5390066317902082e-01,
       1.5956056993389645e-01, 1.1259393692016602e+00,
       2.8733960592719487e-01, -9.2619224571738301e-01,
       -2.4413904816435067e-01, 7.4070060253143311e-01, 0., 0., 0., 1. ]
CameraMat: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 3.8450357054617172e+02, 0., 3.4754519060153473e+02, 0.,
       3.8333442838042225e+02, 2.6041442152424389e+02, 0., 0., 1. ]
DistCoeff: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data: [ -1.1129042524997940e-02, -8.0253952291279903e-03,
       -3.2209335857971981e-04, 1.3874403093426296e-03,
       2.9361254263442723e-03 ]
ImageSize: [ 640, 480 ]
ReprojectionError: 0
DistModel: plumb_bob

12. 查看标定效果

这一步花了我一会时间摸索,首先是因为自己打开rviz,始终找不到ImageViewerPlugin这个插件,另外一个是因为,在终端执行rosrun calibration_publisher calibration_publisher calibration_file:=/home/sun/20200530_lidar_camera_calibration.yaml,一直提示错误,无奈写了个launch文件(如下),更改frame,设置发布坐标变换、相机内参,以及标定的外参矩阵,就OK了。

$ roslaunch calibration_publisher calibration_publisher.launch

    
    
    
    
    
    
    

    

    
        
        
        
        
        
        
        
    

启动点云到图像的转换节点,修改点云话题为rfans的

$ rosrun points2image points2image _points_node:=/rfans_driver/rfans_points

13. rviz查看标定结果

rfans发布的点云话题是在world坐标系下 ,标定程序发布的坐标变换是相机到激光雷达。camera—rfans16(在上面calibration_publisher的launch 文件中设置)但是没有world到rfans16的坐标变换,无法查看tf关系,所以,发布一个world-rfans16的静态tf变换

$ rosrun tf static_transform_publisher 0 0 0 0 0 0 world rfans16 100

14. 在ImageViewerPlugin 中 选择图像话题,以及点云话题: /points_image,即可查看最终的标定效果

Autoware标定激光雷达和相机记录_第2张图片

你可能感兴趣的:(ROS,自动驾驶)