Apollo详解之标定模块———传感器设备标定

前言

车上有各种各样的传感器,它们之间存在一种静态的坐标变换关系,此变换关系对于其他模块是十分重要的。往往通过手动测量无法达到需要的精度,因此要通过一系列的标定工作,找到精确的变换关系,满足其他模块的需要。

激光雷达外参标定

激光雷达的外参标定是指激光雷达到组合导航之间外参的标定。
激光雷达外参标定可参考:
基于激光雷达的封闭园区自动驾驶搭建–感知设备标定
Apollo LiDAR - IMU Calibration Service
完成标定任务后,可以获得velodyne16_novatel_extrinsics.yaml外参文件中对应的rotationtranslation值。

补充

初始化外参文件

当数据采集完成,需要进行预处理时,激光雷达的初始化外参配置可以在modules/dreamview/conf/lidar_to_gnss_preprocess_table.pb.txt文件中根据车辆实际进行修改,其具体定义在modules/dreamview/proto/preprocess_table.proto

预处理

点击预处理按钮,执行的是scripts/extract_data.sh脚本,该脚本会读取录制文件的信息,根据其中激光雷达的话题,创建预处理配置文件,该配置文件的定义可参考modules/tools/sensor_calibration/proto/extractor_config.proto,然后会根据该配置文件,通过modules/tools/sensor_calibration/extract_data.py脚本进行预处理。
1.方案一。直接根据官方文档在Dreamview中进行预处理
2.方案二。运行scripts/extract_data.sh,指定任务名称和数据包,自动生成配置文件,然后进行预处理,具体方法:

bash modules/tools/sensor_calibration/extract_data.sh -t lidar_to_gnss \
-f /apollo/data/bag/lidar_cali_test.record.00000 \
-f /apollo/data/bag/lidar_cali_test.record.00001 \
-f /apollo/data/bag/lidar_cali_test.record.00002 \
-f /apollo/data/bag/lidar_cali_test.record.00003 \
-f /apollo/data/bag/lidar_cali_test.record.00004

-f需要指定所有的数据包
3. 方案三。手动配置配置文件。根据录制文件的路径和其中激光雷达和组合导航具体话题,修改该配置文件,然后通过运行modules/tools/sensor_calibration/extract_data.py脚本,进行预处理,具体方法:

./bazel-bin/modules/tools/sensor_calibration/extract_data --config output/sensor_calibration/lidar_to_gnss/lidar_to_gnss.config

其中config配置文件可根据实际进行修改,模板在docs/Apollo_Fuel/examples/sensor_calibration/lidar_to_gnss/lidar_to_gnss.config
注意:要将录制文件保存在data/bag文件夹当中。
经仿真验证,方案二、方案三是可行的,最终生成了指定的文件夹,其中包含_apollo_localization_pose_apollo_sensor_lidar128_compensator_PointCloud2sample_config.yaml,分别包含了定位信息、激光雷达pcd文件、yaml配置文件

疑问

  1. Dreamview中填写的始化外参参数有什么作用?在scripts/extract_data.sh脚本中并没有发现该配置文件的参与
    答:在基于激光雷达的封闭园区自动驾驶搭建–感知设备标定历史中,发现早些版本是直接在yaml配置文件中修改初始化外参,或许该文件即配置初始化外参的文件,但是Dreamview中如何实现还需要具体确认。
  2. scripts/extract_data.sh中对于话题名称有何具体要求?自己适配的车辆是否兼容该脚本?
    答:要求录制文件中包含原始点云话题,即最终配置文件使用的是原始点云话题,不能使用融合后的点云或运动补偿后的点云话题。对于多激光雷达的车型,配置文件应该包含所有原始激光雷达的话题,因此该脚本兼容性良好
  3. 官方文档针对的是velodyne品牌激光雷达的标定,速腾、禾赛以及其他品牌的激光雷达的外参如何标定?没有找到速腾、禾赛具体的外参配置文件,它们的外参如何配置?
    答:传感器标定工作的目的就是找到各个静态坐标变换之间精确的变换关系,该外参文件本质上是描述的两个坐标系之间的静态变换关系,因此不同品牌的激光雷达只要根据transform模块对外参文件的格式要求,定义好对应的外参YAML文件即可

初步解决方法:
5. 实际标定时,若scripts/extract_data.sh脚本不兼容,可以使用方案二或方案三,但是疑问1中初始化外参如何配置?以及具体应该设置哪个激光雷达话题?
6. 学习脚本以及Dreamview相关的内容,了解初始化外参是如何配置的。

激光雷达内参标定

激光雷达不需要内参标定,不过激光雷达驱动中不同品牌有不同的校准文件,可以在驱动运行过程中,对数据进行在线校准。

摄像头外参标定

摄像头的外参标定是指摄像头到激光雷达之间的外参标定。
摄像头的外参标定可参考:
基于摄像头的封闭园区自动驾驶搭建–感知设备标定
标定结束后,可以得到每个摄像头的两个yaml配置文件,分别代表内参文件和外参文件,位置在modules/calibration/data/车型/camera_params

补充

摄像头外参标定只能一次标定一颗摄像头,多个相机标定需要分多次进行数据采集。采集数据时要严格按照指定的动作控制车辆。
预处理方法与激光雷达外参标定类似,可参考基于摄像头的封闭园区自动驾驶搭建–感知设备标定的历史版本。
注意,实际操作时,若实际激光雷达话题与默认不一致,则会报错,此时要修改output/sensor_calibration/camera_to_lidar/camera_to_lidar.config中激光雷达话题参数,然后在运行extract_data.py脚本即可
初始化外参也需要在生成的yaml文件中修改。
疑问:

  1. Dreamview中是如何实现初始化外参的修改的?
  2. 在每个摄像头都与同一个激光雷达完成标定后,各个摄像头之间是否需要标定?如果需要,如何标定?官方有一篇文档Apollo 2.0 传感器标定方法使用指南说明了摄像头之间的标定方法,但6.0版本没有其中指定的sensor_calibration.sh脚本,该方法是否已被遗弃?
    答:不需要,这样会破坏坐标变换的树型结构

摄像头内参标定

Apollo官方文档推荐了两种开源的相机内参标定工具,分别需要通过ROS和MATLAB完成标定,使用ROS成本相对低一些,参考http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration,可以生成包含相关参数的YAML文件。

你可能感兴趣的:(Apollo)