基于摄像头的封闭园区自动驾驶搭建–感知设备标定

概览

该用户手册旨在帮助用户完成摄像头的标定(Camera-Lidar)

百度云对象存储BOS注册

注册方法参考百度云对象存储BOS注册与基本使用向导

开通云服务账号

请与商务部门联系开通云服务账号,需要提供上一步骤中注册的Bucket名称所属地域和用户邮箱信息

修改配置文件

修改文件名称

修改内容

modules/calibration/data/车型目录/localization_conf/localization.conf

enable_lidar_localization设置为false

注意: 上表中车型目录需要用户根据自身车型确认。lite用户为dev_kit,standard用户为dev_kit_standard,单激光雷达的advanced用户为dev_kit_advanced_ne-s,3激光雷达的advanced用户为dev_kit_advanced_sne-r

sensor_calibration_modify_localization_file

注意:所有传感器标定完成后,如果用户要使用msf定位,则需要再改为true

Camera-Lidar标定初始外参测量和内参标定

各传感器坐标系的定义及初始化外参文件的配置

1. Lidar、Camera的坐标系定义

camera_calibration_coordinate_system

2. Camera坐标系原点在传感器的位置

Camera坐标系原点在下图所示平面的中心点:

camera_calibration_look

3. Lidar坐标系原点在传感器的位置

基于激光雷达的封闭园区自动驾驶搭建–感知设备标定文档

4. 手动测量Camera-Lidar的初始化外参文件

这里默认用户按照感知设备集成文档的要求正确安装了传感器,即传感器坐标系的定义与上文中的定义相同,且安装误差满足文档中的要求。

  • rotation:在传感器的安装满足感知设备集成文档要求的情况下,用户无需测量该值,可直接使用如下的默认值即可

      rotation:
        w: 0.5
        x: -0.5
        y: 0.5
        z: -0.5
    
  • translation:用户需要手动测量以Velodyne16坐标系为基坐标系,以Camera坐标系为目标坐标系的位移变换,一个Velodyne16-Camera的位移变换的示例如下所示:

      translation:
        x: 0.67
        y: -0.1
        z: -0.64
    

传感器内参标定

内参包含相机的焦距、主点和畸变系数等信息,可以通过一些成熟的相机标定工具来获得,例如 ROS Camera Calibration ToolsCamera Calibration Toolbox for Matlab

使用Fuel-Client采集数据

注意:Fuel-Client进行Camera-Lidar标定数据采集时,需要保证只有需要采集标定数据的相机工作,建议先拔掉其他相机的USB插头;多个相机标定需要分多次进行数据采集

1. 选择正确的模式、车型

  • 选择Camera-Lidar Sensor Calibration模式

  • 根据实际情况选择正确的车型(lite用户选择Dev Kit车型,standard用户选择Dev Kit Standard,单雷达的advanced用户选择Dev Kit Standard Ne-s,3雷达的advanced用户选择Dev Kit Standard Sne-r) camera_calibration_select_mode_vehicle.png

2. 启动Fuel Client,并启动相应模块

  • 在dreamview的Tasks标签下,首先打开Sim Control,然后打开Fuel ClientFuel Client打开后务必关闭Sim Control camera_calibration_open_fuel_client

  • 在dreamview的Module Controllers标签下,启动CameraGPSLidarLocalization模块,等待左侧状显示模块中的CameraGPSLidarRTK均为绿色时,代表模块启动成功(Localization启动后,需要等待1~2分钟才能正常输出数据)。 camera_calibration_start_modules.png

3. 启动Recorder模块并开始采集

  • 当左侧左侧状显示模块中的CameraGPSLidarRTK均为绿色时,打开Recorder模块,并开始采集数据。在录制数据的时候,遥控车辆直线慢速行驶行驶,行驶10秒再停止5秒,如此反复5次。

  • 数据采集完成后,关闭Recorder模块停止数据录制

注意:需要光照条件好时进行标定,场地需要是直线道路,路侧两边需要有静态参照物,如建筑物、车辆,避免过多动态障碍物,避免大逆光。

使用Fuel Client进行数据预处理

camera_calibration_preprocess

  • 点击右上角的Configuration进入预处理界面

  • 填入测量的初始化外参

  • 填入内参的DK矩阵参数

  • 点击Preprocess进行预处理

  • 等待预处理完成,提示Data extraction is completed successfully!代表预处理完成

  • 保存生成的预处理文件。切换到apollo/output/sensor_calibration/camera_to_lidar/extracted_data/目录,保存该目录下的camera_to_lidar-xxx文件(xxx为数据包录制的时间),这里和下文以camera_to_lidar-2021-01-12-13-49为例

使用标定云服务生成外参文件

1. 上传预处理后的数据至BOS

注意: 必须使用开通过权限的 bucket,确认Bucket名称所属地域和提交商务注册时的Bucket名称和所属区域保持一致。

camera_to_lidar-2021-01-12-13-49目录上传到BOS的根目录下,作为后续云标定服务读取数据的输入数据路径

2. 提交云标定任务

打开Apollo云服务页面,新建一个任务,如下图所示:

fuel_new_task

点击新建任务后,在下拉框中选择感知标定选项,根据实际情况填写输入输入数据路径,这里以camera_to_lidar-2021-01-12-13-49为例,指定输出数据路径后,点击提交任务(Submit Job)按钮提交。 sensor_calibration_fuel

3. 获取标定结果验证及标定外参文件

云标定任务完成后,将在注册的邮箱中收到一封标定结果邮件。如果标定任务成功,将包含标定外参文件。

Camera-Lidar标定结果验证: BOS中用户指定的输出数据路径下包含了标定结果验证图片。在产生的点云投影图像内,可寻找其中具有明显边缘的物体和标志物,查看其边缘轮廓对齐情况。如果50米以内的目标,点云边缘和图像边缘能够重合,则可以证明标定结果的精度很高。反之,若出现错位现象,则说明标定结果存在误差。当误差大于一定范围时(范围依据实际使用情况而定),该外参不可用。如下图所示,图1为准确外参的点云投影效果,图2为有偏差外参的点云投影效果。

camera_calibration_result_picture1

camera_calibration_result_picture2

Camera-Lidar标定外参文件

确认邮件得到的外参文件合理后,进行如下操作:

  • 对于6mm相机,将标定得到的内参文件重命名为front_6mm_intrinsics.yaml,并替换modules/calibration/data/车型目录/camera_para/目录下的文件,将标定得到的外参文件中的rotationtranslation的值替换掉modules/calibration/data/车型目录/camera_params/front_6mm_extrinsics.yaml中对应的rotationtranslation值注意不要修改frame_id

  • 如标定12mm摄像头,则需要修改modules/calibration/data/车型目录/camera_para目录下front_12mm_intrinsics.yamlfront_12mm_extrinsics.yaml两个文件。

  • 默认使用1个6mm、1个12mm摄像头,用户如需要使用第二个6mm摄像头时,需要自行指定文件名,并进行相应修改。

常见问题

1. 进行Sensor Calibration任务后,邮件显示任务失败

建议检查一下输入路径是否正确

2. 标定结果误差较大

  • 标定时,确保GNSS信号状态良好,周围有轮廓清晰的静态障碍物

  • 保证传感器的安装精度,安装误差超过要求精度时,标定结果不容易收敛