自动驾驶(八十一)---------Apollo之感知模块

       预则立不预则废,本命年要注意,真男人不回头。

       apollo的感知分为以下几个方面:lidar、ladar、camera、fusion。

1. Camera感知

       Apollo视觉检测,地址在:Apollo/modules/perception/camera/lib/obstacle ; 主要是用了YOLOv3的检测方法,一方面我们需要对多个类别进行识别:车辆、卡车、骑车人和行人等;另一方面一个网络识别一个类别精度更高,但是也需要考虑性能问题。所以在Apollo中采用折中方案:训练了两个不同的网络:一个是针对目标进行识别的网络:车辆、卡车、骑车人和行人等;一个是针对车道线、道路边沿、栏杆等。

       在Apollo中物体分为静态物体和动态物体,所以针对不同的对象会有不同的属性,例如对于运动物体,需要2D-to-3D的模块,这里就不展开了;另外物体追踪也是提高精度的方法,追踪采用Kalman滤波。跟踪必须是轻量化,必须速度要快,计算两帧之间检测到的目标的相似性的方法定义在 Apollo/modules/perception/camera/lib/obstacle/tracker/common/similar.h 文件中,主要是根据bbox的IOU(交并比)计算。

       apollo摄像头的感知部分主要资料都在apollo自己的文档中,我也没有详细的梳理代码,大家可以多参考apollo自的文档:https://github.com/ApolloAuto/apollo/blob/r5.0.0/docs/specs/perception_apollo_3.0_cn.md

2. Lidar感知

      Lidar的感知步骤很清晰:分割、分类、跟踪

      1.  ROI分割,结合HDmap和自身定位,选取ROI 区域,一般的就是选道路里面的区域,如图:,处理在ROI之外的激光雷达点,去除背景对象,如路边建筑物和树木等,剩余的点云留待后续处理。

      2.  目标分类,继续细分如下步骤:

             (1). 在2d俯视图上划分网格,边长一般取0.25米。

             (2). 在划分好的每个网格中,统计以下变量作为网格的属性:单元格中点的最大高度、单元格中最高点的强度、单元格中点的平均高度、单元格中点的平均强度、单元格中的点数、单元格中心相对于原点的角度、单元格中心与原点之间的距离、二进制值标示单元格是空还是被占用(单元格内是否有点)。

             (3). 把上一步得到的多维矩阵作为输入,通过卷积神经网络预测可以得到关于单元格的12个特征:1. 是否是物体的预测值;2. 向中心偏移预测;3. 为前景物体概率;4.多个类别的预测:行人,汽车,自行车等;5. 物体高度预测;

             (4). 上一步得到每个网格的多维属性,但是需要聚类为几个独立的障碍物,这里主要是用到向中心偏移,通过方向聚合障碍物,如图a最终得到b:在这里插入图片描述俯视图:在这里插入图片描述

            (5). 后期处理,Apollo首先对所涉及的单元格的积极性和物体高度值,平均计算每个候选群体的检测置信度分数和物体高度。 然后,Apollo去除相对于预测物体高度太高的点,并收集每个候选集中的有效单元格的点。 最后,Apollo删除具有非常低的可信度分数或小点数的候选聚类,以输出最终的障碍物集。

       3. 目标跟踪,分为两部分:目标匹配和运动跟踪;

            (1). 目标匹配又很多方法,例如匈牙利匹配和交并比(IOU),apollo特别的在外形的匹配基础上加入多个维度计算相似性:

,在以上维度的基础上采用匈牙利匹配进行匹配。

            (2). 运动跟踪主要是使用卡尔曼滤波来track ,再剔除异常数据,特别的对物体的速度描述如下:锚点移位速度、边界框中心偏移速度 和 边界框角点位移速度,选出与之前观测速度偏差最小的速度为最终的观测值。根据最近3次的速度观测值,计算出加速度,之后利用卡尔曼滤波来不断收敛物体的位置。

3. Ladar

        在Apollo中Radar感知的流程与Lidar感知相比简化了一些,主要分为:预处理工作、高精地图ROI过滤器、物体检测、物体跟踪

        1. 第一步预处理工作主要是矫正雷达数据的时间戳、获取雷达到世界坐标系的变换矩阵。

        2. 这部分其实与激光雷达Lidar感知的高精地图ROI过滤器比较类似,在激光雷达中查询的范围是60m,而在雷达感知中查询的范围为120m,计算当前时刻车辆的速度,之所以要计算,是因为要差值出雷达感知的时刻对应的车辆速度,这也要求在记录不同传感器的数据时,必须同步记录好对应的时间。

        3. 雷达Radar感知相对于激光雷达Lidar感知更加简单,是因为Apollo使用Radar就可以分辨出自行车、行人等类别。而激光雷达Lidar需要手动去CNN分割识别障碍物,MiniBox构建标定框等;同时Radar也可以自行完成跟踪,不需要使用匈牙利算法对Object进行匹配等。

        4. 最后Radar的检测结果将会以自定义的共享数据类型发布,发布的结果其实与Lidar感知相似。障碍物的尺寸、方向、速度等信息。

4. Fusion

     传感器的数据融合有两部分内容比较重要,即 数据关联 和 动态预估。

      1. 数据关联用的是基于几何距离的HM匈牙利算法。

      2. 动态预估用的是:使用了非简化的估计误差协方差矩阵更新公式:   1. 标准卡尔曼滤波: 2. 修改后的Apollo公式为:

5. 总结

      preview

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值