【Apollo】Apollo的摄像头感知的部分代码详解

坐标系

自动驾驶中有三大坐标系,分别是世界坐标系,车体坐标系和各个传感器坐标系。
车体坐标系用来描述车辆周围的物体和本车之间的相对位置关系。有几种车体坐标系定义方式,ISO国际定义标准,SAE定义,IMU定义。
相机坐标系:摄像机的焦距f,像素尺寸sx,sy,图像中成像中心的位置cx,cy都被称为相机的内部参数,简称内参。在自动驾驶中,内参为常数,但是要提前做好标定工作。
如果需要获得物体在世界坐标系中的位置,还需要得到摄像机在世界坐标系中的位姿,这个位姿是摄像机的外部参数,简称外参。

2d到3d的transform

transform转换的文件的位置位于modules/perception/camera/lib/obstacle/transformer/multicue/multicue_obstacle_transformer.cc中。
(1)bool MultiCueObstacleTransformer::Transform
转换的重点文件,对于检测模块检测到的object进行操作:SetObjMapperOptions,mapper_->Solve3dBbox和FillResults。
(2)void MultiCueObstacleTransformer::SetObjMapperOptions
得到rotation_y等。其实就是得到obj_mapper_options的诸多参数值。
(3)mapper_->Solve3dBbox
基于前面得到的obj_mapper_options的诸多参数值,进一步计算得到orientation_variance_和position_uncertainty_等。
(4)void MultiCueObstacleTransformer::FillResults
对于object物体的中心坐标,尺寸等等参数值进行更新设置。
multicue_obstacle_transformer.cc其实就是对于frame->detected_objects也就是前面检测到的所有的object进行操作,更新得到所有的object的center中心坐标,size尺寸大小,direction朝向,theta角度等。 这里得到的这些关于object的参数值后面模块是需要用到的。

calibration

calibration(标定)文件的位置位于modules/perception/camera/lib/calibration_service/online_calibration_service/online_calibration_service.cc
(1)bool OnlineCalibrationService::Init
初始化得到calibrator_init_options的一些值,cx,cy是图像中成像中心的位置,image_width和image_height是图像尺寸,focal_x和focal_y是焦距。其实就是初始化得到相机的诸多内参参数。
(2)void OnlineCalibrationService::SetCameraHeightAndPitch
得到另外的一些参数,pitch_angle偏向角,camera_ground_height相机的地面高度和ground_plane真实地面值。pitch_angle是要在主传感器的pitch_angle的基础上加上一些偏置值iter_pitch_angle_diff,相当于是在主传感器基础上进行一些偏置。ground_plane是真实地面值。camera这里的主传感器就是front_6mm吧
(3)void OnlineCalibrationService::Update
上面两个函数一个是初始化,另一个是设置三个值,都是在标定之前的一些值的初始化操作。这个函数是对于上面初始化的值进行更新。主要是更新pitch_angle和ground_plane。这里需要用到camera2world_pose也就是camera坐标系到世界坐标系的转换矩阵。
online_calibration_service.cc其实是更新得到camera的内参以及一部分外参值。

写在后面

后处理以及追踪部分之后再更新。。

猜你喜欢

转载自blog.csdn.net/qq_38391210/article/details/107456934