前言
上篇博客激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware介绍了为什么要做联合标定以及如何使用Autoware的标定工具。
这篇博客介绍apollo标定工具的使用方法。
首先需要安装apollo,然后才能使用其标定工具。
这个工具要求相对较高,需要广角相机,里程计和惯导,而且需要最准确的初始外参值,或许这样得出的标定结果更精确吧。
准备
下载标定工具,并将文件解压缩到$APOLLO_HOME/modules/calibration
。APOLLO_HOME 是apollo仓库的根目录。
经过良好标定的相机内参
相机内参包含焦距,主点,失真系数和其他信息。
用户可以从其他相机标定工具获取内参,例如ROS Camera Calibration Tools和Camera Calibration Toolbox for Matlab。
标定完成后,用户应手动将结果转换为特定的yaml格式文件。
用户必须确保K和D数据正确:
- K指的是相机矩阵
- D指的是失真参数
以下是相机内参文件的示例:
header: seq: 0stamp: secs: 0nsecs: 0frame_id: short_cameraheight: 1080width: 1920distortion_model: plumb_bobD: [-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: 0binning_y: 0roi: x_offset: 0y_offset: 0height: 0width: 0do_rectify: False
初始化外参文件
这些工具要求用户提供初始外参值作为参考。
以下是Camera-to-LiDAR的初始外参文件的示例,其中,translation
是相机和LiDAR之间的位移距离;rotation
是旋转矩阵的四元数表达形式。
header:seq: 0stamp:secs: 0nsecs: 0frame_id: velodyne64child_frame_id: short_cameratransform:rotation:y: 0.5x: -0.5w: 0.5z: -0.5translation:x: 0.0y: 1.5z: 2.0
注意:Camera-to-LiDAR标定更依赖于初始外参值。大的偏差会导致标定失败。因此,在条件允许的情况下,必须提供最准确的初始外参值。
标定场景
由于Camera-to-LiDAR标定方法用于自然环境,因此良好的地点可以显着提高标定的准确性。
建议选择包含树木,电线杆,路灯,交通标志,静止物体和清晰交通线等物体的标定场地。
图1是标定地点的一个很好的选择示例:
必要的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则不满足。