2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Apollo星火计划学习笔记——第六讲下(Apollo自动驾驶-感知基础II)

Apollo星火计划学习笔记——第六讲下(Apollo自动驾驶-感知基础II)

时间:2023-12-10 11:32:39

相关推荐

Apollo星火计划学习笔记——第六讲下(Apollo自动驾驶-感知基础II)

文章目录

前言1. Apollo感知框架介绍1.1 Apollo感知模块概述1.2 飞桨PaddlePaddle1.3 跟踪1.4 Apollo感知框架2. Lidar障碍物检测2.1 Detection Component2.1.1 BUILD文件目录2.1.2 工厂模式2.1.3 CNN2.1.4 Pointpillars2.2 Recognition Component2.2.1 Lidar Tracker2.2.2 匈牙利算法2.2.3 障碍物之间的关系2.2.4 Lidar Tracker代码结构2.2.5 Tracker 更新运动状态2.3 Fusion Component2.3.1 ObstacleMultiSensorFusion2.3.1 D-S证据理论3. 红绿灯识别3.1 Camera感知模块3.2 红绿灯识别流程4. 模块的启动方法和基础配置4.1 模块启动4.2 Dreamview启动4.3 Dreamview选择车型和地图4.4 播放数据4.5 Lidar 感知模块启动4.6 Traffic Light模块启动实践文档

前言

Apollo星火计划课程链接如下

星火计划2.0基础课:/community/online-course/2

星火计划2.0专项课:/community/online-course/12

1. Apollo感知框架介绍

1.1 Apollo感知模块概述

    感知模块结合了使用多个摄像头、雷达(前后)和激光雷达来识别障碍物并融合它们各自的轨迹以获得最终轨迹列表的能力。

    障碍物子模块对障碍物进行检测分类跟踪。障碍物子模块包含相机模块,lidar模块,radar模块。该子模块还预测障碍物运动和位置信息(例如,航向和速度)。

1.2 飞桨PaddlePaddle

自动驾驶实战:基于Paddle3D的点云障碍物检测

PaddleSeg实现自动驾驶语义分割

助力自动驾驶:行车检测和车道线分割

1.3 跟踪

    单帧检测结果具备类型、位置、航向等信息,但是无法准确预测物体的未来运动。Tracking(追踪)的目的,对于物体未来的状态进行预测。包含航向、速度、位置。

1.4 Apollo感知框架

感知模块的代码结构

    camera目录,里面是相机检测相关的代码,主要实现了obstacle检测,红绿灯识别,车道线检测等功能。

    lidar目录,这里存放着lidar相关的算法,主要实现了lidar检测,和lidar tracking两个功能。

    radar目录下实现了radar检测的功能。

    fusion目录下实现了 多传感器障碍物融合的功能,会将lidar, camera, radar检测到的障碍物融合输出。

    onboard目录下存储着component,各个component负责 检测, 跟踪,融合,红绿灯识别等功能,通过调用各个传感器的app(application)实现。

    production目录下面,存放着dag和launch,用来启动感知模块或者其中部分功能的子模块。也包含着配置文件,如图是64线激光雷达的配置包含了实例化detector类的名称,传感器名称,输出channel等配置信息,方便修改。

.dag文件启动

mainboard -d 路径/***.dag

    lidar各个module的配置文件,比如lidar obstacle pipeline的配置,包含detection和tacking两个部分,value存放的位置。    modules配置的具体内容,value存放在data目录下,比如像64线激光雷达的 lidar obstacle pipeline的配置,包含了点云预处理模块,采用了pointillars detector, 打开了map manager和object filter。

下面是以上文件的具体路径:

componet:/apollo/modules/perception/onboard/componentvelodyne64_detection_conf.pb.txt/apollo/modules/perception/production/conf/perception/lidar/velodyne64_detection_conf.pb.txtlidar_obstacle_pipeline.config/apollo/modules/perception/production/conf/perception/lidar/modules/lidar_obstacle_pipeline.configlidar_obstacle_detection.conf/apollo/modules/perception/production/data/perception/lidar/models/lidar_obstacle_pipeline/velodyne64/lidar_obstacle_detection.conf

2. Lidar障碍物检测

/apollo/modules/perception/production/dag/dag_streaming_perception_lidar.dag

从dag文件中,我们整理出实现lidar检测的流程。

Lidar Dag:DetectionComponent

RecognitionComponent

FusionComponent

2.1 Detection Component

2.1.1 BUILD文件目录

/apollo/modules/perception/onboard/component/BUILD

    通过BUILD文件来弄清楚文件的编译规则和target的依赖。Bazel 是一款类似于 Make的开源 构建和测试工具。apollo使用bazel来构建项目。bazel通过解析我们制定的编译规则,自动配置依赖环境,调用编译器,完成项目构建。编译规则就在BUILD文件中。

detection流程

2.1.2 工厂模式

    方便在后期扩展功能,探索不同的算法类来实现相同的功能,方便升级。

    在使用中,通过改变配置文件来动态地使用不同的算法类

2.1.3 CNN

得到3通道图片的feature map

2.1.4 Pointpillars

体素化点云,得到一张伪图片

    按照点云数据所在的X,Y轴(不考虑Z轴)将点云数据划分为一个个的网格,凡是落入到一个网格的点云数据被视为其处在一个pillar里,或者理解为它们构成了Pillar。

    每个voxel用一个D=9维的向量表示,代表有9个通道,分别为 (x,y,z,r,xc,yc,zc,xp,yp)——位置、强度、重心、偏差。

    从图中可以看出,该2D CNN采用了两个网络。其中一个网络不断缩小特征图的分辨率,同时提升特征图的维度,因此获得了三个不同分辨率的特征图。

    另一个网络对三个特征图进行上采样至相同大小,然后进行串联。

    之所以选择这样架构,是因为不同分辨率的特征图负责不同大小物体的检测。比如分辨率大的特征图往往感受野较小,适合捕捉小物体。detection head实现分类和定位。

    网络从功能编码器开始,这是一个简化的PointNet。它包含一系列卷积、批处理范数和 relu 层,后跟一个最大池化层。末端的散射层使用柱形索引将提取的要素映射到 2-D 空间中。

网络在每个解码器块的末端连接输出特征,并通过具有卷积层和    sigmoid层的六个检测头传递这些特征,以预测占用率、位置、大小、角度、航向和类。

2.2 Recognition Component

代码位置:

/apollo/modules/perception/lidar/app/

2.2.1 Lidar Tracker

    匹配时,考虑障碍物的大小、形状以及行驶方向(Heading),最后添加到追踪列表。

    目标跟踪的主要目的是:根据运动目标相关的特征值,将障碍物序列中连续帧的同一运动目标关联起,得到每帧数据中目标的运动参数以及相邻帧间目标的对应关系,从而得到障碍物完整的运动轨迹

2.2.2 匈牙利算法

匈牙利算法:

/apollo/modules/perception/common/graph/gated_hungarian_bigraph_matcher.h

推荐博客:

/qq_41730082/article/details/104077616

前一帧与当前帧有图示对应关系

首先将1与a进行匹配

再将2与b进行匹配

再对3进行匹配,但已经没有空了。撤销2与b的匹配,将2与c进行匹配

此时b就空出来了,将1与b进行匹配。最后将3与a进行匹配

现在,1、2、3都有匹配的对象。d代表着新出现的障碍物。4代表当前帧已经消失的障碍物。

2.2.3 障碍物之间的关系

文件位置

/apollo/modules/perception/lidar/lib/tracker/association/distance_collection.h

    由这些特征LocationDistance、DirectionDistance、BboxSizeDistance、PointNumDistance、HistogramDistance、CentroidShiftDistance、BboxIouDistance、SemanticMapDistance以及下图所示的特征,可以计算出特征值。

前后帧的距离、headiing方位角、形状与大小

文件位置

/apollo/modules/perception/lidar/lib/tracker/multi_lidar_fusion/mlf_track_object_distance.h

    计算出特征值之后,再由上图代码计算出两帧之间的对应关系,最后利用匈牙利算法进行匹配。

2.2.4 Lidar Tracker代码结构

    Tracker模块主要由MlfEngine实现。MlfEngine分为数据匹配模块与状态更新模块。

    数据匹配模块即匈牙利匹配,首先由distance_collection计算出距离,然后传到MlfTrackerObjectDistance计算出相应的权重,最后送到MlfTrackerObjectMatcher进行匈牙利匹配(二分图匹配)。其中,GnnBipartiteGraphMatcher负责前景匹配,MultiHmBipartiteGraphMatcher负责后景匹配。

    得到正确的障碍物匹配之后,需要由MlfTracker状态更新模块进行更新。MlfTracker分为两个模块,形状更新模块(MlfShapeFilter)与运动更新模块(MlfMotionFilter)。同样的,首先收集器运动速度信息,再进行计算,最后refine。

2.2.5 Tracker 更新运动状态

卡尔曼滤波

参考博客——详解卡尔曼滤波原理

2.3 Fusion Component

2.3.1 ObstacleMultiSensorFusion

上一节课已经介绍过

单一的传感器都是有缺陷的

对不同传感器检测到的障碍物信息进行关联与融合

ObstacleMultiSensorFusion流程

Fusion Component流程

2.3.1 D-S证据理论

推荐博客:/qq_36512295/article/details/89448583

推荐课程:

3. 红绿灯识别

3.1 Camera感知模块

3.2 红绿灯识别流程

4. 模块的启动方法和基础配置

4.1 模块启动

代码位置:/apollo/modules/perception/production

mainboard -d /…/**.dag

或者可以用launch文件启动,两者是对应的。

launch start /…/**.launch

4.2 Dreamview启动

代码目录下 apollo/1.启动docker环境bash docker/scripts/dev_start.sh2.进入docker环境bash docker/scripts/dev_into.sh3.代码编译(更改配置文件不需要重新编译)./apllo.sh4.启动Dreamviewbash scripts/bootstrap.sh

4.3 Dreamview选择车型和地图

打开Dreamiew后

1.在浏览器输入 http://localhost:8888

2.选择模式、车辆、地图

4.4 播放数据

1.下载数据包。 https://apollo-system./dataset/6.0_edu/demo_sensor_data.tar.xz2.解压 tar -xvf demo_sensor_data.tar.xz3.将数据复制到 /apollo/data/bag 文件夹下,不然docker内访问不到4.docker内, cyber_recorder play -f /apollol/data/bag/demo_sensor_data.tar.xz5.利用cyber_monitor 查看channel数据,利用cyber_visualizer可视化点云和查看相机图片

4.5 Lidar 感知模块启动

1.修改模块的输入channelvim /apollo/modules/perception/production/dag/dag_streaming_perception.dag

2.修改 /apollo/modules/perception/production/conf/perception/lidar目录下

velodyne128_segmentation_conf.pb.txt 文件

3.在Dreamview中启动perception

4.查看模块是否启动完成 tail -f /apollo/data/log/mainboard.INFO

4.6 Traffic Light模块启动

Launch文件路径:/apollo/modules/perception/production/launch

前提启动模块:1.Transform模块:为了发布传感器各坐标系变换供各模块调用cyber_launch start /apollo/modules/transform/launch/static_transform.launch2.image decompression 模块:将压缩的图像数据解压缩cyber_launch start modules/drivers/tools/image_decompress/launch/image_decompress.launch红绿灯检测模块cyber_launch start /apollo/modules/perception/production/launch/perception_trafficlight.launch播放数据,查看结果cyber_recorder play -f /apollo/data/bag/demo_sensor_data_for_vision.record -k /apollo/perception/obstacles /apollo/prediction

实践文档

https://developer.apollo.auto/document_cn.html?target=/Apollo-Homepage-Document/Apollo_Doc_CN_6_0/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。