欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-17 18:45:33
...

前言

上篇博客激光雷达和相机的联合标定(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是标定地点的一个很好的选择示例:

激光雷达和相机的联合标定(Camera-LiDAR Calibration)之apollo图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则不满足。

激光雷达和相机的联合标定(Camera-LiDAR Calibration)之apollo图2 Good Camera-to-LiDAR Calibration Validation Result

激光雷达和相机的联合标定(Camera-LiDAR Calibration)之apollo图3 Bad Camera-to-LiDAR Calibration Validation Result