基于采样的运动规划算法-RRT(Rapidly-exploring Random Trees)

RRT:一种通过随机构建Space Filling Tree实现对非凸高维空间快速搜索的算法。该算法可以很容易的处理包含障碍物和差分运动约束的场景,被广泛的应用在各种机器人的运动规划场景中

  • Basic RRT算法

原始的RRT算法中将搜索的起点位置作为根节点,然后通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树的叶子节点进入目标区域,就得到了从起点位置到目标位置的路径

伪代码如下:

上述伪代码中,M是地图环境,是起始位置,是目标位置。路径空间搜索的过程从起点开始,先随机撒点;然后查找距离最近的节点;然后沿着到方向前进stepsize的距离得到;CollisionFree(M, )方法检测Edge(,)是否与地图环境中的障碍物有碰撞,如果没有碰撞,则将成功完成一次空间搜索拓展。重复上述过程,直至达到目标位置。

RRT算法拓展过程

  • 基于概率的RRT算法

为了加快随机树收敛到目标位置的速度,基于概率的RRT算法在随机树扩展的步骤中引入一个概率P,根据概率p的值来选择树的生长方向是随机生长(xrand)还是朝向目标位置(xgoal)生长,引入像目标生长的机制可以加速路径搜索的收敛速度。

伪代码如下:

  • RRT Connect算法

RRT Connect算法从初始状态点和目标状态点同时扩展随机树从而实现对状态空间的快速搜索

  • RRT*算法

RRT*算法的目标在于解决RRT算法难以求解最优的可行路径的问题,它在路径查找的过程中持续的优化路径,随着迭代次数和采样点的增加,得到的路径越来越优化。迭代的时间越久,就越可以得到相对满意的规划路径。

伪代码如下:

RRT*算法和RRT算法的区别主要在于两点:

  1. rewrite的过程。即为重新选择父节点的过程

RRT*在找到距离xrand最近的节点xnearest并通过CollisionFree检测之后,并不立即将Edge(xnearest,xrand)加入扩展树中,而是以xrand为中心,r为半径,找到所有潜在的父节点集合,并与xnearest父节点的Cost对比,看是否存在更优Cost的父节点。

  1. 连接xrand和xnearest
  2. 以xrand为中心,ri为半径,在树上搜索节点
  3. 找出潜在的父节点集合xpotential-parent,其目的是要更新xrand,看看有没有比它更好的父节点
  4. 从某一个潜在父节点开始考虑,计算出xparent(即为xnearest)作为父节点时的代价,子节点为xchild(即为xrand)
  5. 先不进行碰撞检测,将潜在父节点与子节点连接起来,计算该条路径的代价
  6. 如果代价小于原路径,则进行碰撞检测,若代价大于原路径,则考虑其他潜在父节点
  7. 代价小于原路径且碰撞检测通过,则在树中将之前的边删掉,将树中新的边添加进去,即连接满足要求的潜在父节点和子节点之间的边,将潜在父节点(xpotential-parent)改为父节点(xparent),遍历所有的父节点,得到更新以后的树

2.随机树重布线的过程

RRT算法及其部分改进算法介绍相关推荐

  1. 盖师贝格-撒克斯通(GS)算法及其改进算法

    盖师贝格-撒克斯通(GS)算法及其改进算法 本文摘自李景镇<光学手册> 盖师贝格(R.W.Gerchberg)和撒克斯通(W.O.Saxton)首先提出了一种振幅相位恢复算法,即GS算 法 ...

  2. 冒泡排序原理以及改进算法实现

    1.算法的基本思想 冒泡排序是交换排序的一种,我们可以把将待排序的数组Arrray[0...n-1]理解成一个圆柱,将数组中的每一个元素都看成是重量为Array[i]的气泡,其中Array[0]在最上 ...

  3. 数据挖掘算法概念与经典算法简介

    一.数据挖掘算法概念 什么是数据挖掘?数据挖掘一般是指从大量的数据中自动搜索隐藏于其中的有着特殊关系性的信息的过程.什么是数据挖掘算法?数据挖掘算法是根据数据创建数据挖掘模型的一组试探法和计算. 为了 ...

  4. 聚类算法(无监督算法)

    一.聚类算法简介 聚类的基本思想:对于给定的M个样本的数据集,给定聚类(簇)的个数K(K<M),初始化每个样本所属的类别,再根据一定的规则不断地迭代并重新划分数据集的类别(改变样本与簇的类别关系 ...

  5. 3.TF-IDF算法介绍、应用、NLTK实现TF-IDF算法、Sklearn实现TF-IDF算法、算法的不足、算法改进

    3.TF-IDF 3.1.TF-IDF算法介绍 3.2.TF-IDF应用 3.3.NLTK实现TF-IDF算法 3.4.Sklearn实现TF-IDF算法 3.5.Jieba实现TF-IDF算法 3. ...

  6. 标准粒子群算法(PSO)及其Matlab程序和常见改进算法

    一. 粒子群算法概述 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行 ...

  7. 十.激光SLAM框架学习之LeGO-LOAM框架---算法原理和改进、项目工程代码

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  8. 人工智能学习笔记:基本遗传算法及其改进算法

    文章目录 1 引言 2 基本思想及发展历史 3 基本遗传算法详细步骤 3.1 编码 3.2 初始群体设定 3.3 设计适应度函数 3.4 遗传操作 3.4.1 选择 3.4.2 交叉 3.4.3 变异 ...

  9. 蚁群优化算法(ACO)详细介绍

    今年有幸上岸,导师是做群体智能控制方向的,会涉及到一些算法,所以提前学习 今天早上看到了一个中科院的群体智能视频https://www.bilibili.com/video/BV1KZ4y137sX/ ...

  10. IST改进算法之Two-Step Iterative Shrinkage/Thresholding(TwIST)

    题目:IST改进算法之Two-Step Iterative Shrinkage/Thresholding(TwIST) 本篇介绍IST的一种改进算法TwIST,该改进算法由以下文献提出: Biouca ...

最新文章

  1. 太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!
  2. ios mysql 修改数据,iOS数据库FMDB--增删改查(模糊查询)实写记录
  3. CoGAN pytorch
  4. java php python 高并发_关于php如何调用Python快速发送高并发邮件的示例代码
  5. python中o_Python I/O与进程的详细讲解
  6. 通过tomcat日志定位错误
  7. SpringCloud实战小贴士:Zuul的路径匹配
  8. java 原子数据类型_java并发编程(十一)----(JUC原子类)基本类型介绍
  9. PSD分层可临摹模板|无线端电商页面UI设计几个常见的错误
  10. Android学习总结(2)——App客户端与服务器交互中的token
  11. 已知起点坐标、角度、长度求终点坐标
  12. Halcon图像预处理与形态学(形态学)
  13. OSPF的Router-id确定顺序和冲突情况
  14. PhotoshopPS软件快捷键教程
  15. Could Not find resource [logback.groovy] ; Cound Not find resource [logback-test.xml]
  16. html中如何淡化背景图片,Word2010如何去除图片背景
  17. Android软键盘使用
  18. 免杀学习——PHP免杀
  19. 教你如何避开雪花算法的坑
  20. 评测三款高颜值的txt阅读器(ios手机适用)

热门文章

  1. 万圣节html代码大全,《方舟:生存进化》万圣节代码大全
  2. JavaScript实现表单验证功能
  3. 修改计算机设备管理器信息,电脑硬件信息更改器(牛B硬件信息修改大师)
  4. 【流体力学】从无量纲化的NS方程看几个准则数:施特劳哈尔数、雷诺数、弗劳德数
  5. HOOK大神用c++制作绝地求生自瞄物品透视,源码仅供娱乐!
  6. 遍历map集合常用的4种方式
  7. Activiti6--入门学习--监听器
  8. SVN 如何把一个项目的版本回退到指定版本
  9. SFTP服务器文件下载
  10. 【第123期】面试攻略:谈谈对游戏策划的理解