Bootstrap

百度Apollo5.0规划模块代码学习(四)开放空间回退决策分析

1 百度Apollo帮助文档

关于开发空间的相关介绍可以参考Apollo帮助文档:apollo/docs/specs/Open_Space_Planner.md。

简单来说,就是开放空间规划算法是针对倒车停车和急转弯开发的一种算法。
此算法接受来自两个不同来源的输入:
-感知数据,包括但不限于障碍物;
-通过高清地图获得的感兴趣区域(ROI);
一旦数据就位,就会触发开放空间规划器。算法可以分为两步。

其算法结构如下图所示:

第一步:基于规划的搜索
在步骤1中,会为汽车生成原始轨迹。该阶段在算法中应用车辆动力学模型,以创建一系列距离等距点的原始轨迹,如下图所示。

红线表示混合动力A*的原始轨迹输出,并发送到下一步,优化以计算绿色平滑线。

第二步:优化
这一步骤涉及两个主要任务,
-使轨迹平滑,以获得更好的驾驶舒适性体验,并使控制模块更容易跟踪
-确保避免碰撞

将接收到的原始轨迹作为迭代优化的初始猜测点。生成的结果是一组点,这些点分布不均匀,但靠近转弯处,而线性路径上的点分布更广。
这不仅可以确保更好的转弯,而且随着时间/空间的固定,点越近,汽车的速度就越慢。这也意味着在这一步的速度跟踪是可能的,但有更合理的加速,制动和转向。

目前,在规划阶段,开放式空间规划器用于两种停车方案,即:
1 代客泊车
这种情况下,设计的目的是使用之字形轨道停车在一个指定的停车点。
2停车
这种情况的目的是沿着路边停车,包括正常或需要平行停车。

2 论文(Optimization-Based Collision Avoidance)

直接看该论文的第六部分,自动泊车示例

在本节中,将汽车建模为一个矩形,然后使用第4节中描述的全尺寸公式。结果表明:即使在有限的环境中,我们的建模框架允许我们找到无障碍停车场的轨道。
考虑两种情况:反向停车和平行停车(分别如下图所示)。
反向停车
平行停车

2.1 环境和障碍物模型

对于反向停车方案,假设停车位宽2.6m,长5.2m。汽车可以驶入的道路宽度为6m,见图。
对于平行停车方案,停车位深2.5m,长6m,机动空间宽6m。
请注意,倒车停车场景中的障碍物可以用三个轴对齐的矩形来描述,而平行停车场景中的障碍物可以用四个轴对齐的矩形来描述。在这两种情况下,受控车辆被建模为尺寸为4.7×2 m的矩形,其方向由车辆的偏航角决定。

2.2 车辆动力学和成本函数

汽车动力学模型采用经典的运动自行车模型描述,这非常适合于在典型的停车场景中使用。状态(x,y)对应于后轴的中心,而φ是相对于x轴的偏航角,v是相对于后轴的速度。输入为转向角δ和加速度a,因此,车辆的连续时间动力学如下:
在这里插入图片描述

其中,L=2.7m是车辆的轴距。转向角限制在±0.6rad(约34度),转向速度为δ∈[-0.6,0.6]rad/s;加速度限制在±1 之间,车速度限制在−1和2 m/s之间。连续时间动力学采用前向欧拉方程离散。最后,使用成本函数,即考虑离散时间和控制力之间的加权和。

2.3 初始猜测

非凸优化问题的解质量很大程度上取决于提供给数值求解器的初始猜测。不幸的是,由于无法考虑车的非完整动力学,在四分之一飞行器的例子中使用的 A ∗ A^{^{*}} A算法通常会提供较差的热启动。为了解决这个问题,我们使用了一个经过修改的版本,被称为混合 A ∗ A^{^{*}} A。混合 A ∗ A^{^{*}} A的主要思想是使用一个简化的车辆模型和状态(x,y,φ),以及有限数量的转向输入来生成一个粗略的停车轨迹。与 A ∗ A^{^{*}} A类似,混合 A ∗ A^{^{*}} A划分状态空间并执行树搜索,其中节点使用简化的车辆模型进行扩展。
图6和图7描述了从混合A*算法获得的两个轨迹。注意,由于状态和输入的离散化,混合A产生的路径是什么?与图4和图3所示相比,似乎更“砰砰”,更不“平稳”。
在这里插入图片描述

2.4 仿真结果

为了评估公式(15)和(18)的性能,我们研究了反向和平行轨迹规划问题。
在这里插入图片描述在这里插入图片描述
对于这两种情况,我们考虑了不同的起始位置,但在x=0 m处有一个固定的结束位置,并研究了每种方法的计算时间。起始位置是在x∈[−10,10]m和y∈[6.5,9.5]m范围内对机动空间进行网格划分产生的,其中x方向21个网格点,y方向4个网格点,见图8。
在这里插入图片描述
所有起始点的方向为 φ = 0 \varphi=0 φ=0,共84个起始点。利用混合 A ∗ A^{^{*}} A算法给出了地平长度n。优化问题再次通过编程Julia[51]中的建模工具箱跳转实现,并使用IPopt[42]作为数值求解器。

在这里插入图片描述
表2列出了距离的计算时间和有符号的距离公式,表2表明距离公式通常比有符号距离公式更快。这并不奇怪,因为有符号距离公式由于存在松弛变量(m),具有更多的决策变量。
在这里插入图片描述
平行停车的计算时间如图9和表2(下半部分)所示。与反向停车情况类似,我们发现两种方法都有100%的成功率,同样由于存在松弛变量,有符号距离公式比距离公式(平均0.87 s)需要更长的计算时间(平均1.67 s)。与倒车停车相比,平行停车在计算上要求更高。我们认为这是因为平行停车的路径通常比反向停车的路径长,因为汽车首先需要向右行驶,然后才能返回停车场,见图5。

2.5 混合 A ∗ A^{^{*}} A算法

在此不展开具体介绍 A ∗ A^{^{*}} A算法,只是大体根据论文做一下介绍。
在这里插入图片描述
如图所示,

左: A ∗ A^{^{*}} A与单元格中心成本关联,并且只访问与网格单元格中心相对应的状态。
中: D ∗ D^{^{*}} D将与单元格顶点成本相关联,并允许单元格间的任何线性路径。
右:混合 A ∗ A^{^{*}} A将一个连续状态与每个单元格关联,得分是其关联连续状态的成本。

混合状态 A ∗ A^{^{*}} A的工作方式如下:
与传统的 A ∗ A^{^{*}} A一样,搜索空间是离散化的,在网格上加上一个图,该图单元格的中心在搜索图中充当邻居。但是,与传统的 A ∗ A^{^{*}} A不同,我们的混合状态A*将每个网格单元与车辆的连续3D状态关联起来。搜索过程如下:
最初,车辆的当前连续状态与初始搜索节点关联。当一个节点从一个 A ∗ A^{^{*}} A的打开列表中弹出时,它通过将几个转向操作(在我们的实现中有三个:max-left, no-turn,max-right)应用到与该节点关联的连续状态来展开。新的子状态是通过车辆的运动模型生成的。对于这些连续的子状态中的每一个,我们计算一个网格单元。
然后,如果具有相同网格单元的节点已经存在于 A ∗ A^{^{*}} A打开列表中,并且该节点的新成本低于当前成本,则会更新该节点的连续状态,并在打开列表中重新确定该节点的优先级。

;