Apollo感知模块具有识别障碍物和交通灯的能力。
其中,Apollo解决的障碍物感知问题:
1. 高精地图ROI过滤器(HDMap ROI Filter)
2. 基于卷积神经网络分割(CNN Segmentation)
3. MinBox 障碍物边框构建(MinBox Builder)
4. HM对象跟踪(HM Object Tracker)
其源码在:apollo\modules\perception\obstacle\lidar

高精地图 ROI 过滤器

高精地图 ROI 过滤器处理在ROI(包含路面、路口的可驾驶区域)之外的激光雷达点,去除背景对象,如路边建筑物和树木等,剩余的点云留待后续处理。
主要有以下步骤
1. 坐标转换:使世界坐标系和点云坐标系处于同一相同坐标系下。
2. ROI LUT构造:采用LUT(网格显示查找表),将ROI量化为俯视图2D网格(8*8的网格,每个网格为70 / 8 = 8.75米,对应于量化后的网格每个网格为25 / 8 = 3.128厘米)。
1
3. ROI LUT点查询:查询ROI内的点。

基于CNN的障碍物分割

经过高精地图 ROI 过滤器后,检测和划分前景障碍物,例如汽车,卡车,自行车和行人。
主要有以下步骤
1. 通道特征提取:在俯视图2D网格中计算每个单元格的8个统计测量(这里面用到了点云的反射率,也就是单元格的强度),这8个统计测量则为CNN的输入通道特征。
2. 基于CNN的障碍物预测:使用全卷积神经网络来预测单元格障碍物的属性(center offset(中心偏移)、objectness(对象性,是否有物体)、positiveness(积极性,是否为正目标)、object height(物体高度)、class probability(物体的类别))。
2
3. 障碍物聚类:使用CNN预测得到的单元格障碍物属性(objectness属性阈值为0.5)生成候选对象集群。
3
4. 后期处理:Apollo首先对所涉及的单元格的积极性和物体高度值,平均计算每个候选群体的检测置信度分数(默认阈值为0.1)和物体高度。 然后,Apollo去除相对于预测物体高度太高的点(默认为0.5米),并收集每个候选集中的有效单元格的点。 最后,Apollo删除具有非常低的可信度分数或小点数(小于3个点)的候选聚类,以输出最终的障碍物集/分段。

MinBox障碍物边框构建

使用CNN学习的方法得到的障碍物是由一个个网格组合而成,在这里使用MinBox的方法得到物体的最终边界框。具体方法是任意选择一条边,将其他多边形上的点投影到这条边上,建立具有最大距离的交点对,其具有最大距离的点的集合则为边框的边缘,然后通过迭代所有边,选择最小面积的方案得到最终的边界框。
4
结论:Apollo通过用点云进行学习得到物体俯视图边界框,结合相机图像进行学习得到的物体边界框,则可得到物体3D的边界框。

HM对象跟踪

HM对象跟踪器跟踪分段检测到的障碍物。通常,它通过将当前检测与现有跟踪列表相关联,来形成和更新跟踪列表,如不再存在,则删除旧的跟踪列表,并在识别出新的检测时生成新的跟踪列表。 更新后的跟踪列表的运动状态将在关联后进行估计。 在HM对象跟踪器中,匈牙利算法(Hungarian algorithm)用于检测到跟踪关联,并采用鲁棒卡尔曼滤波器(Robust Kalman Filter) 进行运动估计。

特别说明:本文为本人学习所做笔记。
具体参考:https://github.com/ApolloAuto/apollo/blob/master/docs/specs/3d_obstacle_perception_cn.md

Logo

为开发者提供自动驾驶技术分享交流、实践成长、工具资源等,帮助开发者快速掌握自动驾驶技术。

更多推荐