Apollo源码分析:感知融合中的数据关联细节

Apollo源码分析:感知融合中的数据关联细节

目标跟踪的基础知识概念

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

附赠自动驾驶最全的学习资料和量产经验:链接

卡尔曼滤波如何工作?

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

image

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

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

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

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

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

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

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

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

多目标比单目标难。

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

image

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

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

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

再来看多目标跟踪问题。

image

紫色正方形是另外一个目标的状态值,大家很容易发现问题。

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

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

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

Apollo 中的目标融合

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

生命周期和状态

  • initial

  • tracking

  • temporary lost

  • destroyed

image

上面这张图已经跟踪清晰了,对应到代码中其实就是 3 个:

  • 新建 Track

  • 维护 Track

  • 销毁过时 Track

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

数据关联中的关联矩阵?

在代码中如何表示新检测的目标和历史 Track 的关系呢?

image

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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值