当前位置:   article > 正文

自动驾驶 Apollo 源码分析系列,感知篇(九):感知融合中的数据关联细节_apollo融合感知

apollo融合感知

前一篇文章讲了,Apollo 6.0 中融合的代码逻辑流程,但那是基于软件的角度进行梳理和分析的,这一篇文章基于上篇的成果进一步对算法进行更详细的分析,因为代码量奇大,所以本文重点讨论数据关联的一些细节。

目标跟踪的基础知识概念

为保持文章内容由浅入深,先做一些基础的概念介绍。

卡尔曼滤波如何工作?

数据融合最常见的算法是卡尔曼滤波及其变种。
卡尔曼滤波是一个多次迭代的算法,一个周期内的工作如图所示:

在这里插入图片描述
一个目标初始状态,经过 T 时间后,调用 Predict() 方法,初始状态会移植到预测状态,一般 Predict() 方法都是基于特定运动公式进行计算的,比如手机上的 GPS,5s 更新一次 GPS 位置,但 5s 颗粒度太粗了,就将 1s 切分成 10 段,每一段 100ms 自己调用公式推断一次位置,这就是 Predict 过程。

大家会发现问题,这样的结果虽然凑合着可用,但毕竟是理论上推断出来的,不会怎么靠谱。

那就需要一个靠谱的东西,将结果及时纠偏。

比如,你每隔 100ms 自行推断的位置,我每隔 5s 收到 GPS 数据时,用这个数据来更新数据。

这就涉及到融合的过程了,这一过程称为 Update 或者是 Measure,融合可以简单理解为加权,就是一个比例,相信历史数据多一些还是相信检测到的数据多一些。

然后,融合得到的值传递给下一周期的状态值,这样一轮一轮进行下去。

单目标跟踪和多目标跟踪区别?

讲完滤波算法,讲讲单目标跟踪和多目标跟踪的区别。

多目标比单目标难。

假设,车辆前方只有一个目标需要跟踪,比如 ACC 功能。

在这里插入图片描述

蓝色正方形是融合系统每次推断的结果值。
橙色三角形是每次传感器检测到的结果。
绿色圆形则是融合的数据。

这是单个目标跟踪,基本上是 1 对 1 的关系,也就是一个目标状态值对应一个观测值。

当然,也许传感器有杂波可能产生多个观测值,但我们同样可以通过算法进行筛选或者做加权融合最终得到一个观测值,总之在单目标跟踪中观测值和状态值一般是 1 对 1 的。

再来看多目标跟踪问题。
在这里插入图片描述
紫色正方形是另外一个目标的状态值,大家很容易发现问题。

上图标记红色问题的地方会存在一个困惑,那个橙色三角形代表的观测数据究竟属于哪个目标真实的检测信号呢?

因为传感器本身也存在抖动,所以,你不能简单说左边,因为左边更近吧?

这涉及到一个多目标匹配的问题,需要靠谱的数据关联(data associate)技术解决。

Apollo 中的目标融合

目标跟踪领域,一般用 Track 来代表一个被稳定跟踪的对象,
但 Track 是有生命周期状态变换的。

生命周期和状态
  • initial
  • tracking
  • temporary lost
  • destroyed

在这里插入图片描述
上面这张图已经跟踪清晰了,对应到代码中其实就是 3 个:

  • 新建 Track
  • 维护 Track
  • 销毁过时 Track

讲了目标的状态后,我们需要解决一个问题:
将检测信号和正确的 Track 进行匹配。

数据关联中的关联矩阵?

在代码中如何表示新检测的目标和历史 Track 的关系呢?
在这里插入图片描述
比如,上图中左侧代表 Tracks,右侧代表新检测到的 Objects。
两个节点之间有连线,说明这个object 和对应的 Track 可能是同一个对象,线段上可以保存距离值,如果没有连接,距离值就为 -1。
但大家可以看到,会出现一些多对多的情况,这个时候就需要我们用一个矩阵将objects和tracks之间的距离值保存下来。
比如,上图的关系完全可以用一个 4x5 的数组来表示ÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/879262
推荐阅读
相关标签
  

闽ICP备14008679号