![cover](https://img-blog.csdnimg.cn/23990727067c4b1e8e62e67ac233b47f.png#pic_center)
Apollo星火计划学习笔记——第六讲下(Apollo自动驾驶-感知基础II)
感知模块结合了使用多个摄像头、雷达(前后)和激光雷达来识别障碍物并融合它们各自的轨迹以获得最终轨迹列表的能力。障碍物子模块对障碍物进行检测、分类和跟踪。障碍物子模块包含相机模块,lidar模块,radar模块。该子模块还预测障碍物运动和位置信息(例如,航向和速度)。
前言
Apollo星火计划课程链接如下
星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/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/component
velodyne64_detection_conf.pb.txt
/apollo/modules/perception/production/conf/perception/lidar/velodyne64_detection_conf.pb.txt
lidar_obstacle_pipeline.config
/apollo/modules/perception/production/conf/perception/lidar/modules/lidar_obstacle_pipeline.config
lidar_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
![在这里插入图片描述](https://img-blog.csdnimg.cn/c325d23044f64ea9b8864b69cfd15601.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f92d47fa47bd416cab64275ffc7d2143.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/713b9dcbd3a545a79c09accc7868c09f.png)
2.1 Detection Component
2.1.1 BUILD文件目录
/apollo/modules/perception/onboard/component/BUILD
通过BUILD文件来弄清楚文件的编译规则和target的依赖。Bazel 是一款类似于 Make的开源 构建和测试工具。apollo使用bazel来构建项目。bazel通过解析我们制定的编译规则,自动配置依赖环境,调用编译器,完成项目构建。编译规则就在BUILD文件中。
2.1.2 工厂模式
方便在后期扩展功能,探索不同的算法类来实现相同的功能,方便升级。
在使用中,通过改变配置文件来动态地使用不同的算法类
2.1.3 CNN
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/lidar_obstacle_tracking.cc
2.2.1 Lidar Tracker
匹配时,考虑障碍物的大小、形状以及行驶方向(Heading),最后添加到追踪列表。
目标跟踪的主要目的是:根据运动目标相关的特征值,将障碍物序列中连续帧的同一运动目标关联起,得到每帧数据中目标的运动参数以及相邻帧间目标的对应关系,从而得到障碍物完整的运动轨迹。
2.2.2 匈牙利算法
匈牙利算法:
/apollo/modules/perception/common/graph/gated_hungarian_bigraph_matcher.h
推荐博客:
https://blog.csdn.net/qq_41730082/article/details/104077616
![在这里插入图片描述](https://img-blog.csdnimg.cn/58d7dc933d334bdc9087bcd092212793.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/73f54faa16964a41ab0dcdf3b9f137cc.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/873a509cfa2345ee896e300b38539cf5.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a985ede760bd4b358d8d9c2c0a89cd88.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/b676b9ba7c6240079bc63395d387a93f.png#pic_center)
2.2.3 障碍物之间的关系
文件位置
/apollo/modules/perception/lidar/lib/tracker/association/distance_collection.h
由这些特征LocationDistance、DirectionDistance、BboxSizeDistance、PointNumDistance、HistogramDistance、CentroidShiftDistance、BboxIouDistance、SemanticMapDistance以及下图所示的特征,可以计算出特征值。
/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
上一节课已经介绍过
单一的传感器都是有缺陷的
![在这里插入图片描述](https://img-blog.csdnimg.cn/582ed616a1fd44d4b5e595f85b38d959.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/719bd96c065d4ab593f703aa301a7472.png#pic_center)
2.3.1 D-S证据理论
推荐博客:https://blog.csdn.net/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.sh
2.进入docker环境
bash docker/scripts/dev_into.sh
3.代码编译(更改配置文件不需要重新编译)
./apllo.sh
4.启动Dreamview
bash scripts/bootstrap.sh
4.3 Dreamview选择车型和地图
打开Dreamiew后
1.在浏览器输入 http://localhost:8888
2.选择模式、车辆、地图
4.4 播放数据
1.下载数据包。 https://apollo-system.cdn.bcebos.com/dataset/6.0_edu/demo_sensor_data.tar.xz
2.解压 tar -xvf demo_sensor_data.tar.xz
3.将数据复制到 /apollo/data/bag 文件夹下,不然docker内访问不到
4.docker内, cyber_recorder play -f /apollol/data/bag/demo_sensor_data.tar.xz
5.利用cyber_monitor 查看channel数据,利用cyber_visualizer可视化点云和查看相机图片
4.5 Lidar 感知模块启动
1.修改模块的输入channel
vim /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.launch
2.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/
更多推荐
所有评论(0)