Apollo感知模块:一

        一直有一个想法,想将apollo感知模块的主要代码脱离apollo框架,能够自己修改调试代码,现就当中的一些经验心得与大家一起分享,包括摄像头、毫米波雷达以及激光雷达的目标检测、跟踪以及多传感器融合等,先从摄像头感知模块来说起,说的不对之处敬请指正。

        apollo摄像头部分主要使用了yolo3d深度学习模型,这个模型的介绍网上也有讨论,后续会讲yolo3d这一部分,也是在自我摸索中,争取还原apollo的yolo3d模型,先不对比检测效果,基本先是将yolo3d框架完成,然后进行模型训练。这个网络架构是基于caffe框架下改写,网络模型在docker环境中可以获取,也就是在modules/perception/model/yolo_camera_detector/yolo3d_1128文件夹下用到的模型,caffe框架apollo只提供了编译好的动态链接库,没有提供源代码,所有这部分网络模型没有办法自己处理,所以我就暂时用了tensorflow yolov3模型代替,有了自己的网络模型改动起来也方便,后续会完成tensorflow版本的yolo3d的工作。

       首先我们要对这部分架构有一个基本的了解,apollo的基本架构是每个传感器为一个subnode,在每个subnode里面,Apollo对其数据也做了一定的预处理,这里我们以camera为例: 

//-- yolo
detector_->Multitask(img, CameraDetectorOptions(), &objects, &mask);

//-- obj 2d -> 3d
converter_->Convert(&objects);

//-- 根据外参将obj从相机坐标系转换到车辆坐标系
transformer_->Transform(&objects);

tracker_->Associate(img, timestamp, &objects);

//-- 使用kalman进行跟踪
filter_->Filter(timestamp, &objects);

         detector_部分我直接先用yolov3的结果代替,2d->3d,因为目前只考虑2d信息,所以这块代码可以先不考虑,如何后续yolo3d工作完成这块代码可以加上,因为只是单纯的测试,所以不考虑坐标系转换,所以transformer_也可以暂时不看,如果后续在车上调试这部分可以加上,那么就只剩下跟踪和kalman滤波这两部分代码了,是不是就变得相对容易了,这里主要我们要了解apollo感知object的数据结构,这部分是关键,因为我们要把yolov3或者yolo3d输出的东西嫁接到这个数据结构上。

       后续也会对apollo相关代码进行注释  https://gitlab.com/dingjiangang/apollo

     

猜你喜欢

转载自blog.csdn.net/weixin_41015185/article/details/82492235