从系列中:自主导航
布莱恩道格拉斯
在许多情况下,为了在环境中有效地导航,我们可能需要观察和跟踪其他对象。本视频将介绍扩展对象跟踪:返回多个传感器检测的对象。
我们将介绍一个基本概述的扩展对象跟踪是什么,使其充满挑战性,然后简要介绍一些已经开发出解决问题的算法中的一些直觉。
在上个视频中,我们知道了如何在静态环境中规划路径一旦我们有了地图。但在许多实际场景中,环境并不是静态的。经常会有其他物体在我们试图导航的同一位置移动。因此,我们可能需要观察和跟踪这些对象,以便有效地计划和做出决定。
这段视频要讲的是扩展目标跟踪,也就是——好吧,我会在接下来的视频中解释它是什么。但我希望提供一个基本的概述,什么是扩展目标跟踪,什么使它具有挑战性,然后简要地提供一些直觉,一些算法已经开发出来解决这个问题。我是布莱恩。欢迎来到MATLAB技术讲座。
如果您正在开发一个自主驾驶汽车,可以让您的静态环境的地图让您可以通过城市计划最佳路线,或者如果您有转弯,那就确定了哪条车道。但是,环境绝对不静止。
因此,如果汽车试图确定换车道是否安全,静态地图是不够的。它还需要了解环境的动态部分。那些是其他的汽车、行人和自行车等等。因此,如果我们想成功地在这个环境中导航,我们需要给我们的自动驾驶汽车一种感知和跟踪这些物体的方法。
现在,我们已经讨论了如何跟踪传感器融合和跟踪系列中的单个对象和多个对象,我已链接到下面。而且我偏见了,但我认为值得一看,因为我们将在这里建立在那种知识。
在该系列中,我们谈到了跟踪远程对象的跟踪要求我们找到描述对象运动的正确模型,系统中的不确定性使得难以将正确的测量与右对象相关联,以及如何添加和减去曲目随着对象输入并留下当地环境。我们为所谓的点对象做了所有这一切。这些是足够小的对象,即传感器在每个对象的大多数检测到最多返回。
这是一个重要的区别点物体不需要在物理上很小。它只需要比传感器的分辨率小一点。例如,雷达站可能正在跟踪一架同样非常遥远的大型飞机。雷达会对整个飞机返回一个ping信号或一个反射信号,然后整个过程就变成了一次探测。
如果你跟踪多架飞机,那么我们必须将每个点检测与各自跟踪的飞机关联起来,然后估计它们的状态——也就是说,飞机的位置和运动学状态,比如速度和航向。因此,如果目标小于传感器的分辨率,那么我们可以应用在传感器融合和跟踪系列中讨论的算法。
然而,小对象假设并不总是正确的。有时,就像前面的汽车例子,你追踪的物体比传感器分辨率要大。这就是我们所说的扩展对象。通过扩展对象,我们可以在相同的采样时间内接收到同一对象的多个测量值。
例如,看看这款车的多个激光雷达传感器是如何看待环境的。如果我把它冻结在这里,看看有多少数据是由前面的激光雷达产生的。看看前面经过的这辆红色车有多少数据点。场景中其他动态和静态车辆也有多个数据点。这些信息可以帮助我们更好地理解这些物体的状态。
但有了这些额外的信息,我们就可以像对点对象那样,在运动状态下估计出更多的位置。我们还可以估计被跟踪对象的大小、形状和方向。我们可以称之为物体的范围。
例如,如果这些是一辆汽车、一辆自行车和一名行人的返回测量值,那么仅仅看这个,我们就可以想象每一辆车的大小、形状和方向的一种可能场景。随着时间的推移,当我们观察这些物体移动时,我们可以更加自信地估计其范围。
如果我们的跟踪算法可以执行此操作,这将是非常好的,因为了解环境中的其他对象的程度对于将它们放置在地图中是至关重要的,并且它可能意味着规划避免对象与处理它的路径之间的区别作为一个点,并崩溃了,这提出了我们如何建模的问题?
乍一看,很容易想到,为什么我们不完全按照它的样子建模呢?如果我们有一个足够高分辨率的传感器,难道我们不应该跟踪所有的曲线和汽车的特征或任何你正在跟踪的东西吗?这样,我们就有了物体的最高保真度,对吧?
嗯,这很好,除了它可能太复杂,无法解决和维护,并且可能不会增加那么多价值。因此,目前,可能最流行的方法是将程度近似于简单的几何对象,如矩形或椭圆形。这些形状可以提供物体的基本空间表示,而无需大得多计算工作。例如,2D椭圆可以仅由三个状态变量,两个半轴长度,L1和L2表示,以及椭圆定向角,α。
这是对扩展目标跟踪问题的概述。我们需要一个跟踪器,它可以从一个未知数量的扩展对象,可能接近环境中的其他对象,然后估计场景中的对象的数量和位置,运动学,和每个对象的范围。
现在,一般来说,扩展对象跟踪器仍然需要做与点对象跟踪器相同的事情——即,获取测量、将检测与对象关联、添加和删除轨迹,以及确定运动模型。除了扩展对象,我们还需要更多的信息。数据关联步骤尤其困难,因为每个对象可能有多个检测,试图将一组检测与一个对象关联起来并不一定简单。
这就是我们在接下来的视频中主要关注的内容。我想尝试提供一些关于扩展对象跟踪器处理所有这些数据的几种不同方式的直觉。
让我们从一个简单的场景开始。假设传感器已返回这八个检测。对于点目标,我们知道传感器正在检测八个不同的目标。然而,对于扩展对象,我们只是不知道。这两个物体是不同的吗?或者这里有三个物体?或者它们都是同一个物体的一部分。
确定如何像这样对这些检测进行分组是分区问题。我们需要找到一种方法,将这些探测结果分成属于同一物体的组。现在,如果我们跟踪的物体相对于它们的大小有很大的间隔,就像我们测量汽车,自行车和行人一样,分割就相对容易了。
我们可以看到,这里可能有三个不同的物体,因为它们彼此相距很远。在这种情况下,我们可以使用DBSCAN之类的聚类算法将它们分组在一起。DBSCAN根据两个调优参数查找紧密聚集在一起的点组——点之间的距离以及组成一组的点的最小数量。
一旦这些群体被确定,就可以利用探测的分布来估计物体的范围和位置。我们可以拟合一个椭圆,并声称这个位置是探测的质量中心。解决这个跟踪问题的一个简单的方法是利用这个位置和范围信息和卡尔曼滤波来更新轨迹。
这种方法的好处是,我们可以对一个场景进行数千次测量,就像我们用自动驾驶汽车的激光雷达所做的那样,我们可以迅速将所有这些信息压缩到场景中有多少物体就有多少点,这在计算上要比尝试运行一个使用数千个单独点的追踪器简单得多。
但这种聚类的缺点是,当被跟踪的物体彼此靠近或靠近环境中的静态障碍物时,就会变得非常困难。测量结果不再是精确的,离散的簇,而且测量结果属于哪个对象存在一些不确定性。如果我们在聚类步骤中做了错误的假设——比如,假设这个组只是一个单一的对象——那么当我们向跟踪算法输入错误的信息时,就会产生错误的结果。
因此,在我们确信一组测量结果实际上属于同一天体之前,我们需要小心,不要过早地将其提交到一个星团中。这就是利用多目标跟踪器的多假设特性的地方。例如,我们不需要提交检测的单个分区。记住,在我们有8个不同的测量值之前,我们使用了几种不同的方法来划分数据。我们不知道哪个是正确的。
所以这里有一种方法来处理这种不确定性。我们假设每个分区都是可能的。然后我们对每个分区进行数据关联和跟踪,所有这些都是并行的。我们维护这些假设或猜测的估计状态和概率,以确定检测是如何划分的。
然后在将来的某个时候,我们会得到一组新的测量值,我们可以用它来更新我们的过滤器。我们继续以各种可能的方式对它们进行划分。我们将它们应用到跟踪器中存在的不同假设中。在这一点上,一些假设是极不可能的。这些是产生簇的簇,这些簇在对象的测量状态与估计状态相比有很大的偏差。
然后我们就可以开始抛弃这些假设,这样我们就不必永远维持它们了。通过这种方式,我们不断地添加新的可能的数据分区,并去除最不可能的旧分区。尽管过滤器将所有这些信息保存在内部,但它会返回的只是最可能的假设下物体的轨迹和状态。
显然,分区的数量是巨大的。例如,有4,140种不同的方法来划分8个度量。而扩展的对象可能会返回更多的错误检测。所以在追踪器中维持这么多假设是不可行的。另外,这些分区中的大多数都是垃圾,因为,例如,其中一个就是像这样划分它们。这种组合是不太可能的。
因此,我们需要找到一种方法来减少我们查看的分区的数量,并且优选地是在同一组中保持彼此接近的方式。这样做的方法是简单地根据它们的相对距离彼此分组检测。如果它们的相对距离小于一些给定阈值,则两个检测将属于同一组。这与我们之前用DBSCAN做过的东西真的相似,并且确保我们没有结束这种疯狂的情况。
现在,为了创建分区,我们可以从一个较大的距离阈值开始生成第一个分区,然后通过降低距离阈值创建更多分区,创建越来越小的组。您可以在传感器融合和跟踪工具箱中的分区检测功能文档中看到一个例子。
这里,我们从10个测量值开始。函数返回了前六个分区。随着距离阈值的减小,可以看到返回的检测单元越来越多。同样,我们不知道这些分区中哪一个是正确的。因此,我们将把所有这些作为积极的假设保留在跟踪器中。
但即使是这种类型的划分方法也可能会误导人,因为如果两个对象像我们在LIDAR例子中看到的那样重叠,这种划分方式仍然会将其归类为单个组。或者,随着距离阈值的减小,它可能会把它分解成一堆更小的群体,比物体的数量还要多。因此,有更智能的分区方法,可以使用跟踪器的输出来帮助确定分区。
这称为预测分区。这样,如果跟踪器认为这个区域有两个对象,我们可以告诉分区算法在这里创建两个组。现在,不管分割是如何完成的,我们最终得到的是关于这些检测如何分组的许多不同假设。下一步是将每个假设中的所有检测与跟踪对象相关联。
在本视频的前面,我们在将测量结果输入跟踪算法之前,根据测量结果估计了范围和位置。这种方法的问题在于,测量结果并不能告诉你物体状态的全部情况。所以我们可能对物体的范围和位置做出了错误的假设。
例如,有时汽车只从后面测量,产生的测量看起来像一条线。如果我们使用这个测量集的长度和宽度,我们会得到一个长度为零的位置偏向于汽车的后部,这显然是错误的。因此,使用更复杂的传感器建模方法是有益的,即利用所有的检测来同时更新范围、位置和轨迹。
从概念上讲,它是这样工作的。跟踪器保持对目标状态的估计。这就是它的位置,移动的方式和范围。假设它用矩形来估计范围。跟踪器可以利用物体的运动模型预测物体的未来状态。这样跟踪器就能估计出物体在未来某个时刻的位置。
跟踪器内的传感器模型可以预测传感器应该返回什么,假设跟踪器知道传感器相对于它认为的物体的位置。然后,当我们得到真实的测量结果并将探测结果分成组时,我们可以根据预测和探测结果之间的不匹配来更新被跟踪物体的整个状态。
当然,这一切都有不确定性。我们对自身位置的估计,对物体状态的初始估计,以及预测未来状态的运动模型,都存在不确定性。在估计物体的范围和我们用来预测探测的传感器模型中都存在不确定性。当然,传感器测量本身也存在不确定性。
并跟踪过滤器内所有不同假设的所有不同假设的所有不确定性,然后使用该不确定性来确定如何更新状态,并确定哪些假设很可能是扩展对象跟踪算法的魔力。现在,当然,这不是魔法。但它们如何实现这一目标的数学超出了此视频的范围。但如果您有兴趣,我会链接到其他伟大的资源,详细介绍。
关于这个,我想说的最后一件事,至少在这个视频中,是我在这里描述的是聚类和分配类型扩展对象跟踪器背后的一般概念在这里,首先进行聚类检测,然后将聚类与跟踪的对象相关联。
但是,解决此问题的其他方法可以绕过聚类步骤,只需直接将各个检测与跟踪对象相关联。这些是所谓的基于可能性的数据关联算法。在描述中有链接,用于涵盖所有此项的文档和视频。希望此视频为扩展对象跟踪器与点对象对应物的不同程度提供了一定程度的直觉。
这就是我要讲的。在下一个视频中,我们会把所有的自主导航部分放在一起。这包括绘图、定位、跟踪和规划。然后我们将讨论如何计算整个系统是否能工作。
所以,如果你不想错过这期节目或其他未来的Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。感谢收看,我们下期节目再见。
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。