RRT与PRM一样,也是概率完备且不最优的。概率完备是指只要解存在就一定能在某一时刻找到。但解不一定是最优的。RRT与PRM相比,有一个优势就是,它在构建图的过程中就在寻找路径。

RRT的主要算法流程

这份基于matlab的代码很好的展示了RRT的算法流程

RRT的优劣分析

优势:

  • 相对于PRM更具有目标导向,它在构建图的过程中就在寻找路径。
  • 无需对系统进行建模,无需对搜索区域进行几何划分,在搜索空间的覆盖率高,搜索的范围广,可以尽可能的探索未知区域。

劣势:

  • RRT得到的路径往往不是最优的。有比较大的优化空间。
  • RRT是在整个地图空间中随机采样点,这样全范围的采样往往效率不高。可以考虑启发式的采样,让采样的点更具有目标导向。
  • 在狭窄的通道里不易获得采样点。所以有时无法通过狭窄通道。

在RRT上的改进

Bidirectional-RRT/RRT-Connect

算法流程:

关于双向RRT的介绍来源于:https://www.cnblogs.com/21207-iHome/p/7210543.html

RRT*

RRT* 完全继承了RRT的特性,并在其基础上扩展了两个新的特性。正是由于新特性的加入,RRT* 可以生成更优的路径。同时由于算法步骤的增加和collision check的增加,计算消耗也增加了。
下面是RRT* 的算法流程:

其实整个RRT* 算法可以分为三个大的部分。第一部分是继承至RRT的。这一部分和RRT是一样的,就是寻找到znewz_{new}znewznearestz_{nearest}znearest。这一过程就是伪代码中的4,5,6步骤。

near neighbor search
在这一步骤中,我们要为新得到的znewz_{new}znew找一个合适的父节点。思路是,以znewz_{new}znew为圆心,以固定的半径rrr画圆。落在该圆范围内的节点就是znewz_{new}znew潜在的父节点。我们将znewz_{new}znew与每个邻近的节点相连(如下图节点aaabbb),计算znewz_{new}znew通过哪个邻近节点到达zinitz_{init}zinit的cost最小。注意,这里的cost一般是指路径长度。

最终我们会发现,znewz_{new}znew通过znearestz_{nearest}znearest到达zinitz_{init}zinit路径最短。这时znearestz_{nearest}znearest就会设置成znewz_{new}znew的父节点。

rewiring tree operations
到这一步时,znewz_{new}znew已经和znearestz_{nearest}znearest建立了连接,形成了一条新的边。这时我们要考虑a节点和b节点通过znewz_{new}znew到达zinitz_{init}zinit路径会短一点吗?从我画的图直观来看a节点和b节点原来的连接似乎使得路径更短。所以可以保留其原来的连接,不进行更改。

为了说明这一步骤的功能,我们做一个假设。我认为b节点通过znewz_{new}znew到达zinitz_{init}zinit路径会短一点,即红色路径比黑色路径短。这时会发生什么? a节点和b节点间的连接会断开,b节点会将自己的父节点改为znewz_{new}znew

通过不断迭代上述步骤,RRT*会逐渐生成越来越短的路径。

RRT algorithm illustrative example

https://blog.csdn.net/ljq31446/article/details/78867011

A Comparison of RRT, RRT* and RRT*-Smart Path Planning Algorithms

Informed RRT*

在寻找到第一条可行的路径前,Informed RRT* 所做的工作与RRT* 是一样的。不同之处在于,Informed RRT* 使用初始路径的长度来画一个以起始点和终止点为焦点的椭圆。

随着迭代的进行,路径会越来越短。椭圆的面积也越来越小。因为采样点的区域被限定了,采样效率更高。收敛到最优路径花的时间也更少。

下图是RRT* 和Informed RRT* 的效果图。可以看到Informed RRT* 只在限定的椭圆内优化路径。当路径优化到相同的cost时,RRT* 比Informed RRT* 多花了8倍多的时间。

informed

论文:
Informed RRT*: Optimal sampling-based path planning focused via direct sampling of an admissible ell

关注公众号《首飞》回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2等机器人行业常用技术资料。

对Rapidly-exploring Random Trees(RRT)路径规划方法的理解相关推荐

  1. 对Probabilistic Road Map(PRM)概率路图路径规划方法的理解

    PRM的总体思路 基于采样的路径规划方法在原理上与基于搜索的路径方法有较大区别.基于搜索的路径方法,如A*和Dijkstra,常常用于grid地图.它们需要搜索目标点到终点间的所有栅格.基于采样的路径 ...

  2. RRT(rapidly exploring random tree)算法学习笔记,机器人自主探索,路径规划

    一.算法描述: 1.主要思想 简单来说, RRT算法是一种树型算法,它由一个起始点Xinit作为树的起始节点(或者叫根节点),然后从这个起始点进行随机生长,通过随机采样增加叶子节点Xnew的方式,生成 ...

  3. RRT路径规划算法(matlab实现)

    基于快速扩展随机树(RRT / rapidly exploring random tree)的路径规划算法,通过对状态空间中的采样点进行碰撞检测,避免了对空间的建模,能够有效地解决高维空间和复杂约束的 ...

  4. RRT路径规划算法在二维仿真环境中的应用 -- Python代码实现

    在上一节中,介绍了 RRT 算法的原理,这一节将一步步实现 RRT 路径规划算法在二维环境中的路径规划,来进一步加深对 RRT 算法的理解. 二维环境的搭建 我们将搭建下图所示的二维环境,绿色点为起点 ...

  5. python路径规划算法可视化_基于粒子群算法的牙齿正畸路径规划方法python实现

    这篇是基于粒子群算法的牙齿正畸路径规划研究的python实现,参考的是徐晓强等人的<基于改进粒子群算法的牙齿正畸路径规划方法>,与这篇文章的区别在于: 1.徐等的文章设计了一种改进的粒子群 ...

  6. matlab8邻域搜索算法,一种基于可搜索连续邻域A*算法的路径规划方法与流程

    本发明涉及的是一种UUV全局路径规划方法. 背景技术: 无人水下航行器(Unmanned underwater vehicle,UUV)作为一种高技术手段,在海洋这块未来极具价值的发展空间中起着至关重 ...

  7. 栅格法路径算法C语言,基于地图栅格与QPSO算法结合的机器人路径规划方法与流程...

    本发明属于机器人路径规划领域,提出一种基于地图栅格与QPSO结合的机器人路径规划方法. 背景技术: 移动机器人路径规划是寻找一条无碰撞的可行路径问题的方法.近些年,群智能优化算法逐渐成为移动机器人路径 ...

  8. opencascade实现一些刀具路径规划方法

    opencascade实现一些刀具路径规划方法 学习opencascade,通过输入零件的内.外边界轮廓环(红色标出),实现一些常见刀具加工路径算法(绿色标出).

  9. 基于粒子群算法的智能车辆避障路径规划方法研究

    基于粒子群算法的智能车辆避障路径规划方法研究 1.环境生成 1.1 环境生成方法的选择 1.2 坐标法生成环境 1.3 车辆简化 1.4 障碍物数据 2.粒子初始化 2.1 速度迭代设置 2.2 避障 ...

最新文章

  1. MySQL主从同步问题集
  2. JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
  3. AVL树和红黑树区别
  4. 用CRT查找内存泄漏
  5. 【转】Oracle执行计划解释
  6. Pots POJ - 3414(bfs)
  7. dataset转换json格式
  8. 【Kissy WaterFall】实行手动加载数据
  9. jni c call java_Java通过-jni调用c语言
  10. cas单点登录学习:cas服务端与客户端的搭建
  11. 【转载】doxygen+graphviz生成代码文档
  12. Spring(三)Bean继续入门
  13. 女孩你让我留恋,你让我痴迷。
  14. PDF文件转MOBI怎么转?在线操作轻松完成
  15. lastinsertid mysql_mysql - Go语言中文网 - Golang中文社区
  16. SiamRPN论文笔记
  17. 系统聚类算法并绘制谱系图
  18. Cython三分钟入门
  19. 【脑洞大开】从哲学角度看人工智能:介绍徐英瑾的《心智、语言和机器》
  20. 1 C C++初识

热门文章

  1. 网页前端(HTML)
  2. 【智能制造】见识一下某航空企业的智能制造技术架构!
  3. C语言数据结构-实验一 C语言回顾及算法分析
  4. 编写Java程序,使用ThreadLocal类,项目中创建账户类 Account,类中包括账户名称name、 ThreadLocal 类的引用变量amount,表示存款
  5. Windows的NSIS ERROR
  6. 冷战背景下的计算机,袁岚峰:鼓吹科技冷战,格调太低
  7. 大型网络游戏服务器的框架设计(一)
  8. 验证码 图片无法刷新
  9. 密码(N Or M?)
  10. 2008中国互联网十大网络流行词