FavoriteLoading
0

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法

MathWorks 今年推出自动驾驶系统工具箱(ADST),借助这个新的工具箱提供的一系列设计和验证工具,能够更快速地开发感知算法,并简化算法的验证工作。

本文内容是 MathWorks 应用工程师王鸿钧在雷锋网与中国汽车工程学会组织的公开课上的分享。

本期公开课要点:

  • 自动驾驶系统工具箱简介
  • 多目标跟踪原理
  • 使用自动驾驶系统工具箱设计多目标跟踪算法
  • 使用基准真值标注工具分析计算结果
  • 算法的实时验证技术

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

我们来回顾一下主动安全和自动驾驶系统的开发流程。

首先,我们会有一个系统的需求。然后,我们会在系统需求的基础上进行感知算法与控制算法的设计。感知算法包括了图象、雷达、GPS 以及一系列传感器的采集、目标检测以及感知算法。控制算法主要包括控制策略与控制执行部分。

开发完算法之后,我们需要进行系统的集成、测试和验证,然后自动生成代码,最后进行代码的测试和系统最终确认验证。

传感器融合与多目标跟踪的算法,其实是处于感知算法和控制算法中间的部分,对于控制工程师来说,我们需要对感知的传感器信息进行处理,得到用于控制的输入信息。这就是我们的工作。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

MathWorks 在最新的 2017A 版本中推出了一个全新的自动驾驶系统工具箱,它希望为从事自动驾驶以及主动安全系统设计的工程师提供一系列加速自动驾驶系统及主动安全系统开发的工具。

主要包括三方面:

第一,测试与验证工具,包括真实值标签与场景生成;

第二,算法开发工具,包括传感器融合与目标跟踪,和视觉系统设计工具;

第三,可视化工具,包括鸟瞰图工具,以及雷达点云工具。

目标跟踪原理

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

什么是目标跟踪?要进行控制,首先必须从真实的世界采集到一定的信息,根据信息进行闭环控制。

我们要从真实的世界进行感知,感知部件包括一系列传感器,比如雷达、视觉、激光雷达等等。然后,我们需要在感知的基础上,对真实的世界进行估计。

这就是我们要介绍的目标跟踪等相关算法和传感器融合。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

先介绍一些概念:

真实值指的是物体的实际运动。检测指的是通过传感器获得的含有分类属性的一系列目标列表,检测通常是根据时间的序列来完成的。

比如上图右版部分 6 个时刻,我们分别检测到了一系列目标:红色和蓝色代表车辆,绿色是行人。当然,检测的时候还可能出现一些问题,比如黑色的点就是我们没有办法对它进行分类的目标,黄色的点属于虚景,但是我们在实际检测的时候是不知道的,所以我们也把它归类为没有分类的目标。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课其实从 T0 时刻一直到 T2、T3、T4、T5 时刻,我们对目标检测情况进行一系列分析,通过跟踪算法对物体进行实际运动估计。

在 T0 时刻,我们成功检测到了蓝色的车辆与绿色的行人,那么我们就将它作为车辆与行人跟踪。但是我们没有检测到红色车辆,所以我们添加了两个灰色的点进行试探性跟踪。

在 T1 时刻,我们观测到了红色车辆,所以我们现在确认了灰色跟踪当中其中一个是车辆,但另一个没有确认的跟踪,我们把它删除了。

T3 时刻,我们并没有观测到行人,但是我们通过预测,把被遮挡的行人目标预测出来,也把它作为跟踪的一部分。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

T4 时刻,红色和蓝色的车辆离开了观测范围,所以我们对离开的目标位置也进行了预测。

最后,红色和蓝色的车辆都离开了观测范围,行人也穿过了马路,于是我们完成了对这三个物体的跟踪,我们将跟踪从我们跟踪的列表当中删除。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

如果以上介绍过于抽象,我们在 2017A 自动驾驶系统工具箱当中提供了一个前向碰撞预警的 Demo。你们可以通过这个 Demo 来形象地了解到跟踪器是如何工作的。

视频当中通过右侧的鸟瞰图可以发现蓝色的是视觉目标,红色是雷达目标,方块形状是我们跟踪的目标。

我们会对车辆进行检测,然后将最近的最有可能发生碰撞的目标作为 MIO(最重要目标),防撞预警系统会对它进行监测并进行告警。

多目标跟踪算法

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

现在我们看到的是前向碰撞预警系统算法的框图,我们可以通过雷达目标与视觉目标进行传感器的融合以及卡尔曼滤波完成跟踪器的工作。

然后,我们会对跟踪到的目标进行威胁评估,最后得到 MIO,进行防撞预警。预警的结果还可以输入给 AEB(自动刹车系统)来进行控制处理。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

我们可以借助计算机视觉工具箱当中代价矩阵的方法将雷达目标与视觉目标进行配对:根据配对的结果将匹配的雷达与视觉目标进行融合。

我们可以通过以下的函数来实现:

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

实际的跟踪算法会通过卡尔曼滤波来实现。卡尔曼滤波的含义或者是公式可能有些人比较熟悉,它就是通过前状态和协方差来对当前的状态进行预测,通过当前的测量值去更新当前的状态,将更新的状态进行输出。

在计算机视觉工具箱当中同样提供了卡尔曼滤波的函数。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

实际多目标的跟踪,远远比一个卡尔曼滤波器更为复杂,因为它涉及到了我们提到的传感器融合,以及多目标跟踪管理,包括跟踪的初始化、确认、预测。

比如,刚才提到的可能会有一些未确认的目标,但是我们同样也要对这些目标进行跟踪。同时有些目标会被遮挡,我们要对被遮挡的目标进行预测。所以现在我们看到的就是一个完整的多目标跟踪器的逻辑。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

上图,分别是目标检测数据需要包括的信息、目标跟踪数据能够提供的信息。

这些信息包括了时间测量值、测量噪声、传感器编号、目标 ID、目标属性等等。我们最后得到的跟踪数据包括了跟踪的 ID、时间、年龄、状态、协方差、确认标志、遮挡标志、目标类别的 ID 以及目标属性(如果大家对以上的信息还有疑问的话,在我们的帮助文件里会有更详细的描述)。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

介绍一下多目标跟踪器的层级,一共分为三个层级。

第一,顶层与用户的交互界面,它同时负责分配多个检测到多个跟踪,进行这样一个匹配,以及维护跟踪的列表,进行新建或者是删除跟踪。

第二,对单个跟踪来说,会处理对单个跟踪的多个检测,就是完成传感器融合的算法,同时也会负责单个跟踪的确认与删除,以及维护跟踪的 ID 分类等信息。

第三,跟踪滤波器,用户自定义的滤波器,负责处理测量产生的滤波器更新,以及维护滤波器的状态和协方差。

对于非线性的扩展卡尔曼滤波或者无界卡尔曼滤波,用户还需要定义这一时刻的状态转移函数与测量函数,它取决于用户对目标模型的分析情况。

比如,目标运动状态,是否是匀速、匀加速或者是其他运动状态。

同时用户还需要配置跟踪器的其他属性,包括确认跟踪的阈值、被遮挡的更新次数、传感器的数量以及最大数量的跟踪数量等等。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

简单介绍检测到跟踪的分配以及传感器的融合是如何实现的。

图一显示的是目标前一时刻的状态,图二显示的是跟踪器对目标当前位置的预测,图三是根据跟踪器对目标当前位置的预测,将检测到的一些目标的信息分配到跟踪的目标。

比如,可能有雷达的测量数据、视觉的测量数据,就是采用代驾矩阵的方法来进行分配的。

最后一步,进行传感器融合的计算,获得当前目标的位置,更新当前的状态。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

对于跟踪的预测以及状态更新,我们提供了三种滤波的算法,分别是:KF 线性卡尔曼滤波、EKF 扩展卡尔曼滤波、UKU 无界卡尔曼滤波。

我们预设了三种滤波器的初始化函数,分别针对于匀速目标、匀加速目标和匀转向速目标。同时用户也可以添加自定义的滤波器初始化函数,这通常用于非线性的滤波器。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

对于 EKF 和 UKF 来说,用户还需要定义它的运动函数和测量函数。同样,我们预先设置了匀加速、匀速、匀转向速度这三种情况,对于其他一些更复杂的情况,用户可以根据公式添加自定义模型。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

单个跟踪来说,有一个生命周期,一共分为三个步骤。

第一,跟踪的初始化,我们会从从没有分配到跟踪的检测创建一个新的跟踪,这就说明我们检测到了一个新的目标,同时我们会创建和初始化滤波器。

第二,跟踪得到了确认,我们会将每个时刻的分配、检测到跟踪。通过检测到的信息我们对跟踪进行修正,同时跟踪也会计算一个预测,这个就是典型的卡尔曼滤波算法。

第三,如果一段时间内没有观测到跟踪目标,那么我们会判断是否删除这个跟踪,经过一个阈值,如果在阈值的范围之外,还是没有观测到跟踪,那么我们将其删除。

对于非线性滤波器来说,我们还会定期地修正它的测量函数与状态转移函数。

这是一个行人目标跟踪的案例,我们从案例中可以很清晰地看到一个跟踪的生命周期:它是如何被初始化和如何确认的,在被遮挡的时候如何进行预测以及最后如何进行删除。

真实值标签工具

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

我们在自动驾驶系统工具箱当中还提供了很多其他的工具,包括了一系列的算法验证工具,比如说真实值标签工具。

在 2012 版本的 Matlab2012B 之后,有一个 APP 的功能:提供了一系列的应用程序,这包括了我们在自动驾驶系统工具箱当中提供的真实值标签应用程序。

如上述右图所示,我们可以通过这个工具,在一段视频当中添加真实值的标签,将目标通过标签的形式记录下来,可以使用矩形的目标或者是直线的目标。

右图中,我们使用真实值标签标记了卡车、汽车、交通指示牌、车道线等等。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

按通常理解,真实值标签一般是用来训练目标检测的算法以及评估目标检测的算法。在这里,我们还可以通过真实值标签的工具,去验证、跟踪和控制算法。

我们可以通过真实值标签去对视频进行处理,人工产生一些视觉目标,通过采集的记录的或者是实验室产生的雷达目标对它进行融合,通过多目标跟踪器与控制算法对整个系统的功能进行一个仿真工作。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

使用真实值标签工具添加真实值标签的方法共分为五个步骤:

第一,载入视频。

第二,定义标签的类型。比如,我们可以定义车辆、车道线等目标,定义环境,比如说天气等全局的标签。

第三,通过时间轴的拖动,可以对每一帧进行标签的绘制。

第四,我们可以使用部分自动算法,为我们添加标签,包括中间帧的线性插补、KLT 目标跟踪以及 ACF 车辆检测这些自动化算法,可以逐帧地绘制选定的标签。

第五,我们通过手动的微调得到最终结果,将数据导出到文件或者是工作空间。

算法的实时验证

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

设计完成之后,就需要进行算法验证,我们可能会通过一些实车的测试进行验证,也可以在实验室里通过模拟方式,在实验室里进行可视化的验证。

Matlab 当中提供的一些数据导入的程序,以及一些可视化的应用,为仿真系统的搭建提供了便利。

比如,我们可以通过这些数据接口的操作函数,导入 excel 工作表、视频文件、CAN 总线数据,我们也可以通过自动驾驶系统工具箱当中提供的函数来生成鸟瞰图以及雷达点云图。

上图就是一个典型的仿真环境,上面是整个系统的架构,下面是仿真的硬件设备,我们采用一台目标机来运行车辆与环境的模型,然后另一台运行感知与控制算法,完成一个硬件再回路的仿真工作。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

通过这个视频,我们所有的算法都是能够自动生成 C 语言代码的,我们将生成的代码下载到目标计算机当中,就可以很容易完成硬件再回路的仿真。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

对算法进行实车的测试,也是必不可少的一个环节。我们在各种不同的路况下,可以对车载系统进行实车测试,这个系统可以是一台笔记本电脑,也可以是一台实时的仿真计算机。

我们通过 USB、CAN 总线、以太网等等,将它与各个传感器进行连接,就可以测试我们的目标跟踪,以及控制算法。

如何用自动驾驶系统工具箱设计和验证多目标跟踪算法 | 硬创公开课

我们可以看到,在整个系统的设计与验证的过程中,MATLAB、Simulink 提供了一个通用的软件设计与硬件设施的平台,其中就包括使用 MATLAB 设计感知算法和 Simulink 来设计控制算法,将这些算法自动生成 C 语言代码,以及使用 Simulink Real-Time 完成算法的实时仿真工作,进行系统的验证。

 

本文转载自雷锋网