快速搜索随机树(RRT -Rapidly-ExploringRandom Trees),是一种常见的用于机器人路径(运动)规划的方法,它本质上是一种随机生成的数据结构—树,这种思想自从LaValle在[1]中提出以后已经得到了极大的发展,到现在依然有改进的RRT不断地被提出来。

  机器人的路径(运动)规划的问题被定义为:给定机器人在运动区域的初始位姿qinitq_{init} 和终点位姿qgoalq_{goal}找到一条路径,即一个位姿的连续序列,使得机器人沿该路径能够从初始位姿运动到终点,且不与障碍物发生碰撞。

  对于机械臂来说,一般的运动规划是在大于等于2的多维构型空间(C-Space)中进行的,然而对于初学者来说,可以首先以2维空间中的路径规划为例(例如图1所示的迷宫),掌握一个初步的概念。


图1 在一个迷宫中设置起点qinitq_{init} 和终点qgoalq_{goal}

  对于机器人运动规划问题,现在有很多开源的代码可供选择学习,例如OMPL,在CSDN上也有人上传了一些RRT的代码,但是大部分是需要积分下载的。为了更加便捷地入门学习RRT的思路,我从Github上找到了一个在Matlab里编写和仿真的代码(源码连接),因为在Matlab中运行程序和可视化相对来说比较简单,所以现在简单介绍一下这个程序,算作是对RRT的初步入门学习。 它的伪代码可以表示成下表:

  • 算法:构建RRT
    ————————————————————
  • 输入:
    map: 机器人所处环境的信息;
    qinitq_{init}:机器人的起始位置;
    qgoalq_{goal}:机器人的终点位置;
    kk:尝试生成树节点的次数;
    deltaqdeltaq:qnearq_{near}和qnewq_{new}的距离;
    ————————————————————
  • 输出
    VerticesVertices:RRT的顶点;
    EdgesEdges:RRT的边;
    PathPath:从qinitq_{init}到qgoalq_{goal}的原始路径;
    TT:连接qinitq_{init}和qgoalq_{goal}的树;
    PathSmoothPathSmooth:连接qinitq_{init}和qgoalq_{goal}的缩短后的路径;
    ————————————————————
  • 1:qrand,qnear,qnew←∅q_{rand},q_{near},q_{new}←∅;
    2:for i=1 to k
    3:按一定的概率设置qrand←qgoalq_{rand}←q_{goal}或在map中随机生成qrandq_{rand};
    4:qnear←findQNear(qrand,vertices);q_{near}←findQNear(q_{rand}, vertices);//在qrandq_{rand}附近找到距离其最近的qnearq_{near}.
    5:qnew←findQNew(qnear,qrand,deltaq);q_{new}←findQNew(q_{near}, q_{rand}, deltaq);//生成沿 qnearq_{near}和qrandq_{rand}方向上,距qnearq_{near}为deltaqdeltaq的qnewq_{new};
    6:对qnewq_{new}到qnearq_{near}做碰撞检测;
    7:if 没有碰撞
    8: Vertices←Vertices∪Vertices←Vertices∪{qnewq_{new}};
    9: Edges←Edges∪Edges←Edges∪{qnew,qnearq_{new},q_{near}};
    10:if qnewq_{new}=qgoalq_{goal} or qnewq_{new}和qnearq_{near}将qgoalq_{goal}包围
    11:path←fillSolutionPath(edges,vertices);path←fillSolutionPath(edges, vertices);//将Edges连接起来,即为生成的路径。
    12:endif
    13:endif
    14:endfor
    15:pathSmooth←smooth(map,path,vertices,delta);pathSmooth ← smooth(map, path, vertices, delta);//使用贪心算法提取缩短后的路径。
    16:Return T;

  需要注意的是在步骤3中该程序使用的方法是以一定的概率将qgoalq_{goal}作为qrandq_{rand},这样可以使树的生长方向偏向终点,这与RRT的原始文献[1]是不同的。步骤5生成qnewq_{new}示意图如图2所示。

图2 生成qnewq_{new}

  对于步骤6的碰撞检测,可将qnewq_{new}到qnearq_{near}之间的连线插值出若干个点,如图3,对每个点做检测,如果所有的点都不在障碍区域,那么说明两点之间无障碍。

图3 碰撞检测原理

关于最后的一个缩短路径的步骤15(smooth),原理可见下图4,从起点qinitq_{init}开始,依次寻找能够能够无碰撞连接终点qgoalq_{goal}的顶点,记录此点q′q',再从起点qinitq_{init}开始,以q′q'为终点寻找,直至起点qinitq_{init}和q′q'能够无碰撞连接,将所有的q′q'点连接后就得出了缩短后的路径(PathSmooth)。

图4 缩短路径的原理

  运行程序之后得到的效果如图5所示,其中红色的路径为原始路径,黑色的路径为缩短(Smooth)后的路径。

图5 运动规划效果

[1]LaValle, S.M., Rapidly-exploring random trees: A new tool for path planning. 1998.
[2]https://github.com/emreozanalkan/RRT

【机器人学:运动规划】快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示相关推荐

  1. rrt算法流程图_RRT算法移动机器人路径规划(快速扩展随机树).pdf

    ( ) 第 34 卷 第 5期 南京理工大学学报 自然科学版 Vo l. 34 No. 5 20 10年 10 月 Journal of N anj ing Un iversity of Scienc ...

  2. 快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示

    转载:http://blog.csdn.net/gpeng832/article/details/71249198?locationNum=1&fps=1   快速搜索随机树(RRT -Rap ...

  3. 快速搜索随机树算法(RRT)和A*算法

    1.快速搜索随机树算法 1.1 简述快速搜索随机树算法 快速生长随机树算法需要知道整个环境信息,通过随机采样的方法并通过一系列判断来找到起点和终点之间的一条可行路线.这种方法在概率上是可以找到一条可行 ...

  4. 左上角到右下角的路径 oj_【机器人路径规划】快速扩展随机树(RRT)算法

    内容无关:最近的课题内容和机器人运动规划方法有关,我把学习的内容整理成为工具箱上传到了我的github仓库,稍后将会发一篇说明介绍使用方法. XM522706601/robotics_tutorial ...

  5. 【运动规划】RRT快速搜索随机树 Rapidly Exploring Random Tree

    Randomized Kinodynamic Planning Steven M. LaValle James J. Kuffner, Jr. 1. Exploring the State Space ...

  6. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划

    RRT是一种多维空间中有效率的规划方法.它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条由从初始 ...

  7. RRT(快速搜索随机树)

    RRT 理论: 抛X_rand,先得X_near,再得X_new 以上是算法流程图. close all; clear all;% params for function [vertices, edg ...

  8. 【数学建模】MATLAB应用实战系列(110)-机器人路径规划——快速扩展随机树(Rapidly-exploring Random Trees)(附Python代码)

    概率路线图(PRM)方法 原理 机器人运动规划的基本任务可以描述为:从开始位置到目标位置的运动.这一任务通常涉及到两项基本问题: 如何躲避构型空间中出现的障碍物(几何路径规划) 如何满足机器人本身在机 ...

  9. rapidly exploring random tree(快速搜索随机树)路径规划

    直接上程序 %% 流程初始化 clear all; close all; pic_num=1;%制作gif所需参数 x_I=1; y_I=1; % 设置初始点 x_G=600; y_G=600; % ...

  10. 基于快速探索随机树RRT和Dubins路径规划与避障研究(Matlab代码实现)

最新文章

  1. GRE OVER IPSEC
  2. 如何查看笔记本电脑配置参数_江淮平板运输车图片配置参数查看(罗平)
  3. 预处理_气体在线分析仪预处理系统的工作内容
  4. MFC六大核心机制之二:运行时类型识别(RTTI)
  5. 12月16日课程安排
  6. PHP单选框实现的方法,jQuery简单实现遍历单选框的方法
  7. Windows开启SNMP服务----Win7
  8. 使用Mali Graphics Debugger调优Unity程序(Killer示例)
  9. 利尔达蓝牙模组LSD4BT-E66ALSP001使用透传与手机APP(LightBlue)通讯测试
  10. python3制作歌词解析器
  11. html 保存 文字变乱码怎么办,html文字为什么会乱码
  12. 虚拟钢琴键盘音源合集 Toontrack EZkeys Complete 1.2.5 WiN-MAC
  13. 六、假设检验:使用Python进行两个正态总体均值的假设检验
  14. MySQL 幻读被彻底解决了吗?
  15. 键盘按键名键码对照表
  16. 通过bind实现DNS服务
  17. Mac OS X:单用户模式(Single User Mode)的操作和安全漏洞
  18. Camera:前后闪光灯
  19. 我们都需要刷新——读现任微软CEO萨提亚的《刷新》有感
  20. 服务器gpu卡型号V100,NVIDIA GPU服务器升级:16块450W Tesla V100

热门文章

  1. JS打开新窗口(window.open() 、href)
  2. 将图片从AutoCAD导出到Word
  3. Ace Admin中表格按钮的使用方法——表格导出为xls、pdf,表格打印预览等
  4. Java开源框架集(全)
  5. GJB 8114编码标准检查软件产品简介
  6. 伍德里奇计量经济学计算机课后答案第一章,伍德里奇---计量经济学第7章部分计算机习题详解(STATA)...
  7. WIN10超级终端下载链接及使用教程
  8. IAR8.4.2安装方法
  9. QT 快捷键 识别小写字母
  10. c语言抽签系统_抽签小程序(C语言随机数)