混合A* 中基于 Voronoi 势场的路径代价和 Voronoi 势场的实现测试

embedded/2024/10/19 7:30:07/

参考

Practical Search Techniques in Path Planning for Autonomous Driving 混合 A* 论文

Sensor-Based Exploration: The Hierarchical Generalized Voronoi Graph Voronoi 图论文

认识 Voronoi ,泰森多边形 voronoi 介绍和应用

Voronoi Field 和 Voronoi Diagram

沃罗诺伊图 Voronoi Diagram 又称作狄利克雷镶嵌或者泰森多边形。是一种离散区域分割方法。

  • 离散性:将空间划分为离散的区域,每个区域与一个生成点相关联。

  • 连续性:Voronoi边界是由相邻的生成点之间的距离确定的连续线段。

  • 局部性:每个点的Voronoi区域仅由其最近的邻近点决定,与其他点的位置无关。

fig.1 voronoi diagram 离散图

沃罗诺伊场 Voronoi Field 是一个连续的函数场,用于描述空间中的距离信息。

  • 连续性:Voronoi field 是一个连续的函数场,而不是离散的区域划分。

  • 定义:它基于一组特定点,为每个点定义一个场值,表示该点到最近的邻近点的距离。

  • 插值:Voronoi field 可以通过插值方法(如线性插值或高斯过程)计算出在整个空间中的值。

fig.2 voronoi field 连续的势场

混合 A* 中的 Voronoi 势场代价

用 voronoi 势场中路径点的势场值来描述路径与障碍物接近程度之间。

voronoi 势场定义如下:

\begin{cases} \rho_V(x,y)=(\frac{\alpha}{\alpha+d_{O}(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}, \quad &d_O\le d^{max}_O \\ \rho_V(x,y)=0, &otherwise \end{cases}

d_O(x,y) 是 (x,y) 到最近障碍物的距离,d_V(x,y) 是 (x,y) 到所在 Generalized Voronoi Diagram (GVD) 区域的边的最近距离。

\alpha>0 是控制势场衰减率常数,d_O>0 是控制势场最大有效范围常数,d_O^{max}>0 是地图中距离障碍物最远的距离。

Voronoi 场性质

  1. \rho_V(x,y)=0,\quad d_O\ge d^{max}_O

  2. \rho_V(x,y)\in[0,1] 在 (x,y) 上连续,因为 d_O(x,y) 和 d_V(x,y) 不会同时为 0;

  3. \rho_V(x,y) 只有在障碍物内才会达到最大值;

  4. \rho_V(x,y) 只有在 GVD 边上才为 0;

Voronoi 场优势

Voronoi 场的主要优势在于,场值与可导航空间(自由空间)成比例关系,即使是狭窄的开口,由于比例缩放,依然存在低势场区域(GVD 的边)

fig.3 混合 A* 论文中停车场的 voronoi 势场

图 fig.3 中,(a) 显示 Voronoi 势场,红色是障碍物,灰色部分是表示势场强度,颜色越黑,说明此处势场越强,距离障碍物越近。(b) 显示对应的 Voronoi 图,其中色块的边界就是势场为 0 的空间,在 (b) 中可以看到永远存在一条势场值为 0 的通道!(c) 表示在标准势场中,即使是狭窄通道仍具有高势能区域。

!!!注意!!!

图 3(c) 在原文中称为 standard potential field 标准势场,什么是标准势场?没有找到好的解释。在标准势场中,狭窄通道中仍有高势能区域。这说明在“标准势场”中,自由区间是高势能区域,障碍物是低势能区域。而在 costmap 中,自由空间是低数值区域,障碍物是高数值区域。

图 3(c) 中高势能区域是浅色,低势能区域是深色,这与 rgd 图一致,说明原文的标准势场图是用 rgb 图画的。

Voronoi 势场反映地图障碍物的相对距离,即使在狭窄区域也不会完全封闭。也就是说 Voronoi 势场图中,在非完全封闭区域,始终存在一条高势能通道。Voronoi 势场图可以用来找地图中离障碍物最远的通道。

Voronoi 图可以导出自由空间骨架,但对于运动学非完整性车辆或机器而言,这样的路径是不可直接使用。

Voronoi 势场的 costmap2d 插件实现,测试

Voronoi 势场用 costmap 显示,cost 值 254u 和 255u 作为障碍物显示。灰图是 costmap 的 map 显示。
绿色网络是 gridcells 数据格式,显示 gvd 网络。

fig.4 voronoi 势场的 costmap 显示
fig.5 voronoi 势场的 map 显示

更多的测试发现,对于不规则的地图 gvd 网络混乱,对于“凹”区域总会有 gdv 网络连接,其实观察原论文的图片也有这种问题

fig.6 混乱地图的 voronoi 势场的 costmap 显示
fig.7 凹地图的 voronoi 势场的 costmap 显示

凹地图的 gvd 分支剪枝效果不佳,需要自己另外实现效果。

我的做法是从提取的 gvd 图中计算交点和端点,从端点处开始沿着分支消除,遇到交点停止。

fig.8 凹地图中多余的 gvd 分支
fig.9 消除 gvd 凹处的分支

图 fig.9 中橙色 girdcells 数据就是消除多余分支后的 gvd,同时可以观察到障碍物凹处的势场值变连续了。虽然实现了效果,但是这种粗暴简单的做法计算量比较大,实际应用还需要改进数据结构算法

对于不规则,混乱的障碍物地图,可以通过“膨胀-腐蚀”操作平滑障碍物边缘,过滤噪点。这里就不测试了。


http://www.ppmy.cn/embedded/25464.html

相关文章

【数据结构】顺序表专题

前言 本篇文章我们来进行有关顺序表的专题训练,让我们一起来看一下有关顺序表的算法题 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 📝若有问题 评论区见 🎉欢迎大家点赞👍收藏⭐文章 1.移除…

修改后门ctime | Linux 后门系列

0x00 前情提要 在 alias 后门 | Linux 后门系列一文中,我们为了让后门完美一些,修改了后门文件的 atime、mtime,但是 ctime 一直没有办法修改,今天我们来把这一块补齐,让后门更加完美 atime -> access t…

golang反射

go反射 反射基本介绍应用场景基本使用结构体注意练习最佳实践遍历结构体的方法,调用接头体的方法,获取结构体的标签 反射 基本介绍 反射可以在运行时动态获取变量的各种信息,比如变量的类型(type)、类别(kind)如果是结构体变量,…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块) 一、思路图二、Util板块1、Splite板块(分词)(1)代码(2)测试及测试结果i、第一种测试ii、第二种…

43. UE5 RPG 实现敌人血量显示条

在上一篇文章中,我们实现了火球术伤害功能,在火球击中敌方目标,可以降低敌人20的血量,这个值现在是固定的,后面我们会修改火球的伤害设置。接着,我们也测试了功能是实现的,但是在正常的游玩过程…

MATLAB初学者入门(25)—— LQR控制器优化设计

LQR(线性二次调节器)控制器是一种常用的最优控制策略,用于设计系统的状态反馈控制器以最小化性能指标,通常是所有状态的加权平方和与控制输入的加权平方和。在MATLAB中,使用LQR控制器通常涉及定义系统模型、选择适当的…

[Meachines][Hard]FormulaX

Main $ nmap -sC -sV 10.10.11.6 --min-rate 1000 # echo 10.10.11.6 formula.htb>>/etc/hosts 创建一个新用户,登录 来到聊天窗口,发现普通用户无法使用 来到联系页面,测试跨站 {"first_name":"<img srchttp://10.10.16.6/s-h4ck13/>",&qu…

鸿蒙开发接口Ability框架:【@ohos.ability.wantConstant (wantConstant)】

wantConstant wantConstant模块提供want中action和entity的权限列表的能力&#xff0c;包括系统公共事件宏&#xff0c;系统公共事件名称等。 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导…