激光雷达和相机的联合标定(Camera-LiDAR Calibration)之apollo

前言

上篇博客激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware介绍了为什么要做联合标定以及如何使用Autoware的标定工具。
这篇博客介绍apollo标定工具的使用方法。
首先需要安装apollo,然后才能使用其标定工具
这个工具要求相对较高,需要广角相机,里程计和惯导,而且需要最准确的初始外参值,或许这样得出的标定结果更精确吧。

准备

下载标定工具,并将文件解压缩到$APOLLO_HOME/modules/calibration。APOLLO_HOME 是apollo仓库的根目录。

经过良好标定的相机内参

相机内参包含焦距,主点,失真系数和其他信息。
用户可以从其他相机标定工具获取内参,例如ROS Camera Calibration ToolsCamera Calibration Toolbox for Matlab
标定完成后,用户应手动将结果转换为特定的yaml格式文件。
用户必须确保K和D数据正确:

  • K指的是相机矩阵
  • D指的是失真参数

以下是相机内参文件的示例:

header: 
      seq: 0
      stamp: 
      secs: 0
        nsecs: 0
      frame_id: short_camera
    height: 1080
    width: 1920
    distortion_model: plumb_bob
    D: [-0.535253, 0.259291, 0.004276, -0.000503, 0.0]
    K: [1959.678185, 0.0, 1003.592207, 0.0, 1953.786100, 507.820634, 0.0, 0.0, 1.0]
    R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
    P: [1665.387817, 0.0, 1018.703332, 0.0, 0.0, 1867.912842, 506.628623, 0.0, 0.0, 0.0, 1.0, 0.0]
    binning_x: 0
    binning_y: 0
    roi: 
      x_offset: 0
      y_offset: 0
      height: 0
      width: 0
      do_rectify: False

初始化外参文件

这些工具要求用户提供初始外参值作为参考。
以下是Camera-to-LiDAR的初始外参文件的示例,其中,translation是相机和LiDAR之间的位移距离;rotation是旋转矩阵的四元数表达形式。

header:
      seq: 0
      stamp:
        secs: 0
        nsecs: 0
      frame_id: velodyne64
    child_frame_id: short_camera
    transform:
      rotation:
        y: 0.5
        x: -0.5
        w: 0.5
        z: -0.5
      translation:
        x: 0.0
        y: 1.5
        z: 2.0

注意:Camera-to-LiDAR标定更依赖于初始外参值。大的偏差会导致标定失败。因此,在条件允许的情况下,必须提供最准确的初始外参值。

标定场景

由于Camera-to-LiDAR标定方法用于自然环境,因此良好的地点可以显着提高标定的准确性。
建议选择包含树木,电线杆,路灯,交通标志,静止物体和清晰交通线等物体的标定场地。
图1是标定地点的一个很好的选择示例:

图1 Good Choice for a Calibration Site

必要的topics

用户必须确认程序所需的所有传感器 topics 都有输出 messages。有关更多信息,请参阅:如何检查传感器输出?
下表列出了板载程序所需的传感器topics。

Sensor Topic Name Topic Feq. (Hz)
Short_Camera /apollo/sensor/camera/traffic/image_short 9
LiDAR /apollo/sensor/velodyne64/compensator/PointCloud2 10
INS /apollo/sensor/gnss/odometry 100
INS /apollo/sensor/gnss/ins_stat 2

使用标定工具

在开始使用这些工具之前,必须验证定位状态是56,或者标定工具(程序)不会收集数据。
键入以下命令以检查定位状态:

rostopic echo /apollo/sensor/gnss/ins_stat

Camera-to-LiDAR Calibration

1.使用以下命令运行Camera-to-LiDAR标定工具:

cd /apollo/scripts
bash sensor_calibration.sh lidar_camera

2.遵循以下准则来收集数据:

  • 由于两个摄像机具有不同的时间戳,因此它们无法完全同步,因此在记录数据时非常缓慢地驾驶车辆非常重要。车辆的低速可以有效地缓解由不同时间戳引起的图像不匹配。
  • 确保摄像机图像中有一定数量(超过500个)投影点,否则工具无法执行外参标定操作。因此,此工具仅适用于广角相机。

记下保存的配置文件的位置:

/apollo/modules/calibration/lidar_camera_calibrator/camera_camera_calibrtor.conf

Camera-to-LiDAR标定配置说明:

Configuration Description
camera_topic wide-angle camera image topic
lidar_topic LiDAR point cloud topic
odometry_topic vehicle odometry topic
ins_stat_topic vehicle localization status topic
camera_intrinsics_filename intrinsic file of camera
init_extrinsics_filename initial extrinsic file
output_path calibration results output path
calib_stop_count required stops of capturing data
max_speed_kmh limitation of max vehicle speed, unit: km/h

Camera-to-LiDAR标定工具的输出类型为:

  • 标定的外参文件,以.yaml文件的形式提供
  • 将LiDAR点云投影到相机图像上的两个验证图像:
    • 一张图像用深度着色
    • 一张图像用强度着色

获得标定结果

所有标定结果都保存在配置文件的output路径下,并以 yaml 格式提供。

验证方法和结果

标定完成后,将在[output]/validation目录中生成相应的验证标定结果的图像。

  • 背景信息:在点云投影图像中,用户可以看到具有明显边缘的物体和标志,并比较对齐。
  • 验证方法:如果目标在50米范围内,其点云边缘可以与图像边缘重合,并且标定结果的准确性可以证明非常高。但是,如果存在错位,则标定结果会出错。当误差大于某个范围时(例如,5个像素,具体取决于实际使用情况),外参不可用。
  • 示例:如以下示例所示,图1满足外部参数的精度要求,而图2则不满足。

图2 Good Camera-to-LiDAR Calibration Validation Result

图3 Bad Camera-to-LiDAR Calibration Validation Result

猜你喜欢

转载自blog.csdn.net/learning_tortosie/article/details/82351553
今日推荐