文章目录
- 整体把握
- 各部分阐述
- 滤除多余的检测框
- 总结
整体把握
Autoware.universe中激光雷达感知部分的主要流程为:
- 将原始点云数据输入地面滤波器和深度学习检测算法,分别得到地面滤波后的点云points_no_ground和Object检测框(该检测框内包含中心点、位姿、形状、类别)
- 将points_no_ground和Object检测框进行匹配。如果匹配成功,则输出Object检测框;如果匹配失败,则舍弃Object检测框
- 匹配算法的示意图如下面第二幅图所示
各部分阐述
Autoware.universe中激光雷达感知部分的代码相对简单,主要依赖于两部分算法性能,即(1)地面点云是否滤除干净;(2)深度学习算法是否能稳定检测出障碍物信息。这两部分网上有大量的阐述,这里不进行分析。
滤除多余的检测框
-
产生多余检测框的原因
- 为了使得深度学习算法能够检测出场景内所有的障碍物,往往在实际应用中调低认定为障碍物的置信度。虽然这种做法大幅提升了场景内障碍物被检出的概率,但也同样产生了大量多余的检测框。故要对多余的检测框进行滤除。
-
滤除多余检测框的方法
-
根据障碍物中心点滤除与车辆距离过远的检测框。获取障碍物的中心点,之后判断中心点(只考虑x、y方向)是否在某个取值范围内。Autoware.universe中,默认取 x ∈ [ 0 , 100 ] , y ∈ [ − 50 , 50 ] x\in[0,100],y\in[-50,50] x∈[0,100],y∈[−50,50],即只考虑车前一定范围内的障碍物。核心程序代码如下,参考object_position_filter.cpp
if ( position.x > lower_bound_x_ && position.x < upper_bound_x_ && position.y > lower_bound_y_ && position.y < upper_bound_y_) { output_object_msg.objects.emplace_back(object); }
-
滤除与矢量地图中道路过远的检测框。分别从lantlet2地图和检测框中获取所有的道路信息和检测框的顶点信息,之后计算检测框与道路是否相交。如果相交,则保留该检测框;如果不相交,则去除该检测框。核心程序代码如下,参考object_lanelet_filter.cpp
for (const auto & road_lanelet : road_lanelets) { if (boost::geometry::intersects(convex_hull, road_lanelet.polygon2d().basicPolygon())) { intersected_lanelets.emplace_back(road_lanelet); } }
-
这两种滤除方法保留下来的检测框为:车前,且距离车道线附近一定距离的障碍物,符合自动驾驶参考的依据。
-
总结
- 该部分想要输出最终的障碍物信息,必须points_no_ground和深度学习的检测框能够匹配
- 存在两个要求:(1)地面点云滤波效果要好;(2)深度学习要尽可能的检测出场景内所有障碍物。换句话说,要想提升该部分感知性能,需要从这两方面入手。
(2)深度学习要尽可能的检测出场景内所有障碍物。换句话说,要想提升该部分感知性能,需要从这两方面入手。 - 深度学习的输入为原始点云,这就使得该类算法的推理时间大幅增加,所以如果想替换Autoware.universe中深度学习算法(centerPoint),还应该考虑算法耗时问题。推荐对要替换的深度学习算法进行tensorRT加速。