技术文档 | Apollo传感器标定指南
自动驾驶传感器标定(Calibration),是指利用传感器采集的数据计算各传感器的内参数(Intrinsic Parameters),以及多个传感器之间外参数(Extrinsic Parameters)的过程。
传感器内外参的标定是各类多传感器信息融合算法的第一步。
在自动驾驶领域中,多线激光雷达与组合惯导是高精地图制作、激光点云定位以及点云物体检测任务中常用的传感器配置。
因此精确标定两者之间的外参数具有非常重要的意义。
Apollo提供云端的跨平台标定服务,使开发者无需在本地或车端配置运行标定程序,大大提升了进行跨平台标定的灵活性,最大程度地为开发者降低开发门槛。
本指南将介绍Apollo传感器标定服务和三种标定工具:
Camera-to-Camera Calibration(相机到相机的标定)
Camera-to-LiDAR Calibration(相机到激光雷达的标定)
Radar-to-Camera Calibration(雷达到相机的标定)
IMU到汽车的标定
本指南提供以下信息:
概述
预先准备工作
使用标定工具
获取标定结果
验证方法和结果
Apollo中,新的标定工具
(Camera-to-Camera Calibration,
Camera-to-LiDAR Calibration,
and Radar-to-Camera Calibration)
将以板载可执行程序的方式提供。
关于LiDAR-GNSS 标定,
请参考LiDAR-IMU calibration guide。
Velodyne HDL-64 的用户仍可使用Apollo中的标定服务。
使用这些标定工具可以极大的减少用户的工作量。用户只需要启动相应的标定程序,即可快速的完成标定任务。此外,用户还可对以.yaml
文件格式保存的标定结果进行验证。
下载标定工具并提取文件到以下目录
$APOLLO_HOME/modules/calibration
。
其中,APOLLO_HOME是Apollo仓库的根目录所在位置。
相机内参包括焦距、主点、失真系数以及其他信息。
用户可以从诸如
ROS Camera Calibration Tools 和
Camera Calibration Toolbox for Matlab
的相机标定工具中获取这些内参。
标定完成之后,用户需要手动将标定结果转换为一个yaml
格式的文件。并保证参数K
和D
的正确性。其中:
K
表示相机矩阵
D
表示失真参数
下面是一段关于相机内参的样例文件:
我们建议您对每一个相机进行单独内参标定而不是对所有的相机采用统一的内参。
如果您按照该指南进行标定,可以有效提高外部标定的结果。
这些标定工具需要用户提供一个初始外参作为参考。
下面是Camera-to-LiDAR标定使用到的外部参数文件的一个样例。
文件中translation
表示相机到激光雷达的平移矩阵,rotation
是采用四元组方法表示的旋转矩阵。
注意:
Camera-to-LiDAR 标定成功与否和初始外参息息相关。
较大偏离的外参值很可能导致标定失败。因此,在条件允许下,提供最精确的初始外参就显得十分重要。
因为Camera-to-LiDAR标定方法通常在自然环境中使用,一个好的地方能够极大的提高标定结果的精度。
我们建议您选择一个包含诸如树、电线杆、路灯、交通标志、静止参照物以及清晰交通标志线等物体的标定场地。
图1 给出了一个好的标定场地的示意图。
图 1. 好的标定场地
用户必须确认程序所需的所有传感器主题均有输出信息。
表1、表2和表3分别列出了不同标定板载程序所需的传感器主题。
表1 Camera-to-Camera标定所需的传感器主题
表2.Camera-to-LiDAR 标定所需的传感器主题
表3. Radar-to-Camera 标定所需的传感器主题
本节将介绍如何使用三种标定工具,
主要包括以下信息:
运行每种工具的命令
数据收集指南
配置文件的位置
输出数据的类型
在使用工具之前,您必须确认定位状态为56,否则标定工具(程序)将无法收集数据。
可以通过在命令行窗口运行如下命令来检查定位状态:
rostopic echo /apollo/sensor/gnss/ins_stat
Camera-to-Camera 标定工具
1.执行以下命令以运行Camera-to-Camera 标定工具:
cd /apollo/scriptsbash sensor_calibration.sh camera_camera
2.根据以下指南收集数据:
由于两个相机具有不同的时间戳,不可能做到完全同步,因此在记录数据时保持汽车缓慢行驶就显得尤为重要。极其缓慢的车速可以有效减轻不同时间戳引起的图像不匹配问题所带来的影响。
请确保两个相机所拍摄的图像之间有很大的重合区域,否则标定工具将无法执行外参标定操作。
3.配置文件所在的位置如下:
/apollo/modules/calibration/camera_camera_calibrator/camera_camera_calibrtor.conf表 4. Camera-to-Camera 标定配置文件说明
4.Camera-to-Camera 标定工具的输出类型如下:
标定之后的外部文件将以.yaml文件形式保存。
验证的图像:
一张长焦相机图像
一张广角相机图像
由一张非失真广角图片和一种非失真长焦图片合成的图片
Camera-to-LiDAR 标定
1.执行以下命令以运行Camera-to-LiDAR 标定工具:
cd /apollo/scriptsbash sensor_calibration.sh lidar_camera
2.参照以下准则收集数据:
由于两个相机具有不同的时间戳,不可能做到完全同步,因此在记录数据时保持汽车缓慢行驶就显得尤为重要。极其缓慢的车速可以有效降低不同时间戳引起的图像不匹配问题所带来的影响。
请确保相机图像中有一定数量 (超过 500个) 的投影点,否则标定工具将无法执行外参标定操作。正是基于这一原因,该标定工具只适用于广角相机。
3.配置文件放置在以下位置:
/apollo/modules/calibration/lidar_camera_calibrator/camera_camera_calibrtor.conf
表 5. Camera-to-LiDAR 标定配置文件说明
4.Camera-to-LiDAR 标定工具的输出类型如下:
标定结果将以
.yaml
格式文件保存两张从LiDAR点云投影到相机的验证图像:
一张是根据深度信息着色的图像
一张是根据密度信息着色的图像
Radar-to-Camera 标定
1.执行以下命令以运行Radar-to-Camera 标定工具:
cd /apollo/scriptsbash sensor_calibration.sh radar_camera
2.根据以下准则收集数据:
请将车辆进行低速直线行驶,标定程序仅会在该条件下开始采集数据。
3.配置文件所在的位置如下:
/apollo/modules/calibration/radar_camera_calibrator/conf/radar_camera_calibrtor.conf表6 给出了Radar-to-Camera标定的配置文件中各要素的简要说明。
表6. Radar-to-Camera 标定配置文件说明
4.Radar-to-Camera 标定工具的输出内容如下:
标定结果将以
.yaml
格式的文件保存。一个包含Radar-to-LiDAR 投影结果的验证图像。
您需要运行radar_lidar_visualizer工具来产生该图像。
更多详细信息,请参考
[Radar LiDAR Visualizer Projection Tool](####Radar LiDAR Visualizer Projection Tool) 。
IMU-to-Vehicle 标定
1.下载标定工具。
2.在标定之前启动汽车并保持行驶,汽车需要以 3m/s的速度行驶执行至少10s。用户无需提供内参和初始化外参。
3.需要的主题:
INS/apollo/sensors/gnss/odemetry
100Hz
4.使用如下命令执行IMU-to-Vehicle标定工具
cd /apollobash scripts/sensor_calibration.sh imu_vehicle
5.结果将保存在当前目录下的
vehicle_imu_extrinsics.yaml
文件中。标定结果的示例如下所示:
(可选项)运行所有的标定工具
如有必要,用户可以通过以下命令运行所有的标定工具:
cd /apollobash scripts/sensor_calibration.sh imu_vehicle
所有的标定结果都将以 yaml
文件的形式保存在配置文件中指明的 output
路径所在位置。
另外,根据传感器的不同,标定结果将被保存在 yaml
目录的不同文件夹下,具体如表7所示:
表 7. 各个传感器对应的标定结果存放位置
标定结束之后,对应的标定结果验证图像将保存在[output]/validation
目录下。本节将介绍相关背景信息以及针对各种标定工具进行评估验证图像的方法。
Camera-to-Camera 标定
背景信息: 在合成图像中,绿色通道是由广角相机图像产生的,而红色和黄色通道数据则是由长焦相机图像生成的。用户可以通过比较合成图像的对齐结果来验证标定的外参的精度。
验证方法:在合成图像的融合区域,判断距离汽车50米开外的对齐情况。如果图像完全重合,则表示外参标定结果符合要求。如果出现粉色或者绿色的阴影(位移),则说明外部参数错误。
当错误超过一定的范围(例如,20个像素,根据实际使用情况决定),需要重新标定外部参数。通常情况下,由于视差的原因,在靠近物体的水平方向上可能会发生错位的现象,而在垂直方向上则不受影响。这种情况是正常的。
例子: 如下面所示 图2 表示满足外部参数精度要求的情况,而图3 则不符合要求。
图 2. 针对Camera-to-Camera 标定的较好的结果
图 3.Camera-to-Camera 标定的错误结果
Camera-to-LiDAR 标定
背景信息: 在点云投影图像中,用户可以看到具有明显边缘的目标物体和标志,并对对齐情况进行比较。
验证方法:如果目标在50米以内 , 其点云边缘与图像边缘重合 , 则说明标定结果的精度比较高。反之,如果出现错位的情况,则说明标定结果错误。当标定结果错误值超过特定范围时 , 将无法获得外部参数(例如,5个像素,具体取决于实际使用情况)。
例子: 如下所示, 图 4 表示标定结果满足外部参数的精度要求的情况,而图5 则表示不满足的情况。
图 4. 较好的Camera-to-LiDAR 标定结果
Figure 5. 较差的Camera-to-LiDAR 标定结果
Radar-to-Camera 标定
背景信息: 使用系统中的激光雷达(LiDAR)作为中介物进行外部参数验证,这种方法可以获得以下结果:
通过雷达相对于相机的外参获得雷达相对于LiDAR的外参
相机相对于LiDAR的外参
验证方法:全景融合图中雷达数据和LiDAR数据的对齐情况代表了外参的精确度。
如果大部分的目标重合,表示外参精度满足要求。
反之,如果超过40%的目标(尤其是车辆)没有对齐,表示外参无法满足要求,需要重新标定。
例子:如下所示,图6表示标定结果满足外参的精度要求,而图7则表示不满足的情况。
你可以绘制一张在LiDAR坐标系下融合雷达数据和LiDAR数据的全景图。根据全景融合图中雷达数据和LiDAR数据的对齐情况来判断外参的精度。
在融合图中,所有白色的小点代表LiDAR点云,而大的绿色实心圆表示雷达目标。
图 6. 好的相机到雷达标定结果
图 7. 糟糕的 Camera-to-Radar 标定结果
雷达 LiDAR 可视化投影工具
为了获得雷达数据和LiDAR点云的融合图像,
标定程序可以自动(如果使用
bash sensor_calibration.sh all命令)
或手动 (如果使用
bash sensor_calibration.sh visualizer命令)
调用另一个投影程序,
即radar_lidar_visualizer。
该投影程序将加载
Radar-to-Camera 和 Camera-to-LiDAR标定的外参。
十分重要: 在启动投影程序之前,
请确保将要加载的两组外部参数均已经标定好
并且相应的文件已放在配置文件中
radar_camera_extrinsics_filename 和
camera_lidar_extrinsics_filename
参数所指的位置。
1.使用以下命令运行
radar_lidar_visualizer
程序:
cd /apollo/scripts
bash sensor_calibration.sh visualizer
2. radar_lidar_visualizer
的配置文件存放在以下位置:
/apollo/modules/calibration/radar_lidar_visualizer/conf/radar_lidar_visualizer.conf
表8 列出了投影程序配置文件包含的配置项及其简要说明:
表8.Radar-to-LiDAR投影工具配置说明
验证图像保存在如下位置:[output]/validation
更多详细信息请参考https://github.com/ApolloAuto:
*《How to Check the Sensor Output?》
https://github.com/ApolloAuto/apollo/blob/master/docs/FAQs/Calibration_FAQs.md
关于LiDAR-GNSS 标定,请参考:
*《LiDAR-IMU calibration guide》
https://github.com/ApolloAuto/apollo/blob/master/docs/specs/apollo_lidar_imu_calibration_guide.md
点击阅读原文,了解更多
◤