Hybrid A*论文,Practical Search Techniques in Path Planning for Autonomous Driving笔记

2023-05-16

Practical Search Techniques in Path Planning for Autonomous Driving

Code reference here:

  • KTH GitHub repository based on ROS and OMPL

1. Introduction and Related Work

The first step uses a heuristic search in continuous coordinates that guarantees kinematic feasibility of computed trajectories.

The second step uses conjugate gradient (CG) descent to locally improve the quality of the solution, producing a path that is at least locally optimal, but usually attains the global optimum as well.

2. Hybrid-State A* Search

与传统A star只能经过cell的center不同,本方法是可以取到cell的内部或边界点的。但是并不是一个cell中任意一点都能取到(在比较小的分辨率下),由于动力学约束的限制。

搜索空间为 ( x , y , θ ) (x,y,\theta) (x,y,θ)比传统的网格A star多了角度,均为离散量。

虽然这样得到的路径path不一定是最优(minimum cost)的,但是drivable的,而不是传统A star生成的piecewise-linear的形式。

注意(我的想法):A star类算法不同于RRT类采样算法,都不可避免地要面对网格划分这一问题,网格划分地过大,则路径最优性较差,网格划分地过小,则对于一定体积的robot没有意义(无法达到那样的精度,可能是动力学约束或分辨率太低,远小于模型大小);所以分辨率的选择也是问题。

整个hybrid A star过程分为两步,一是Heuristics,二是Analytic Expansion。

Heuristics:

Our search algorithm is guided by two heuristics.

These heuristics do not rely on any properties of hybrid-state A* and are also applicable to other search methods (e.g., discrete A*).

单纯从heuristic searching algorithm而言,不只是用于hybrid a star,也用于其他搜索方法。

启发式搜索的第一阶段使用non-holonomic-without-obstacles,不考虑障碍物的非完整性约束搜索方法(考虑车辆的非完整性约束),从 ( x , y , θ ) (x,y,\theta) (x,y,θ) ( x g , y g . θ g ) (x_g,y_g.\theta_g) (xg,yg.θg)的邻域(因为完全的精确,在离散空间内是无法达到的),完全忽略障碍物,得到最短路径,启发项;

这里有两个问题:

  • 首先是原文并不是这么翻译的,原文为To compute it, we assume a goal state of ( x g , y g , θ g ) = ( 0 , 0 , 0 ) (x_g,y_g,\theta_g)=(0,0,0) (xg,yg,θg)=(0,0,0) and compute the shortest path to the goal from every point ( x , y , θ ) (x,y,\theta) (x,y,θ) in some discretized neighborhood of the goal, assuming complete absence of obstacles. 这样看来的翻译是将goal设为全0,在其离散领域内的所有点寻找到goal的最短路径,尽管翻译是这样,但我暂时看不出这样做有什么意义,留一个TODO
  • 第二个问题是,原文说到We then use a max of the non-holonomic-without-obstacles cost and 2D Euclidean distance as our heuristic;这个cost和2D距离如何在and的情况下,作启发项h?

作者的解释是,这样的做法可以cut off search branches that approach the goal with wrong headings;我觉得使用欧氏距离做启发项的一项,或是comparative是有道理的,尤其是当NHWO项过大的时候,具体还需要看代码,或者继续读,留一个TODO

第二阶段忽略车辆的非完整性约束,采用2-D动态规划,仅使用障碍物地图计算到达目标点的最短距离。

解决U-shape的问题。

Analytic Expansion:

可以理解为,越趋近于goal,在每一个node的下一个child中,会有更大的频率插入无碰撞的Reed-Sheep曲线的check,若为真,停止搜索直接使用RS曲线。

3. Path-Cost Function Using the Voronoi Field

the author define Voronoi field as a field, whose concept comes from potential field and generalized Voronoi field.

文章中定义的Voronoi场来自potential field和Voronoi Diagram两个概念,相当于在GVD上应用了potential的方法。
ρ V ( x , y ) = ( α α + d o ( x , y ) ) ( d V ( x , y ) d O ( x , y ) + d V ( x , y ) ) ( d O − d O m a x ) 2 ( d O m a x ) 2 \rho_V(x,y)=(\frac{\alpha}{\alpha+do(x,y)})(\frac{d_V(x,y)}{d_O(x,y)+d_V(x,y)})\frac{(d_O-d_O^{max})^2}{(d_O^{max})^2} ρV(x,y)=(α+do(x,y)α)(dO(x,y)+dV(x,y)dV(x,y))(dOmax)2(dOdOmax)2
其中:

  • d O d_O dO为到最近obstacle的距离
  • d V d_V dV为到GVD的edge的距离,应该也是最近
  • α \alpha α为一个大于0的常数
  • d O m a x d_O^{max} dOmax作者虽然没有给出解释,但其是一个“安全值”,距离障碍物的距离超出该安全值后,该障碍物在场中的权重 ρ \rho ρ为0

α \alpha α d O d_O dO为大于0的常数,控制falloff rate和Voronoi场的最大影响范围;上式针对的是 d O < d O m a x d_O<d_O^{max} dO<dOmax的情况,如果不符合该情况,则 ρ V ( x , y ) = 0 \rho_V(x,y)=0 ρV(x,y)=0

上式具有如下的性质:

  • 如果 d O > d O m a x d_O>d_O^{max} dO>dOmax,则 ρ V ( x , y ) = 0 \rho_V(x,y)=0 ρV(x,y)=0
  • ρ V ( x , y ) ∈ [ 0 , 1 ] \rho_V(x,y)\in[0,1] ρV(x,y)[0,1],且关于 ( x , y ) (x,y) (x,y)连续
  • ρ V ( x , y ) \rho_V(x,y) ρV(x,y)在obstacle内部达到最大值
  • ρ V ( x , y ) \rho_V(x,y) ρV(x,y)在GVD的edge上达到最小值

使用作者提出的Voronoi field的好处是,没有传统的potential field那么保守,使得一些狭窄的,在原potential field中不能navigate的passage变得navigable,原文如下:

The key advantage of the Voronoi field over a conventional potential fields is the fact that the field value is scaled in proportion to the total available clearance for navigation.

稀疏点云似乎不能被用作规划,但稠密点云如何构建GVD,又如何从GVD构建VF,这是第三部分的关键问题。

这个问题可以从Google和论文代码中找到答案。

所以VD及其衍生的diagram,如果robot沿着或趋向于沿着他们的edge移动,这样的path是clear to obstacles的,但这并不一定是最优(比如时间,距离上),又或者根据GVD的edge扩张方法,或是本文中提到的VF场,来增加可行域的面积,为最优path提供先决条件。

本章节作者完成了VF的定义,从程序上理解为,输入一张map(可能是mat或什么数据格式),输出一张基于此map的VF图,之后的工作就交给planner去做了。

4. Local Optimization and Smoothing

分为两个优化阶段:

  • non-linear optimization on coordinates of the vertices, improves the length and smoothness of the solution
  • non-parametric interpolation, with higher resolution path discretization

given a sequence of vertices x i = ( x i , y i ) , i ∈ [ 1 , N ] x_i=(x_i,y_i),\quad i\in [1,N] xi=(xi,yi),i[1,N]

  • o i \textbf{o}_i oi,距离vertex最近的obstacle的位置
  • Δ x i = x i − x i − 1 \Delta \textbf{x}_i=\textbf{x}_i -\textbf{x}_{i-1} Δxi=xixi1, the displacement vector at the vertex
  • Δ ϕ i \Delta \phi_i Δϕi, the change in the tangential angle at the vertex

and Δ ϕ i \Delta \phi_i Δϕi
Δ ϕ i = ∣ tan ⁡ − 1 Δ y i + 1 Δ x i + 1 − tan ⁡ − 1 Δ y i Δ x i ∣ \Delta \phi_i = | \tan^{-1}\frac{\Delta y_{i+1}}{\Delta x_{i+1}} - \tan^{-1}\frac{\Delta y_i}{\Delta x_i} | Δϕi=tan1Δxi+1Δyi+1tan1ΔxiΔyi
The objective function is
ω ρ ∑ i = 1 N ρ V ( x i , y i ) + ω o ∑ i = 1 N σ o ( ∣ x i − o i ∣ − d m a x ) + ω k ∑ i = 1 N − 1 σ k ( Δ ϕ i ∣ Δ x i ∣ − k m a x ) + ω s ∑ i = 1 N − 1 ( Δ x i + 1 − Δ x i ) 2 \omega_{\rho}\sum_{i=1}^{N}\rho_V(x_i,y_i)+\omega_o\sum_{i=1}^{N}\sigma_o(|\textbf{x}_i-\textbf{o}_i|-d_{max})+\omega_k\sum_{i=1}^{N-1}\sigma_k(\frac{\Delta \phi_i}{|\Delta \textbf{x}_i|}-k_{max})+\omega_s\sum_{i=1}^{N-1}(\Delta \textbf{x}_{i+1}-\Delta \textbf{x}_i)^2 ωρi=1NρV(xi,yi)+ωoi=1Nσo(xioidmax)+ωki=1N1σk(∣ΔxiΔϕikmax)+ωsi=1N1(Δxi+1Δxi)2

  • ρ V \rho_V ρV is Voronoi field, defined in part3
  • k m a x k_{max} kmax is the maximum allowable curvature of the path (defined by turning radius of the car)
  • σ o \sigma_o σo and σ k \sigma_k σk are penalty functions (empirically, simple quadratic penalties can work well)
  • ω \omega ω are weights

and for each items

  • The first term of the cost function effectively guides the robot away from obstacles in both narrow and wide passages.
  • The second term penalizes collisions with obstacles.
  • The third term upper-bounds the instantaneous curvature of the trajectory at every node and enforces the non-holonomic constraints of the vehicle.
  • The fourth term is a measure of the smoothness of the path.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hybrid A*论文,Practical Search Techniques in Path Planning for Autonomous Driving笔记 的相关文章

  • ArrayList 搜索 .net

    以下是存储在我的数组列表中的数据的格式 A Amsterdam B Brussels C Canada 如此等等 我想通过仅传递前几个字符直到 来搜索我的数组列表 因此 如果我有类似 AA Test 的东西 那么我只想通过 AA 来检查它是
  • Magento 路由器 URL - 需要连字符的路径名称

    假设我使用自定义控制器 其 url 路径 前端名称为 customcategory 好吧 显然如果我有一个名为 TestController php 和indexAction的控制器文件 url 路径将是 customcategory te
  • 使用带有通配符的 jquery grep 搜索对象数组

    我正在使用 jquery grep 搜索对象数组 并希望在搜索中包含通配符 例如 我有一个数组如下 courses code ENCH3TH otherFields otherStuff code ENCH3THHS1 otherField
  • Process.Start() 可以考虑系统路径吗?

    我已经对此进行了一段时间的搜索和实验 但我没有运气 我正在尝试制作一个控制台程序来自动执行一些我无法使用 BAT 文件完成的任务 我想从 Windows SDK 调用 signcode exe 该 bin 文件夹包含我的系统路径中的所有工具
  • Twitter api - 搜索太复杂?

    知道为什么 Twitter 会抛出这个错误吗 GET https search twitter com search json q Middle 20Tennessee 20State 20Blue 20Raiders 20Florida
  • golang中如何将相对路径解析为绝对路径?

    节点中是否有类似 path resolve 的API 或者有什么东西可以做同样的事情 例如 nodejs代码 path resolve sample sh 应该得到 home currentuser sample sh 解决 表示用户主目录
  • Bing 图像搜索 API 按图像大小过滤

    我正在使用 jsonp 和 jquery ajax 来使用 Bing 图像搜索 API 我能够检索搜索结果 但我无法找到按图像大小过滤结果的方法 我在文档中找不到任何与此相关的内容 有谁知道是否有一种方法可以按图像大小过滤结果或对此进行任何
  • 在java中打开Windows资源管理器

    我一直在 Stack Overflow 上寻找这个问题的答案 但找不到适合我的答案 使用 Java 如何创建一个将资源管理器窗口启动到指定目录的按钮 如果可能的话 如何使其适用于 OSX 和 Linux 我不确定它在其他操作系统中如何工作
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • 与平台无关的文件路径?

    如何在 Python 中使用应用程序文件夹内的文件 当然与平台无关 与此类似的东西 bin sh mypath 0 LIBDIR mypath modules 您可以使用os path及其函数 负责处理特定于操作系统的路径 gt gt gt
  • svg路径指针事件-点击检测

    我正在编写一些 HTML 以便可以使用 HTML SVG 和 PATH 标签绘制贝塞尔曲线 我的曲线效果非常好 现在我想添加一项功能 如果用户将鼠标悬停在曲线上 我会更改颜色 但实际情况是 SVG 创建了一个包含路径的大框 并捕获所有点击
  • 如何在 R 中使用别名运行系统可执行文件?

    假设我正在 R 中运行系统命令来运行executable inputfile lt path myfile txt 我该如何更换 path myfile txt在下面的命令中inputfile如下面命令所示 system executabl
  • 在 numpy 数组中查找满足条件的大量连续值

    我在 numpy 数组中加载了一些音频数据 我希望通过查找静音部分 即一段时间内音频幅度低于特定阈值的部分 来对数据进行分段 一个非常简单的方法是这样的 values join 1 if abs x lt SILENCE THRESHOLD
  • Windows 内核中可能的最大文件名长度

    我想知道 什么是longestWindows 内核允许的可能名称长度 例如 我知道内核使用UNICODE STRING结构来保存所有对象路径 并且由于宽字符字符串的字节长度存储在USHORT 允许最大路径长度为 2 15 1 个字符 有没有
  • 如何序列化 android.graphics.Path 对象

    我正在尝试将 Android graphics Path 对象存储在内部设备内存中 有谁知道如何序列化 android graphics Path 对象 另外 还有其他方法来存储 Path 对象吗 谢谢 我这样做的方法是从原始 Path 类
  • 以编程方式访问字典中任意深度嵌套的值[重复]

    这个问题在这里已经有答案了 我正在编写一个 Python 脚本 其中给出了以下格式的字符串列表 key1 key2 key2 key21 key211 key2 key22 key3 列表中的每个值对应于字典中的一个条目 对于结构如下的条目
  • cygwin中刷新windows用户的环境变量

    我想在执行 setx VARNAME VARVALUE 特别是路径 后刷新 cygwins 环境 export VARNAME VARVALLUE 不是一个选项 因为如果导出的值是路径 类似于 UNIX 格式 我需要转换导出的值 但 VAR
  • 在代码中创建时 UISearchDisplayController 不工作?

    我正在开发一个选项卡栏应用程序 其中一个选项卡有一个连接到 UISearchBar 的 UISearchDisplayController 所有这些都已连接到 NIB 中并且正在工作 当我点击搜索栏时 范围 和 取消 按钮会飞入等 并且搜索
  • 在 SVG 路径中动态创建渐变层

    我正在使用 SVG 创建动态路径 我现在希望在我的路径中添加渐变 但我被困住了 按照我尝试的方式 我的渐变沿着图 2 所示的路径进行 而我要求它是图 1 中的那种 Current 我的渐变和描边定义如下
  • 使用php表单更改href链接

    我正在制作一个带有搜索栏的网站 我想让搜索栏在 搜索 并显示结果后具有交互性 所以我希望 href 根据正在使用的 Id 进行更改 例如 有人搜索 Pinecones 如果它在数据库中 它将有一个 ID 在本例中是 4 一旦他们搜索它 它就

随机推荐