当前位置:网站首页>fast planner中拓扑路径搜索
fast planner中拓扑路径搜索
2022-08-03 10:57:00 【X uuuer.】
首先是对应文章中的拓扑路径搜索原理进行介绍:
为什么要进行拓扑路径搜索?
即为了生成几何引导轨迹(拓扑路径=几何引导轨迹)。why?
原因:GTO仅依赖于ESDF提供的梯度信息时,在通过“谷”(a)或“脊”(b)等类型的复杂障碍物时,ESDF梯度会发生突变,导致整体的目标函数的梯度在轨迹的不同部分产生相反的方向,从而导致轨迹优化失败。

因此:1、引入了额外的信息产生一个几何引导路径即拓扑路径
2、将碰撞段中的轨迹重规划分为两阶段:第一阶段,通过几何引导路径产生预热轨迹(a);第二阶段,通过GTO利用ESDF的梯度信息,将预热轨迹进一步的优化为平滑、安全、动态可行的轨迹(b)。

拓扑线路图的生成
算法:

引入两种不同的图节点,即guards和connectors,类似于PRM [19]的可视性。
guards负责探索自由空间的不同部分,并且任意两个guards ,g1和g2彼此不可见(g1g2连接线处于碰撞中)。
在主循环之前,在起点s和终点g创建两个guards。
每次一个采样点对所有其他guards不可见时,在该点创建一个新的guard(第6-7行)。
为了形成路线图的路径,connectors用于连接不同的guards(第7-19行)。
当一个采样点正好对两个guards可见时,创建一个新的connectors,或者连接guards以形成拓扑上不同的连接(第19-20行),或者替换现有的connectors以形成更短的路径(第16-17行)。
设置时间限制(tmax)或采样数限制(Nmax)以终止循环。
图示:

具体分析:
整体流程
1、通过拓扑线路图生成一系列path
2、对冗余的path进行short Prune,并只保留属于不同UVD类前Kmax个最短path
3、首先利用PGO对Kmax个最短path进行优化生成预热轨迹,最后再利用GTO对预热轨迹进行二次优化,最后选取COST最小的path。
路径的缩短
从Alg.1获得的一些路径可能绕道。这样的路径是不利的,因为在PGO的第一阶段它会使轨迹过度变形,使其变得不平滑。因此,Alg.2为通过深度优先搜索找到的每个Pr找到拓扑等价的捷径路径Ps。

该算法将Pr均匀离散为一组点Pd。
在每次迭代中,如果pd中的一个点Pd从Ps中的最后一个点看不到(第3-4行)
则找到阻挡Ps.back()视图的第一个被占用体素的中心(第5行)。
然后,该点在垂直于ld的方向上被推离障碍物,并与pb处的ESDF梯度共面(第6行)
之后,该点被附加到Ps(第7行),该过程继续,直到到达最后一点。
效果:

路径的修剪
虽然在Alg.1,避免了两个guards之间的冗余连接,在s和g之间可能存在少量冗余路径。为了完全排除重复的路径,我们检查任意两条路径之间的等价性(UVD),并且只保留拓扑上不同的路径。(就是通过UVD,只保留不同UVD的路径,减少路径)

UVD(左)和VD(右)的比较。一条路径上的每个红点都会转换为另一条路径上的绿点。任意两个关联点对应于UVD中的相同参数s,而VD中不是相同参数s。
它们都定义了两条路径τ1(s)和τ2(s)之间的连续映射,其中τ1(s)上的一个点通过一条直线变换为τ2(s)上的一个点。主要区别在于,对于UVD,点τ1(s1)映射到τ2(s2),其中s1 = s2,而对于VD,s1不一定等于s2。在概念上,UVD不太普遍,它是VD类型的子集的特征。实际上,它捕获的不同路径的类别比VD略多,但等价性检查的成本要低得多。
边栏推荐
- 袋鼠云思枢:数驹 DTengine,助力企业构建高效的流批一体数据湖计算平台
- 多态详细讲解(简单实现买票系统模拟,覆盖/重定义,多态原理,虚表)
- 用于发票处理的 DocuWare,摆脱纸张和数据输入的束缚,自动处理所有收到的发票
- DOM对象能干什么?
- Why is the new earth blurred, in-depth analysis of white balls, viewing pictures, and downloading problems
- [Output each bit of an integer, from high to low.With and without recursion]
- build --repot
- 成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...
- STM32入门开发 介绍SPI总线、读写W25Q64(FLASH)(硬件+模拟时序)
- 程序员架构修炼之道:如何设计出可持续演进的系统架构?
猜你喜欢

机器学习(第一章)—— 特征工程

Summary of redis basics - data types (strings, lists, sets, hashes, sets)
![[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly](/img/19/a3f58d5a1150d99571205a7e2f7345.png)
[LeetCode—Question 2 Sum of Two Numbers Detailed Code Explanation ] The source code is attached, which can be copied directly

The way of programmer architecture practice: how to design a sustainable evolution system architecture?

深入解析分布式文件系统的一致性的实现

Dva.js 新手入门指南

图新地球为什么很模糊,白球、看图、下载问题深度剖析

complete knapsack problem

深度学习100例——卷积神经网络(CNN)实现服装图像分类

Matplotlib
随机推荐
FR9811S6 SOT-23-6 23V,2A同步降压DC/DC转换器
Machines need tokens more than people
图新地球为什么很模糊,白球、看图、下载问题深度剖析
GBase 8c分布式数据库,数据如何分布最优?
全新的Uber App设计
本周四晚19:00知识赋能第4期直播丨OpenHarmony智能家居项目之设备控制实现
[华为云在线课程][SQL语法入门][学习笔记]
开源一夏 | 教你快速实现“基于Docker快速构建基于Prometheus的MySQL监控系统”
Question G: Word Analysis ← Questions for the second provincial competition of the 11th Blue Bridge Cup Competition
Matplotlib
试题G:单词分析 ← 第十一届蓝桥杯大赛第二场省赛赛题
go——并发编程
Dry goods!A highly structured and sparse linear transformation called Deformable Butterfly (DeBut)
How to use outside the PHP command in the container
【TypeScript】Why choose TypeScript?
MATLAB Programming and Applications 2.6 Strings
谷歌实用插件分享
type="module" you know, but type="importmap" you know
面试官:工作两年了,这么简单的算法题你都不会?
如何改变sys_guid() 返回值类型