Coursera 多伦多自动驾驶课程之行为规划behaviour planning(处理多场景)4.5.4
参考Coursera上多伦多大学self-driving car 自动驾驶课程4.5.4
截取关键的PPT翻译并加上自己的理解,作为自己学习的笔记,也可供大家共同交流学习。
学习目标
开发一个更大的行为规划器,它能够同时管理多个场景的决策过程。
我们将通过引入层次有限状态机的概念来实现这一点。
我们还将开发一种方法,在每个驾驶场景发生时在它们之间进行切换。
之前介绍的十字路口场景
到目前为止,在这个模块中,我们已经开发了一个有限状态机行为规划器,它可以处理一个带有动态对象的四路交叉口场景。然而,在驾驶过程中,会遇到很多这样的情况。例如,有三向停车交叉口、红绿灯控制交叉口和直行道路场景,仅举几个例子。
虽然这些场景中的许多都有一些相似之处,主要是因为处理它们所需的逻辑,但可以认为每个场景都需要根本不同的驾驶行为。。
处理这些多个场景的一种方法是在不断扩展的行为网络中,向单个状态机添加额外的状态、转换和条件。然而,这种方法有几个问题。
单一状态机的第一个问题是,我们需要开发额外的逻辑来区分当前场景,以及单独处理每个场景所需的规则。这很快就会遇到一个称为“规则爆炸”的问题,在这个问题中,添加其他场景所需的规则数量变得难以想象。
单一状态机的第二个问题是,由于每一步需要评估的额外规则和转换的数量,所需的计算时间显著增加,最后,由于必须担心的案例数量迅速增加,这样一个系统的创建和维护非常复杂。
本质上,随着复杂性的增加,我们失去了使用有限状态机的所有优势,这些优势在第一课中已经强调过。
然而,我们可以使用另一种方法。我们可以将每个高级场景表示为单个状态。这将允许我们在高级场景状态之间创建更简单的转换。在本例中,我们可以看到这些状态表示一个直线道路场景和我们之前处理的四路交叉口场景。
对于这些高级场景状态中的每一个,我们将存储一个低级状态机,我们可以用它独立地处理场景。这种表示方法称为层次状态机,超级状态表示每个场景,子状态表示每个场景中要处理的操作。高级场景状态机之间的转换将是一个规则,它根据HD路线图和动态车辆信息定义何时进入新场景。
假设我们有一个简单的分层状态机,有两个场景,一个用于有人行横道的直行道路,另一个用于基于停车标志的十字路口。要从直行道路行驶到停车标志十字路口,通过在任务计划中对到下一个十字路口的距离检查来完成的。检查到路口的距离小于阈值则切换场景。
我们要回答的下一个问题是,在处理子状态车辆的动作/操作时,如何在场景之间切换?一种方法是关键动作/操作时引入状态的转换。
首先,让我们确定哪个状态将是场景的关键退出状态。我们能够驶出十字路口的唯一方法是在通过十字路口后,处于跟车或者速度跟踪状态。让我们继续以交叉口场景为例。
转换的条件是确认这个场景确实已经完成。在本例中,下一个停车标志交叉口的距离如果这大于给定的阈值,我们可以退出交叉口场景。有了这种转换方法,我们还能够在场景切换之间保持操作。
在这种情况下,交叉口超级状态下的跟踪速度将连接到我们进入的下一个场景的跟踪速度