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

article/2025/10/4 8:38:58

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

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

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


起点和终点
图1 在一个迷宫中设置起点 qinit 和终点 qgoal

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

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

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


这里写图片描述

图2 生成 qnew

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


这里写图片描述

图3 碰撞检测原理

关于最后的一个缩短路径的步骤15(smooth),原理可见下图4,从起点 qinit 开始,依次寻找能够能够无碰撞连接终点 qgoal 的顶点,记录此点 q ,再从起点 qinit 开始,以 q 为终点寻找,直至起点 qinit 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


http://chatgpt.dhexx.cn/article/Ys5eELu2.shtml

相关文章

【自动驾驶轨迹规划之RRT算法】

目录 1 RRT算法的简介 2 RRT算法原理 2.1 算法流程 2.2 算法伪代码 2.3 算法流程图 3 RRT算法matlab实现 3.1 测试地图 3.2 distance函数 3.3 RRT算法 3.4 动画效果 4 RRT的缺陷 1 RRT算法的简介 天下武功唯快不破,快是 RRT 的最大优势。RRT 的思想是快…

RRT算法

简介 RRT 算法(快速扩展随机树,rapidly exploring random tree)是一种随机性算法,它可以直接应用于非完整约束系统的规划,不需进行路径转换,所以它的算法复杂度较小,尤为适用于高维多自由度的系…

RRT(快速随机搜索树)算法原理及代码实践

RRT算法简介 RRT 算法为一种递增式的路径规划算法,算法不断在搜索空间中随机生成采样点,如果该点位于无碰撞位置,则寻找搜索树中离该节点最近的结点为基准结点,由基准结点出发以一定步长朝着该随机结点进行延伸,延伸线…

RRT算法原理和代码详解(快速扩展随机树)

文章目录 优缺点伪代码具体流程效率问题代码 优缺点 优缺点先明说,优点RRT Star适用于任何地图,不像A Star,Dijkstra那样受限于栅格地图。 缺点:1.找到的路径可能不是最优的;2.路径可能不符合机器人的运动学动力学模型…

RRT与RRT*算法具体步骤与程序详解(python)

提示:前面写了A*、Dijkstra算法 文章目录 前言一、RRT的原理与步骤二、RRT算法编写的步骤1.算法步骤2.算法的实现 三、RRT*算法编写的步骤1.算法的步骤2.算法的实现 三、所有程序附录RRT算法RRT*算法 前言 RRT和RRT*的区别: RRT的中文名为快速随机探索…

RRT算法原理图解

RRT算法原理图解 开始 本人很懒,习惯了只看不写。废话少说,直奔主题:原始RRT算法原理图文简介(图都是我自己按照步骤一幅幅画的——闲的蛋疼,但应该比较直观易懂,能被借鉴参考也算我的功德)。 R…

linux中要怎么创建文件夹

我是一个linux初学者,由于工作上面需要,我需要在linux中创建一个文件夹,然后自学了一点点,其实创建文件夹很简单,下面分享给大家,越努力越幸运,共勉! 创建文件夹 mkdir 后面加文件夹名字 例如: mkdir aa 然后第一个文件夹就创好了 假如要在文件夹里面再创一个文件夹就是子目…

Ubuntu系统下如何创建.txt文件

问题 在Ubutnu系统下,右键桌面会发现并没有创建文本文件的选项。 解决 首先进入模板 会发现里面是空的 然后右键在终端打开 输入如下指令 sudo gedit 文本文件保存即可 这个时候在模板文件夹下就有 现在右键的时候就会有一个创建文本文件的选项了。

Linux中创建文件与文件夹

一、创建文件夹 命令:mkdir 文件夹名 例: 一开始home目录下没有test文件夹,命令创建后生成 二、创建文件 命令:touch 文件名 例: 一开始test文件夹下没有boot.properties,命令创建后生成 三、注意事项…

Ubuntu零基础教学-Ubuntu下如何创建.txt记事本文件

环境:Ubuntu20.04 前言: 安装好ubuntu20.04后,发现右键菜单中没有新建空白文件,这样工作的时候需要创建文本文件就不是很方便;那么,基于这里,我们可以通过以下的方式把新建空白文件添加到右键哦! 在此,针对小白系列教学,bug菌专门开放了一个Ubunt…

linux中创建目录

在根下创建一个目录ceshi 1、用mkdir创建目录 2、用ls查看当前目录下的所有文件 3、拷贝需要复制的两个文件 4、将user移动至ceshi下,用move 5、用mv命令来为目录改名 linux中在root用户下创建目录 1、进入root用户目录,输入su后回车 2、查看当前路径…

linux下创建文件和文件夹

使用linux系统会有一些常见的命令,譬如说,创建文件夹,创建文件,这些命令都是比较常见的。 方法/步骤 首先说一下touch 创建二进制文件,用法就非常的简单,touch文件名 之间一定要空格。先查看一下有什么文…

linux创建文件夹命令

我们可以使用mkdir命令在 Linux 或类似 Unix 的操作系统中创建新目录或文件夹。本文将介绍如何在 Linux 或 Unix 系统中创建文件夹(也称为“目录”)。 操作步骤如下:1.在 Linux 中打开终端应用程序。2.输入mkdir命令。3.输入文件夹名称。 具…

Linux:创建文件夹

(1)输入命令:mkdir music,创建文件夹 music,再次查看列表,可以看到多了一个文件夹 music; (2)输入命令:mkdir a1 a2 a3,批量创建文件夹 a1、文件夹…

linux创建文件

linux创建文件 1、在 Linux 上使用重定向符(>)创建一个文件 标准重定向符允许我们创建一个 0KB 的空文件。它通常用于重定向一个命令的输出到一个新文件中。在没有命令的情况下使用重定向符号时,它会创建一个文件。 但是它不允许你在创建…

Linux 创建目录和文件

mkdir 创建目录 在linux中,mkdir是创建目录的意思,是“make directories”的缩写;该命令用于创建新的目录,语法为“mkdir [-mp] 目录名”;设置参数“-m”用于手动配置创建目录的权限,设置参数“-p”用于递…

Linux 创建文件

目录 1. 使用重定向符(>)创建文件 2. 使用 touch 命令创建文件 3. 使用 echo 命令创建文件 4. 使用 printf 命令创建文件 5. 使用 cat 命令创建文件 6. 使用 vi / vim 创建文件 7. 使用 nano 创建文件 8. 使用 head 命令创建文件 9. 使用 tail 命令创…

Python中colorbar全色表

如图,所有cmap可选参数

matplotlib调节colorbar的大小

调节plt.colorbar的fraction系数即可调节colorbar的大小 weight np.random.random([8, 8]) plt.imshow(weight) plt.colorbar(fraction0.05, pad0.05) plt.savefig(tjn.png, bbox_inchestight) plt.show()