技术文档 | Multiple-LiDAR GNSS的标定指南
自动驾驶传感器标定是指利用传感器采集的数据计算各传感器的内参以及多个传感器之间的外参的过程。传感器内外参的标定是各类多传感器信息融合算法的第一步。
在自动驾驶领域中,多线激光雷达与组合惯导是高精地图制作、激光点云定位以及点云物体检测任务中常用的传感器配置。因此精确标定两者之间的外参数具有非常重要的意义。
Apollo提供云端的跨平台标定服务,使开发者无需在本地或车端配置运行标定程序,大大提升了进行跨平台标定的灵活性,最大程度地为开发者降低开发门槛。
在制图方案上,Apollo采取的是激光雷达和Camera二者相结合的方案来进行信息采集。
该方案基础传感器配置有:平装64线激光雷达和16线激光雷达。
64线激光雷达用于道路路面采集。斜向上装的16线激光雷达,用于检测较高处的红绿灯、标牌等信息。
虽然激光雷达和相机都有自己特有的优势,然而它们也各有缺点和不足,现在主流的感知算法都向传感器融合方法靠拢,这就涉及到不同传感器之间的标定问题。
下面,就跟随阿波君的脚步,一起来看看Multiple-LiDAR GNSS的标定吧!
注意:只能支持到Apollo 3.0,暂时还不支持Apollo 3.5。
以下,ENJOY
在诸如HDMap(高精地图)制作的许多自动驾驶任务中,来自多个激光雷达的扫描需要在统一的坐标系中注册。
在这种情况下,需要仔细标定多个激光雷达的外参。本指南介绍的Multiple-LiDAR GNSS标定工具就是用来解决这个问题的。
下载标定工具,并将文件解压到
$APOLLO_HOME/modules/calibration
其中,APOLLO_HOME是Apollo存储库的根目录。
根据Apollo 1.5中提供的标定指南选择标定场地。
确保GNSS状态良好。
请使用
rostopic echo/apollo/sensor/gnss/best_pose命令查验GNSS的状态,并检查关键字latitude_std_dev,longitude_std_dev和height_std_dev之后的数字。 偏差越小,标定质量越好。
***我们强烈建议在偏差小于0.02时标定传感器。***
当LiDAR和GNSS准备就绪时,使用
1/apollo/modules/calibration/multi_lidar_gnss/record.sh
命令记录标定数据。
请注意,此脚本仅用于记录Velodyne HDL64和VLP16。
出于其他目的时,需要对此脚本进行一些修改,或者只使用Rosbag记录来执行相同的操作。
通常,2分钟时长的数据即可满足要求。捕获数据后,运行脚本
1/apollo/modules/calibration/multi_lidar_gnss/calibrate.sh
即可标定传感器。
该脚本由以下两个步骤组成:
记录标定数据之后,可以使用
1/apollo/modules/calibration/exporter/export_msgs --config /apollo/modules/calibration/exporter/conf/export_config.yaml
脚本来获取传感器数据。
该导出命令的唯一输入是YAML格式的配置文件,如下所示:
1bag_path: "/apollo/data/bag/calibration/" # The path where the calibration bag is placed.
2dump_dir: "/apollo/data/bag/calibration/export/" # The path where the sensor data will be placed using exporter
3topics:
4 - /apollo/sensor/gnss/odometry: # Odometry topic name
5 type: ApolloOdometry # Odometry type
6 - /apollo/sensor/velodyne16/PointCloud2: # vlp16 topic name
7 type: PointCloud2 # vlp16 type
8 - /apollo/sensor/velodyne64/PointCloud2: # hdl64 topic name
9 type: PointCloud2 # hdl64 type
如果新主题按照以下规则添加到文件, 则还可以导出PointCloud2类型的其他主题:
1- TOPIC_NAME: # topic name
2type: PointCloud2
目前,我们只支持ApolloOdometry和PointCloud2两种类型。
所有传感器数据导出之后,运行
1/apollo/modules/calibration/lidar_gnss_calibrator/multi_lidar_gnss_calibrator --config /apollo/modules/calibration/lidar_gnss_calibrator/conf/multi_lidar_gnss_calibrator_config.yaml
命令即可获得结果。该工具的输入是YAML格式的配置文件,其格式如下所示:
1# multi-LiDAR-GNSS calibration configurations
2data:
3 odometry: "/apollo/data/bag/calibration/export/multi_lidar_gnss/_apollo_sensor_gnss_odometry/odometry"
4 lidars:
5 - velodyne16:
6 path: "/apollo/data/bag/calibration/export/multi_lidar_gnss/_apollo_sensor_velodyne16_PointCloud2/"
7 - velodyne64:
8 path: "/apollo/data/bag/calibration/export/multi_lidar_gnss/_apollo_sensor_velodyne64_PointCloud2/"
9 result: "/apollo/data/bag/calibration/export/multi_lidar_gnss/result/"
10calibration:
11 init_extrinsics:
12 velodyne16:
13 translation:
14 x: 0.0
15 y: 1.77
16 z: 1.1
17 rotation:
18 x: 0.183014
19 y: -0.183014
20 z: 0.683008
21 w: 0.683008
22 velodyne64:
23 translation:
24 x: 0.0
25 y: 1.57
26 z: 1.3
27 rotation:
28 x: 0.0
29 y: 0.0
30 z: 0.707
31 w: 0.707
32 steps:
33 - source_lidars: ["velodyne64"]
34 target_lidars: ["velodyne64"]
35 lidar_type: "multiple"
36 fix_target_lidars: false
37 fix_z: true
38 iteration: 3
39 - source_lidars: ["velodyne16"]
40 target_lidars: ["velodyne16"]
41 lidar_type: "multiple"
42 fix_target_lidars: false
43 fix_z: true
44 iteration: 3
45 - source_lidars: ["velodyne16"]
46 target_lidars: ["velodyne64"]
47 lidar_type: "multiple"
48 fix_target_lidars: true
49 fix_z: false
50 iteration: 3
配置文件中Data部分告知标定工具到哪里获取Point clouds和Odometry文件,以及保存结果的位置。 请注意,LiDAR节点中的关键字将被识别为LiDAR的帧的ID号。
配置文件中Calibration部分提供了外参的初始值。
所有外参都是从LiDAR到GNSS,也就是说该转换是将LiDAR坐标系中定义的点的坐标映射到GNSS坐标系中定义的对应点的坐标。
初始值要求旋转角度误差小于5度,并且平移误差小于0.1米。
配置文件中steps部分详述了标定程序。每个步骤的定义如下,注释部分则是对该部分的详细解释。
1- source_lidars: ["velodyne16"] # Source LiDAR in point cloud registration.
2 target_lidars: ["velodyne64"] # Target LiDAR in point cloud registration.
3 lidar_type: "multiple" # "multiple" for multi-beam LiDAR, otherwise "single"
4 fix_target_lidars: true # Whether to fix extrinsics of target LiDARS. Only "true" when align different LiDARs.
5 fix_z: false # Whether to fix the z component of translation. Only "false" when align different LiDARs.
6 iteration: 3 # Iteration number
标定工具将结果保存到rusult代表的位置,如下所示:
1.
2└── calib_result
3 ├── velodyne16_novatel_extrinsics.yaml
4 ├── velodyne16_result.pcd
5 ├── velodyne16_result_rgb.pcd
6 ├── velodyne64_novatel_extrinsics.yaml
7 ├── velodyne64_result.pcd
8 └── velodyne64_result_rgb.pcd
两个YAML文件是外参。 如果要要验证结果,请使用
pcl_viewer * _result.pcd检查注册质量。
如果传感器标定良好,在点云(Point cloud)中可以识别出大量细节。 有关详细信息,请参阅Apollo 1.5中的标定指南。