在第21讲《Coursera自动驾驶课程第21讲:Dynamic Object Interactions》 我们学习了如何预测动态物体之间的交互,如何计算碰撞时间。
在本讲中,我们将讨论讨论运动规划架构中一个非常重要的部分——行为规划。首先将介绍行为规划的概念以及如何使用状态机构建行为规划器。随后,逐步创建一个基于状态机的行为规划器,使其能够处理多种场景。最后,通过探讨行为规划问题的替代方法,来理解它们各自的优缺点。
文章目录
1. Behaviour Planning
1.1 Define a Behaviour Planning System
在本小节,首先我们将定义行为规划系统的要求、探讨行为规划模块的典型输入与输出、最后介绍有限状态机的概念,以及如何利用它来构建行为规划系统。
行为规划系统负责规划一组高级驾驶动作或操作,以在各种驾驶情况下安全地完成驾驶任务。所规划的操作集合应当考虑交通规则,以及与环境中所有静态和动态物体的交互。规划器所做出的一系列高级决策必须确保车辆安全,并高效地在环境中行驶。
作为行为规划器角色的一个例子,假设自动驾驶车辆到达一个繁忙的十字路口。行为规划器必须规划何时何地停车、停留多长时间,以及何时通过路口。行为规划器必须以计算高效的方式执行这类决策,以便能够快速响应环境变化,并部署在自动驾驶车辆硬件上。
行为规划器还应能够处理不准确的输入(受测量噪声污染)以及错误的输入(受感知误差影响,如误检和漏检)。

既然我们已经明确了行为规划器的定义,让我们列出一组基本行为,这些行为将在本讲的其余部分中使用。总的来说,我们将考虑五种驾驶行为:
- 按限速行驶(Track Speed):这相当于在开阔道路上的无约束驾驶,意味着向前行驶的唯一限制是必须遵守限速。
- 跟随前车(Follow Lead Vehicle):应匹配自车前车的速度,并保持安全的跟车距离。
- 减速停车(Decelerate to Stop):在自车当前车道内的规划范围内存在一个停车点,车辆应减速并在该停车点完全停下。每一个要求完全停车的交通法规元素都会触发此行为。
- 保持停止(Stay Stopped):车辆应继续静止一段固定的时间。例如,当车辆在停车标志处停下时,应至少停留三秒钟。
- 并道(Merge):车辆应在此时并入左侧或右侧车道。
这个基本操作列表将有助于我们发展行为规划的原理。然而,在实践中还应考虑更多的行为,行为规划器的整体复杂度也会随之增长。

1.2 Input & Output of a Behaviour Planner
行为规划器的主要输出是在当前环境中要执行的驾驶操作。除了驾驶操作外,行为规划器还输出一组约束条件,这些约束条件限制了局部规划问题。约束条件包括:
- 从车辆当前位置到目标目的地的默认路径;对于许多行为来说,这是自车当前车道的中心线。
默认路径沿线的限速。 - 当前车道的车道边界,在正常驾驶条件下应予以保持。
- 车辆需要到达的任何未来停车位置;此约束仅在选择了相关操作时才被填充。
- 局部规划器应关注的高关注度动态物体集合。这些动态物体可能由于距离近或估计的未来路径而显得重要。

为了使行为规划器能够产生所需的输出,它需要从自动驾驶软件栈中的许多其他系统获取大量信息。
- 首先,行为规划器依赖于对车辆附近道路网络的完整了解。这些知识来自高精地图(HD Map)。
- 其次,行为规划器必须知道为了到达目标位置应遵循哪些道路。这以道路网络图上的**任务路径(Mission Path)**形式提供。
- 此外,车辆的位置也至关重要,以便能够在车辆周围的局部环境中正确定位高精地图元素。因此,还需要来自定位系统的精确定位信息。
- 最后,行为规划器需要所有相关的感知信息,以便充分理解需要采取哪些行动来安全地执行任务。这些信息包括:(1) 环境中所有观测到的动态物体,如汽车、行人或自行车。对于每个动态物体,其当前状态、预测路径、碰撞点和碰撞时间都是必需的。(2) 所有观测到的静态物体及其各自的状态,如停放车辆、施工锥桶和交通灯,并标明其状态。(3) 定义执行操作的安全区域的局部占用栅格地图(Occupancy Grid Map)。

1.3 Finite State Machines
在拥有所有必要信息的情况下,行为规划器必须选择合适的操作,并定义必要的伴随约束条件,以保持车辆安全并高效行驶。为此,我们将构建一组规则(显式或隐式),考虑所有交通规则以及与其他动态物体的所有交互。
传统上,用于表示解决行为选择所需规则集合的一种方法是有限状态机。在本讲中,我们将逐步介绍构建基于有限状态机的行为规划器的过程,并讨论这种方法的一些局限性。
为了更好地理解有限状态机方法,让我们通过一个简单示例来走一遍:一个用于处理无交通情况下的停车标志路口的有限状态机。
- 有限状态机的第一组组成部分是状态集合。对于行为规划系统,状态将代表可能遇到的每种驾驶操作。在我们的示例中,我们只需要两种可能的操作或状态:按限速行驶和减速停车。行为规划器所做出的操作决策由有限状态机的状态设定。每个状态都有一个与之关联的进入动作(Entry Action),即首次进入某个状态时要执行的动作。对于我们的行为规划器,这些进入动作涉及设置必要的约束输出,以伴随行为决策。例如,一旦我们进入"减速停车"状态,就必须同时定义路径上的停车点。同样,"按限速行驶"状态的进入条件会设置要跟踪的限速。
- 有限状态机的第二组组成部分是状态转移(Transitions),它定义了从一个状态到另一个状态的转换。在我们的双状态示例中,我们可以从"按限速行驶"转移到"减速停车",也可以从"减速停车"转移回"按限速行驶"。请注意,也可以存在返回当前状态的转移,这会触发该状态的进入动作重复执行。每个状态转移都伴随着一组转移条件,在转换到下一个状态之前必须满足这些条件。在某个状态中,会持续监控这些转移条件,以确定何时应发生状态转移。
对于我们的简单示例,从"按限速行驶"转移到"减速停车"的条件包括:检查当前车道内是否有一个停车点位于阈值距离之内。同样,如果我们在停车点处已达到零速度,就可以从"减速停车"转移回"按限速行驶"。
这个双状态示例突出了基于有限状态机的行为规划器最重要的方面。随着场景和行为的数量增加,所需的有限状态机会变得显著更加复杂,拥有更多的状态和转移条件。
有限状态机可以成为行为规划的一个非常简单而有效的工具。我们可以将其视为行为规划定义的直接实现:它要求我们定义操作或状态,以及满足交通规则并检查与环境中其他动态和静态物体安全交互的局部规划约束或进入动作(即转移条件)。通过跟踪当前操作和驾驶环境的状态,只需考虑从当前状态出发的相关转移,从而大大减少了每次迭代需要检查的条件数量。
由于将行为规划分解为一组具有相互转移的状态,所需的各个规则保持相对简单。这导致了直接的实现方式,不同行为之间有清晰的划分。

然而,随着状态数量的增加,定义所有可能转移及其条件的复杂度会爆炸式增长。也没有显式的方法来处理输入数据中的不确定性和错误。这些挑战意味着,随着我们接近完全的L5级自动驾驶,有限状态机方法往往会遇到困难。但对于具有受限运行设计域(Operational Design Domain, ODD)、允许可管理数量状态的系统来说,它是一个极佳的起点。我们将在本讲的最后一个视频中探讨这些局限性以及行为规划的替代方法。
在本小节中,我们明确了行为规划问题的定义及其在整个运动规划系统中的角色;我们讨论了行为规划模块的标准输入和输出;我们介绍了有限状态机及其组成部分,并将其应用到了一个双状态行为规划问题中。

2. Handling an Intersection Scenario Without Dynamic Objects
2.1 Discretizing the Intersection
在上一小节中,我们介绍了行为规划器的概念,并描述了实现行为规划的基础——有限状态机。在本小节中,我们将看到如何构建系统以处理一个更完整的十字路口场景。我们将首先定义要处理的具体场景。然后,我们将研究如何将十字路口地图离散化为若干区域,以便在状态之间建立清晰的转换。接着,我们将定义完成给定场景所需的状态和转换,以确保安全高效地通过。最后,我们将强调确认行为规划系统正确性和准确性所需的测试流程。
我们将尝试处理的场景是一个四向十字路口,每个方向都有两条车道和停车标志。这样的十字路口示意图如下所示,其中红线代表车辆必须在其后方停车的停车线。

我们现在已经为行为规划器定义了一个非常受限的运行设计域(Operational Design Domain)。现在是实现行为规划器的时候了。让我们先来看看如何对十字路口进行离散化,以便我们能更简单地在这个环境中做出决策。
车辆应开始安全制动的路口区域被定义为路口的接近区(approaching zone),以红色高亮显示。车辆必须停车并等待适当时机才能继续前行的路口区域被称为停止区(at zone),以绿色高亮显示。最后,车辆实际穿越路口的区域被定义为在路口上(on the intersection),以橙色高亮显示。上述每个区域的大小根据两个主要因素动态变化:自车速度和路口大小。速度越高,我们需要更长的距离才能安全舒适地停车;路口越大,每个区域也必须越大。

2.2 State Machine Transitions
为了处理这个场景,我们需要三个驾驶动作:
- 速度跟踪:该动作仅受道路当前限速的限制。传统上,这是在进入路口任何区域之前,或在安全进入"在路口上"区域之后给出的动作。
- 减速停车:该动作强制物体的未来轨迹在到达停车点之前停止。
- 停车:该动作指示车辆停留在当前位置。

现在,我们将查看自车在此场景中遇到的不同情况,并找出编码正确行为规划解决方案所需的有限状态机元素。
让我们先看看自车进入路口区域之前的情况,此时它只有一个约束,即遵守道路的限速。当自车进入接近区(红色区域)时,它必须开始减速至停车标志,因此将转换到减速停车状态。从速度跟踪转换到减速停车的转换条件因此是进入接近区。

然后,一旦开始减速,自动驾驶汽车必须执行的下一个动作是在停车线前或路口的停止区内完全停下来。为了确保这一点,车辆保持在减速停车状态,直到它同时满足零速度和位于停止区内的位置。减速停车状态中的进入动作是建立一个安全的停车位置。由于这个场景的简单性,这是一个单一的停车位置,即由高清地图提供给规划器的停车线。

一旦完全停下,汽车进入停车状态。作为进入动作,启动一个计时器,确保车辆在停车状态停留三秒钟,然后再继续,这符合典型的驾驶规则。一旦计时完成,规划器自动转换到速度跟踪状态,并按照任务规划器提供的路线通过路口,无论是左转、右转还是直行。这就是使用有限状态机处理简单四向十字路口所需的全部计算。
在整个过程中,至关重要的是我们要理解作为人类专家如何分析该场景。这些需要在运行设计域定义中加以捕捉,我们需要确保创建一个完整的状态机,能够处理给定场景下可能出现的每一种情况。

对我们的状态机性能有重大影响的一个特殊问题是输入噪声问题。上述定义的状态转换条件是精确的,依赖于车辆到达停车点并精确达到零速度。即使没有其他动态物体需要检测,车辆的定位估计也可能包含噪声,无法精确满足这些条件。为了处理这种类型的输入噪声,我们可以引入噪声阈值超参数。这是一个小的阈值,允许接近零的速度被接受为已停车。

现在我们已经完成了有限状态机的创建,如何测试它是否有效呢?传统上,需要四个测试阶段来确认行为规划系统的功能,这遵循我们在第一节课程中关于整车安全评估的讨论。
- 首先,我们进行基于代码的测试,以确认代码逻辑是否正确。例如,基于代码的测试可以告诉程序员地图中设置的限速是否会被有限状态机产生为限速。然而,这些检查无法确认状态转换是否正确,或者状态是否能够处理给定场景中的所有情况。为此,我们必须查看程序代码是否按预期正确处理了所有情况。
- 接下来,我们进入仿真测试,在 Carla 等仿真环境中进行,状态机在其中执行其被设计处理的场景。这种类型的测试能够确认状态机的转换和状态覆盖是否正确。仿真中执行的测试数量应代表驾驶该场景时可能看到的所有情况,以捕捉程序员可能遗漏的任何边缘情况。很多时候,选择一组有代表性的测试并非易事,尤其是随着场景复杂性的增加。
- 一旦确信状态机在仿真中按预期运行,我们就进入封闭场地测试。这种测试针对特定场景,这些场景难以在仿真中精确确认,例如参数调优、噪声以及真实环境中感知输出的误差。
- 最后,我们进行道路验证测试。 所有先前的测试都是在高度受控的环境中进行的,道路测试可能高度不可预测,并经常以工程师无法想象的方式破坏系统。然后可以将场景的新变体纳入测试过程的早期阶段。


被折叠的 条评论
为什么被折叠?



