优化过后的基于采样的路径规划算法(RRT Star)

2023-10-18 01:10

本文主要是介绍优化过后的基于采样的路径规划算法(RRT Star),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


Original RRT的一些缺陷

  • 所得到的的路径并不是最短/最优
  • 由线段连接成的路径不光滑,不太适合机器人去执行,如下图所示。
    在这里插入图片描述

RRT Star

是针对性地去解决RRT当中路径不是最优的情况

伪代码

RRT Star大体上与RRT是一致的
在这里插入图片描述

  1. 采样得到空间中的点X_rand。
  2. 通过在X_rand周围进行搜索,找到其最近的领域节点X_near,搜索过程中可以用KT-Tree进行加速。
  3. 通过X_near往X_rand移动一定距离,可以得到一个新的点X_new。
  4. 此时就与RRT当中有些不同了,在RRT当中,找到X_new之后是与X_near直接相连的,但是在RRT*当中,找到了X_new之后,就会在X_new之间找到一个范围,在这个范围内,画一个以R为半径的圆,继续搜索其他的点, 如下图所示,找到了X_new,X1,X2这三个节点。
    在这里插入图片描述
    伪代码中的NearC就代表了找附近节点的这么个过程,在RRT当中,找到X_new后,其父节点就是X_near,但在这就不同了,这时把三个节点都通过直线连接起来,下一步做一个操作,就是当前的终点是X_new,从X1,X2,X_near都可以到达X_new,现在就看这三个点中的哪个点到这个最初的大红色起点的Cost是最小的。(动态规划思想)。在这里插入图片描述
    显然是从X_near到达红色起点路径最短。
    在这里插入图片描述
    这时候X_near就被选为X_new的父节点。

综上,就完成了一次ChooseParent,AddNodEdge的过程。


rewire()

RRT Star更为突出的特色,就是结尾处的这个rewire()函数,帮助其修改连接过程,使得路径更优化。
举个例子:
在这里插入图片描述
在图中,X1到起始节点有两条路径可以选择,一条是红色的一条是蓝色的,当选红色的路径时,X1的父节点是X_near;当选蓝色的路径时,X1的父节点是X_new。通过计算两条路的Cost可知,红色的Cost<蓝色的Cost,此时就不进行Rewire操作,继续保持原有的红色路径行进。

在这里插入图片描述
在图中,X2到起始节点有两条路径可以选择,一条是红色的一条是蓝色的,当选红色的路径时,X2的父节点是X1;当选蓝色的路径时,X2的父节点是X_new。通过计算两条路的Cost可知,红色的Cost>蓝色的Cost,此时就进行Rewire操作,更改X2的父节点为X_new,走蓝色的路径,如下图所示。
在这里插入图片描述
rewire过程不断迭代,从而使得路径不断优化。
RRT Star在找到一条路径的时候并不会停止,而是会继续进行寻找,直到找到最优的路径为止。
这也是为什么RRT Star可以找到最优化路径的原因。


Kinodynamic-RRT*

之前说过了未优化的RRT,由线段连接成的路径不光滑,在运动学上是接受的,但是现实当中不太适合机器人去执行,之前的RRT也没解决这个问题,有的研究者就提出了Kinodynamic-RRT来解决这个问题。

Kinodynamic

之前的步骤与RRT Star都是一样,最主要的是如何连接X_near与X_new,在RRT以及RRT Star当中,直接用直线进行连接;而Kinodynamic是找符合机器人约束的曲线作为路径,下图是两algorithm的效果图。
在这里插入图片描述
在这里插入图片描述
上图左边,RRT* 类的算法,找到了X_new,下意识的进行直线连接,但是直线穿过了障碍物,只能舍去,但是运用了Kinodynamic-RRT* ,就会有一条平滑的路径,绕过了障碍物。
Kinodynamic-RRT* 演示
Kinodynamic-RRT* 相关资料


Anytime-RRT*

当通过树找到了路径,机器人就会沿着树往前走,当机器人往前走的过程中,这个树还是实时的在构建,实时的在更新,在寻找路径,做了一个实时更新的过程。

Anytime-RRT Star的要义就是,将自己的起始点进行实时更新,最初的起始点就是起始点,每走一步起始点就变成了当前点。

相比于之前的RRT,就是先规划出一条,很死板,固定死了,Anytime-RRT* 能更好的去适应环境变化大的情况。

Anytime-RRT* 相关资料


其他的Sampling-Based Algorithm

Informed RRT*

前面也说了,RRT是在一个Space当中均匀的进行撒点,然后不断优化路径,但是这样工作量很大,而且浪费也高,这下研究者就提出了Informed RRT Star,将采样的范围限定成了椭圆。只需要在有用的区域进行撒点。在这里插入图片描述
在这里插入图片描述
以路径的常数来作为椭圆方程中的常数,这就是为什么椭圆越来越扁的原因。
这样采样的范围就会快速收缩,越来越快得到最优的路径。
Informed RRT* 相关资料

Cross-Entropy motion planning

在这里插入图片描述
轨迹生成后,就在各个节点周围进行采样,每个圈都是一个高斯采样,不断进行路径优化,就会得到后面的几条路径。
CEMP流程

在这里插入图片描述


Conclusion

除此之外,还有很多Advanced Sampling Based Algorithm,欢迎评论区交流👏🏻。

这篇关于优化过后的基于采样的路径规划算法(RRT Star)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/229181

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系