欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Apollo v5.5视觉感知流程

程序员文章站 2022-03-05 16:20:48
...

以下文件都在/modules/perception/目录下。

mainboard加载/perception/production/dag/dag_streaming_perception_camera.dag ,fusion_camera_detection_component.pb.txt为配置文件,进入/onboard/component/找类名为FusionCameraDetectionComponent的源文件。

Init()初始化参数;

OnReceiveImage(const std::shared_ptr<apollo::drivers::Image> &message, const std::string &camera_name) 接收某个摄像头的图像,然后用InternalProc(message, camera_name, &error_code, prefused_message.get(),out_message.get())处理;

进入Perception(camera_perception_options_, &camera_frame) 函数一帧一帧地对图像做感知,首先是车道线检测,lane_detector_->Detect(lane_detetor_options, frame),接口是/camera/lib/interface/base_lane_detector.h,但是不知道具体实现函数是哪个???

然后跟踪障碍物,tracker_->Predict(tracker_options, frame); OMTObstacleTracker::Predict(.. , ..);

检测障碍物detector->Detect(detector_options, frame); YoloObstacleDetector::Detect(.., ..); Init()加载训练模型和初始化参数,载入图像,resize图像,推理Infer(), get_objects_gpu(....);

输出检测到的信息 visualize_.ShowResult_all_info_single_camera(output_image, camera_frame, motion_buffer_, world2camera);  

Visualizer::Draw2Dand3D_all_info_single_camera(...) 首先显示车道线,colormapline中显示各个车道线表示什么颜色。

然后,通过世界坐标系转相机坐标系,计算目标和自己之间的相对位置,

pos = world2camera * object->center;

计算距离

c_2D_l(0) = pos(2);
c_2D_l(1) = -pos(0);
float distance =
        static_cast<float>(sqrt(c_2D_l(0) * c_2D_l(0) + c_2D_l(1) * c_2D_l(1)));

计算boundingbox的8个点p[0]~p[8];