一种偏向目标型地RRT算法实现

合集下载

rrt算法实验报告

rrt算法实验报告

rrt算法实验报告《RRT算法实验报告》摘要:本实验报告主要介绍了基于RRT(Rapidly-exploring Random Tree)算法的路径规划实验。

通过对RRT算法的原理和实现进行介绍,以及在不同场景下的实际应用效果进行测试和分析,得出了该算法在路径规划中的优势和局限性。

引言:路径规划是机器人和自动驾驶等领域中的重要问题之一。

RRT算法是一种基于树结构的路径规划算法,通过随机采样和快速探索的方式,能够在复杂环境中高效地寻找到可行的路径。

本实验旨在通过对RRT算法的实际应用和效果进行测试,验证其在路径规划中的可行性和优势。

方法:本实验使用Python语言实现了RRT算法,并在不同场景下进行了测试。

首先,我们在一个简单的二维空间中对RRT算法进行了测试,验证其在简单环境中的可行性。

然后,我们将算法应用到一个复杂的三维环境中,测试其在复杂环境中的表现。

最后,我们对比了RRT算法和其他常见的路径规划算法,分析了它们的优势和局限性。

结果:实验结果表明,RRT算法能够在复杂环境中高效地寻找到可行的路径,并且具有较好的鲁棒性。

在简单环境中,RRT算法的表现与其他常见的路径规划算法相当,但在复杂环境中表现出更好的性能。

然而,RRT算法在某些情况下可能会出现局部最优解的问题,需要进一步改进。

讨论:RRT算法作为一种基于树结构的路径规划算法,在实际应用中具有一定的优势。

然而,该算法在处理动态环境和高精度路径规划等方面仍存在一些挑战,需要进一步改进和优化。

未来的研究可以从改进采样策略、优化树的生长方式等方面入手,提高RRT算法在实际应用中的性能和效果。

结论:通过本实验,我们对RRT算法的原理和实现进行了介绍,并在不同场景下进行了实际应用和测试。

实验结果表明,RRT算法在路径规划中具有一定的优势,但也存在一些局限性。

未来的研究可以进一步改进和优化该算法,提高其在实际应用中的性能和效果。

基于改进RRT路径规划算法

基于改进RRT路径规划算法

No.2Feb.2021第2期2021年2月组合机床与自动化加工技术Modular Machine Tool & Automatic Manufacturing Technique文章编号:1001 -2265(2021)02 -0022 -03DOI : 10.13462/j. .nki. mmtamt. 2021.02. 006基于改进RRT 路径规划算法*李金良,舒翰儒,刘德建,徐磊(山东科技大学机械电子工程学院,山东青岛266560)摘要:针对基本RRT 算法路径规划特点:树的扩展具有随机性,路径中存在冗余的节点,规划出的路径拐角多。

因此,提出一种改进的RRT 算法。

改进后的算法首先采用目标偏向策略,以一定的概率F 把目标点作为采样点进行随机树扩展,提高随机树向目标点的扩展的概率;其次,改变度量 函数,添加了角度约束,减少了路径规划中搜索的范围,以减少搜索时间;最后,通过贪心算法对路 径进行简化,并对简化后的节点采用三次B 样条曲线进行优化。

结果证明改进后的RRT 算法搜索 时间更少,搜索路径更短,平滑性更高。

关键词:RRT 算法;路径规划;目标偏向策略;三次B 样条曲线中图分类号:TH16 ;TG506 文献标识码:APatt Planning Algorittm Basen on Improven RRTLI Jin-liang &SHU Han-ru &LU De-jian ,XU Lei(Colleee of Mechanicd and Electronia Engineering , Shandong University of Sciencc and TechnoKgy , Qing ­dao Shandong , 366560& China )Abstrad;: Based on the basic RRT algorithm path planning fs W tcs : tree expansion is random , there are re ­dundant nodes in the path , and the planned path has many corners. Therefore & an improved RRT algorithmis proposed. The improved algorithm frst adoptr the taget bias strategy & and uses a certain probability P to take the target point as a sampling point for random tree expansion to improve the probability of the random he r expansion to the taget point. Second & the methc function is changed & and angula consWai.nW areadded to reduce The scope of the seach in path planning to reduce the seach time ; fnaiy & the path issimplified by a greedy algorithm & and the simplified nodes are optimized using a cubic B-spline curve. The resultr prove that the improved RRT algorithm has less seach time , fewer search paths & and higher smoohhne s .Key worp RRT algorithm ; path planning ; target bias shategy ; cubic B-spline curve0引言随着人工智能的不断推进,机器人技术得到了飞速的发展,智能化成为未来机器人领域的新航标。

三维 rrt算法 python

三维 rrt算法 python

三维 rrt算法 python
三维RRT算法(Rapidly-exploring Random Tree)是一种用于
路径规划的算法,它在三维空间中寻找从起点到目标点的可行路径。

在Python中实现三维RRT算法,可以通过以下步骤进行:
1. 定义节点类,首先,你需要定义一个节点类来表示树中的节点。

这个节点类应该包括节点的坐标、父节点等信息。

2. 初始化RRT树,创建一个空的树,将起点作为树的根节点。

3. 扩展树,通过随机采样和节点扩展的方式,不断扩展RRT树
直到找到目标点或者达到最大迭代次数。

4. 碰撞检测,在扩展节点时,需要进行碰撞检测,确保新的节
点不会与障碍物发生碰撞。

5. 路径回溯,一旦找到目标点,需要从目标点回溯到起点,构
建可行路径。

在Python中,你可以使用现有的库来实现三维RRT算法,比如
使用numpy进行数学计算,使用matplotlib进行可视化,使用
scipy进行碰撞检测等。

同时,你也可以参考已有的开源实现来加
快开发速度。

总的来说,实现三维RRT算法需要深入理解算法原理,具备良
好的编程能力以及对三维空间的理解。

希望这些信息对你有所帮助。

基于RRT路径规划算法的改进方法研究

基于RRT路径规划算法的改进方法研究

基于RRT路径规划算法的改进方法研究何佳; 夏海鹏; 刘修知【期刊名称】《《汽车实用技术》》【年(卷),期】2019(000)022【总页数】4页(P39-42)【关键词】RRT算法; 路径规划; 节点选择【作者】何佳; 夏海鹏; 刘修知【作者单位】中国汽车技术研究中心有限公司天津 300300【正文语种】中文【中图分类】U471.15前言随着无人驾驶技术的发展,无人车的路径规划技术作为其中的重要技术获得了迅速的发展[1]。

其中传统的路径规划算法包括人工势场法、模糊规则法、遗传算法、神经网络、模拟退火算法、蚁群优化等算法[2]。

但这些方法都需要在一个确定的空间内对障碍物进行建模,计算复杂度与机器人自由度呈指数关系,不适合解决多自由度机器人在复杂环境中的规划问题。

本文主要研究RRT 算法及其改进方法,快速扩展随机树(RRT/rapi-dly exploring random tree)算法在1998 年由LaValle 教授提出[3],通过环境空间的随机采样点,把搜索导向空白区域,从而寻找到一条从起始点到目标点的规划路径。

通过对环境空间中的采样点进行碰撞检测,避免了对环境空间的建模,能够有效地解决高维空间和复杂约束的路径规划问题,适合解决多自由度机器人在复杂环境下和动态环境中的路径规划[4]。

RRT 算法存在节点扩展时缺乏引导信息,存在较大的盲目性,导致生成的路径曲折不连续,且容易陷入局部极小值等不足。

关于RRT 算法的改进提出了很多解决方法,大致可以分为两大类,一类是基于基本RRT 算法节点选择、步长选择、扩展方向等的改进,另一类与其他路径规划算法融合的改进。

1 基本RRT 算法RRT 算法以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树,当随机树中的叶子节点包含了目标点或进入了目标区域,便可以在随机树中找到一条从初始点到目标点的路径。

基本RRT 算法流程图如图1 所示。

基于双向同时无碰撞检测目标偏置RRT算法的路径规划方法

基于双向同时无碰撞检测目标偏置RRT算法的路径规划方法

基于双向同时无碰撞检测目标偏置RRT算法的路径规划方法陈海洋;王露楠
【期刊名称】《空军工程大学学报:自然科学版》
【年(卷),期】2022(23)3
【摘要】针对传统RRT算法在复杂环境中对不必要区域的搜索和路径规划的时间代价过高等问题,提出了一种双向同时无碰撞检测目标偏置快速扩展随机树算法——TNCG-RRT。

该算法将B-RRT中的双向搜索策略和BIT中的启发式搜索融合作为文中的基础算法,引入神经网络的批量抓取数量决定一次采样的节点数目从而影响采样速度;然后,将正向树和反向树的扩展同时进行以加快路径搜索速度,通过对目标偏向策略中扩展顶点队列的改进和对采样区域的不断更新明确扩展方向,缩小随机树生长的范围;最后,利用3次B样条曲线使生成的路径趋于平滑。

与B-RRT算法和BIT算法进行对比实验,实验结果表明:TNCG-RRT算法在路径生成时间上缩短4.5%,剪枝数增加80%,路径代价(即路径长度)缩短9%,证明了TNCG-RRT算法的有效性。

【总页数】8页(P60-67)
【作者】陈海洋;王露楠
【作者单位】西安工程大学电子信息学院
【正文语种】中文
【中图分类】TP312
【相关文献】
1.基于目标导向的双向RRT路径规划算法
2.基于目标导向的双向RRT路径规划算法
3.基于改进双向RRT算法的机器人路径规划
4.目标偏置双向RRT*算法的机器人路径规划
5.基于改进双向RRT^(*)算法的机械臂路径规划
因版权原因,仅展示原文概要,查看原文内容请购买。

具有目标导向性的RRT路径规划研究

具有目标导向性的RRT路径规划研究

具有目标导向性的RRT路径规划研究作者:郭孝坤吴玉秀李景程瑞嘉来源:《现代信息科技》2022年第01期摘要:在机器人全局路径规划中,首先对全局路径规划的各种探索路径的算法做了总结,对RRT、A*和D*算法做了对比,分析了这些算法的优缺点。

鉴于RRT具有概率完备性,A*和D*具有深度优先性,也就是目标导向性,文章使用一种算法更改了原RRT算法中随机点的选取方式,使RRT具有概率完备性的同时也拥有了目标导向性,实验证明,改进后的RRT算法能够更快探索出到达目标点的路径。

关键词:全局路径规划;RRT;A*;深度优先性;概率完备性中国分类号:TP242 文献标识码:A文章编号:2096-4706(2022)01-0069-05Abstract: In the global path planning of robots, we first summarize the various path exploration algorithms of the global path planning, compare the RRT, A* and D* algorithms,and analyze their advantages and disadvantages. Given that RRT has probability completeness, A* and D* has depth priority, that is target orientation, this paper uses an algorithm to change the selection method of random points in the original RRT algorithm and make RRT have probability completeness and target orientation at the same time. The experiment proves that improved RRT algorithm can faster explore the path to reach the target point.Keywords: global path planning; RRT; A*; depth priority; probability completeness0 引言机器人应用中,路径规划是必须且首先需要的核心技术[1],很多后续任务也都是从路径规划开始。

rrt算法步骤

rrt算法步骤

RRT算法步骤简介Rapidly-exploring Random Trees (RRT)算法是一种用于解决路径规划问题的算法,被广泛应用于机器人导航、无人车路径规划等领域。

RRT算法通过随机采样、构建树结构和搜索路径等步骤,在环境中快速生成一个代表可行路径的树结构。

本文将详细介绍RRT算法的步骤和相关实现细节。

RRT算法步骤1. 初始化首先,需要初始化RRT算法的树结构。

这个树是一个有向图,其中包含了起始点的一个节点作为根节点。

2. 随机采样接下来,需要在搜索空间中随机采样一个点,作为新节点的位置。

采样的点应该可以代表整个搜索空间,通常通过随机均匀分布来实现。

3. 扩展树在RRT算法中,新节点是通过从现有树中选择最近邻节点,并向随机采样的点方向前进一个步长来获得的。

所以,需要计算最近邻节点,并向目标节点前进一个步长的点。

4. 碰撞检测在扩展树的过程中,需要对新的节点进行碰撞检测,以确保路径是可行的。

如果新节点与障碍物碰撞,则需要重新选择随机采样的点,并重新进行扩展。

5. 连接树在确定新节点后,需要将新节点连接到最近邻节点,形成一条新边。

这样,随着搜索的进行,树的结构逐渐扩大。

6. 判断是否到达目标在每一次扩展之后,需要判断是否已经到达目标位置。

如果已经到达目标位置,则可以停止搜索,并返回生成的路径。

7. 重复扩展如果还未达到目标位置,则需要继续重复之前的步骤。

通过不断随机采样、扩展树和连接树,直到找到一条可行路径为止。

RRT算法实现细节节点选择方式在扩展树中,需要选择最近邻节点。

通常采用欧式距离来计算节点间的距离,找到距离最近的节点。

步长选择向目标节点前进的步长是RRT算法中的一个重要参数。

步长过大会导致搜索得太快,步长过小则搜索过程缓慢。

通常可以通过试验或动态规划来选择合适的步长。

碰撞检测算法在碰撞检测中,可以使用多种算法来判断新节点是否与障碍物碰撞。

例如,可以使用轴对齐包围盒(AABB)、球形包围盒等快速碰撞检测算法。

rrt算法实验报告

rrt算法实验报告

rrt算法实验报告rrt算法实验报告引言:在机器人路径规划领域,Rapidly-exploring Random Trees (RRT) 算法是一种常见且有效的算法。

本实验旨在通过实际操作和实验结果验证RRT算法的可行性和效果,并对其性能进行评估。

实验设计:本实验使用一个模拟的二维环境,其中包含了障碍物和起点终点。

通过RRT算法,我们将尝试找到从起点到终点的最短路径。

实验中,我们将考察RRT算法的运行时间、路径规划的质量以及算法的鲁棒性。

实验过程:1. 环境建模:首先,我们将实验环境进行建模。

通过定义二维平面上的障碍物的位置和形状,以及起点和终点的位置,搭建一个合适的环境。

2. RRT算法实现:接下来,我们实现RRT算法。

该算法的基本思想是通过随机采样和树的生长,逐步扩展搜索空间,直到找到连接起点和终点的路径。

我们需要实现树的节点生成、节点扩展、路径搜索等基本功能。

3. 算法调优:在实验中,我们可以通过调整RRT算法的参数来优化路径规划的结果。

例如,可以调整采样点的数量、树的生长速度等。

我们将尝试不同的参数组合,并比较它们的性能差异。

4. 路径可视化:为了直观地观察实验结果,我们将实现路径的可视化。

通过在二维平面上显示出树的生长过程和最终的路径,我们可以更清楚地了解RRT算法的工作原理和效果。

实验结果:通过实验,我们得到了以下结果:1. 运行时间:RRT算法在不同环境下的运行时间有所差异。

在简单的环境中,算法能够快速找到路径;而在复杂的环境中,算法可能需要更长的时间来搜索最优路径。

2. 路径质量:RRT算法能够找到连接起点和终点的路径,但路径的质量取决于环境的复杂程度和参数的选择。

在简单环境中,算法通常能够找到较短的路径;而在复杂环境中,路径可能会更加曲折。

3. 参数调优:通过调整RRT算法的参数,我们可以改善路径规划的质量和效率。

例如,增加采样点的数量可以增加路径搜索的范围,但也会增加计算时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一种偏向目标型的RRT算法实现摘要:本文针对基本快速扩展随机树(RRT)算法存在搜索过于平均、效率低下、用时较长的缺陷,提出了一种偏向目标型的改进型RRT算法。

这种算法在生成随机点时以一定概率选择最终目标点作为局部目标点,使树的扩展有一个趋向于最终目标点的趋势,从而加快了算法的收敛速度,优化了规划路径。

最后通过Matlab程序仿真,在二维平面上验证了改进型算法相对于基本算法的优越性。

关键词:路径规划、RRT算法、偏向目标型一.引言机器人学是当今科学技术研究的热点问题,它汇聚了各个尖端学科最先进的研究成果。

科学家们从上世纪40年代开始着手研制机器人到如今,机器人的发展主要经历了三次技术变革。

从最简单的第一代机器人到现在的第三代智能机器人,机器人从只会机械的执行命令逐渐演变成利用各种先进的传感器自动的学习环境,适应环境,并完成人类下达的任务。

路径规划问题是机器人研究中的重要的组成部分,它的重点就是要使机器人自主并且安全的从起始位姿移动到目标位姿。

机器人路径规划主要分为全局路径规划和局部路径规划两大方面。

全局路径规划是一种利用环境全局信息的方法,它通常将周边环境信息存储在一地图中,并且利用这地图寻找可行路径。

全局路径规划的优点是有利于找到全局可行解和最优解,但是它的运算时间长,不适用于快速变化的动态环境。

常用的全局路径规划方法有栅格法、可视图法、拓扑法和自由空间法等。

局部路径规划只考虑机器人当前能探测到的环境信息,运算速度快、反应迅速,非常适用于动态环境。

但其缺点是算法可能无法收敛,不能保证机器人一定能够到达目标点,而且找到的可行路径可能会偏离最短路径。

常用的局部路径规划算法有人工势场法、模糊逻辑法、神经网络法和遗传算法等等。

RRT 算法是最近几年才发展起来的,并且应用比较普遍的一种路径规划算法。

它在处理非完整约束的路径规划问题时具有相当大的优势,因为它可以将各种约束集成到算法本身之中,因此对环境要求较低。

而且该算法概率完备,在理论上肯定能找到可行路径。

但其缺点是搜索过于平均,算法效率较低,而且规划出的路径往往偏离最短路径。

本文针对RRT 算法存在的缺陷,提出了一种改进的偏向目标型的RRT 算法,该算法有效的解决了搜索过于平均的问题,提高了算法效率,而且规划出的路径是更接近于最短路径的次优路径。

二. RRT 算法的基本原理RRT 算法在路径规划时以状态空间中的一个初始点作为根节点,通过随机采样逐渐增加叶节点的方式,生成一个随机扩展树。

当随机树中的叶节点中包含了目标点或目标区域时,便可在随机树中找到一条从根节点到目标点的路径。

RRT 的扩展方式如下图1所示。

图 1 RRT 算法扩展过程图1中T 表示当前存在的扩展树,rand q 表示随机点,near q 表示离随机点randq 最近的一个树节点,然后在rand q 和near q 的连线上以步长step 为单位截取一个新节点new q ,如果new q 没碰到障碍物,则将new q 加入到扩展树T 中。

重复以上步骤直到new q 到达目标区域则算法结束,此时可在树T 中找到一条起点到目标点的路径。

为了便于计算机编程实现,我们将RRT的构建过程归纳为以下两个表格。

其中表1为各参数意义,表2为RRT构建流程。

表1 RRT算法中的各参数意义表2 RRT算法构建流程三. 改进的RRT 算法虽然RRT 算法概率完备,在理论上总能找出一条可行路径。

但是由于其扩展新节点的方式是在全空间随机产生的,一方面造成扩展树在全空间分布过于平均,算法效率较低;另一方面规划的路径质量不高,通常偏离最短路径较大。

针对以上缺陷,我们希望对基本的RRT 算法进行改进。

经过分析我们得知造成RRT 算法上述缺陷的根源是在扩展新节点时,随机点是在全空间随机产生的。

借鉴启发式算法的灵感,我们可以在确定随机点时让随机点以一定的概率等于目标点。

这样树的扩展就有一个趋于目标点的趋势,而不是在全空间随机分布,从而提高了算法的搜索效率,而且由于树节点的扩展是趋向于目标点的,理论上规划出来的路径也会更加接近于最短路径。

还应注意的是改进后的算法在概率上依然是完备的。

通过以上分析,我们知道改进的RRT 算法流程和基本的RRT 算法流程大致相同,只要把第二节中表2的第3个步骤进行如下的改写即可。

(1) 生成随机点rand q ;(2) 给定一个0到1的偏置变量Bias ,生成一个0到1的随机数rand ; (3) 如果rand<Bias,则rand q =goal q ;否则, rand q 不变。

四. Matlab 仿真实验 1.定义环境模型本文仿真是在二维平面上进行的,将整个平面划分为了有障碍部分和无障碍物部分,如下图2所示。

图 2环境模型示意图地图尺寸为100*100,其中白色区域代表无障碍空间,机器人可以随意行走;黑色区域表示障碍物空间,机器人不能通行。

为了仿真的方便,这里的障碍物都选择为圆形,这不影响算法验证的可靠性。

2.定义节点数据结构分析可知扩展树的每个节点有三个必要要素,分别是节点的x ,y 坐标以及其父节点。

因此我们定义节点的数据结构如下:123[,,]node x x x其中12,x x 表示节点在二维平面上的坐标,3x 表示节点的父节点序号。

考虑到起点作为根结点,其没有父节点,因此定义它的父节点序号为0。

3.仿真结果对比 (1)分布障碍地图起点(5,80),终点(90,70)图3 路径规划图,RRT算法(左),改进RRT算法(右)上图中蓝色的“*”点表示扩展树的所有节点,红色的曲线表示规划得到的路径。

通过图3的对比明显可以看出在分布障碍地图中,偏向目标型RRT算法得到的扩展树节点数更少,这说明算法的效率更高。

观察路径曲线可以看出偏向目标型RRT算法得到的路径更优。

(2)狭窄通道地图起点(1,1),终点(90,90)图4路径规划图,RRT算法(左),改进RRT算法(右)从图4中可以看出在狭窄通道地图中,我们可以明显的观察到基本RRT算法在搜索时表现出来的搜索过于平均,算法效率低下的缺陷,而且规划得到的路径也偏离最优路径较大。

而改进后的偏向目标型RRT算法体现出了强烈的趋向于目标点趋势,而且规划得到的路径也非常接近于最优路径。

(3)复杂随机地图起点(1,1),终点(90,90)图5路径规划图,RRT算法(左),改进RRT算法(右)通过图5,我们也可以看出改进后的RRT算法在复杂随机地图中也表现优异,证明了偏向目标型RRT算法的优越性。

五.总结本文针对基本RRT算法存在搜索过于平均,算法效率低下,规划路径偏离最短路径较大的缺陷,分析其缺陷原因在于随机点的确定在全空间分布过于平均导致的。

借鉴启发式算法的思想,我们提出了一种确定随机点的新方法,即让随机点以一定的概率等于目标点,这样就使随机树的扩展有一种趋向于目标点的趋势,从而解决了随机点分布过于平均的缺点。

最后通过Matlab仿真对两种算法的结果对比分析得到,改进后的偏向目标型RRT算法相对于基本RRT算法,无论在算法效率还是路径质量,都体现出了很大的优越性。

参考文献[1]王全.基于RRT的全局路径规划方法及其应用研究[D].国防科学技术大学,2014.[2]加东.基于RRT算法的非完整移动机器人运动规划[D].华东理工大学,2014.[3]林,贾菁辉.基于对比优化的RRT路径规划改进算法[J].计算机工程与应用,2011,47(3):210-213,228.[4]贾菁辉.移动机器人的路径规划与安全导航[D].理工大学,2009.[5]周培培.未知环境下机器人路径规划算法的研究[D].科技大学,2014.[6]猛.基于智能优化与RRT算法的无人机任务规划方法研究[D].航空航天大学,2012.[7]王滨,金明河,宗武等.基于启发式的快速扩展随机树路径规划算法[J].机械制造,2007,45(12):1-4.[8]宋金泽,戴斌,单恩忠等.一种改进的RRT路径规划算法[J].电子学报,2010,38(z1):225-228.[9]乔永兴.自主式移动机器人的路径规划[D].广西大学,2003.[10]磊,叶涛,谭民等.移动机器人技术研究现状与未来[J].机器人,2002,24(5):475-480.[11]刚,林成.复杂环境下路径规划问题的遗传路径规划方法[J].机器人,2001,23(1):40-44.附录本文中使用的Matlab程序%主程序function BiasGoal_RRTMap=CreateMap(1); %创建有障碍物的模拟地图,输入参数为不同的地图类型step=5; %步长startNode=[1,1,0]; %起点endNode=[90,90,0]; %终点tree=startNode; %根结点if((norm(startNode(1,1:2)-endNode(1,1:2))<=step)&(collision(startNode,endNode, Map)==0))path=[startNode(1,1:2);endNode(1,1:2)];elsesuccess=0;while success==0[tree,flag]=extendTree(tree,endNode,step,Map);success=flag;endendpath=findPath(tree);plotmap(Map,path,tree);%创建地图,有三种不同类型的地图function Map=CreateMap(num)if num==1 %分布障碍地图Map.BarNum=3;Map.LLCd=[0;0]; %地图左下角坐标Map.URCd=[100;100]; %地图右上角坐标radius=[20;15;20]; %障碍物半径barCenter=[33,75;38,30;75,50]; %障碍物中心点坐标for i=1:Map.BarNumMap.radius(i)=radius(i);Map.cx(i)=barCenter(i,1);Map.cy(i)=barCenter(i,2);endendif num==2 %狭窄通道地图Map.BarNum=2;Map.LLCd=[0;0];Map.URCd=[100;100];radius=[23.75;23.75];barCenter=[50,76.25;50,23.75];for i=1:Map.BarNumMap.radius(i)=radius(i);Map.cx(i)=barCenter(i,1);Map.cy(i)=barCenter(i,2);endendif num==3 %复杂随机地图Map.BarNum=100;Map.LLCd=[0;0];Map.URCd=[100;100];MaxRadius=2.5;for i=1:Map.BarNumMap.radius(i)=MaxRadius*rand;Map.cx(i)=Map.LLCd(1)+Map.radius(i)+(Map.URCd(1)-Map.LLCd(1)-2*Map.radius( i))*rand;Map.cy(i)=Map.LLCd(2)+Map.radius(i)+(Map.URCd(2)-Map.LLCd(2)-2*Ma p.radius(i))*rand;endend%基本RRT算法程序function [newTree,flagReach]=extendTree(tree,endNode,step,Map)flag=1;while flagrandPoint=[(Map.URCd(1)-Map.LLCd(1))*rand,(Map.URCd(2)-Map.LLCd(2))*rand];distmp=tree(:,1:2)-ones(size(tree,1),1)*randPoint;[mindis,minnum] = min(diag(distmp*distmp'));pvector=randPoint-tree(minnum,1:2);newPoint=tree(minnum,1:2)+pvector/norm(pvector)*step;if collision(newPoint,tree(minnum,1:2),Map)==0newNode=[newPoint,minnum];newTree=[tree;newNode];flag=0;endendif((norm(newPoint-endNode(1,1:2))<=step)&(collision(newPoint,endNode(1,1:2),M ap)==0))flagReach=1;elseflagReach=0;end%改进后的偏向目标型RRT算法程序function [newTree,flagReach]=BiasextendTree(tree,endNode,step,Map)flag=1;Bias=0.5;while flagrandPoint=[(Map.URCd(1)-Map.LLCd(1))*rand,(Map.URCd(2)-Map.LLCd(2))*rand];if rand<BiasrandPoint=endNode(1:2);enddistmp=tree(:,1:2)-ones(size(tree,1),1)*randPoint;[mindis,minnum] = min(diag(distmp*distmp'));pvector=randPoint-tree(minnum,1:2);newPoint=tree(minnum,1:2)+pvector/norm(pvector)*step;if collision(newPoint,tree(minnum,1:2),Map)==0newNode=[newPoint,minnum];newTree=[tree;newNode];flag=0;endendif((norm(newPoint-endNode(1,1:2))<=step)&(collision(newPoint,endNode(1,1:2),M ap)==0))flagReach=1;elseflagReach=0;end%检测新节点和每一个障碍物是否有碰撞,若有则返回1function collision_flag = collision(node, parent, Map);collision_flag = 0;for sigma = 0:.2:1,p = sigma*node(1:2) + (1-sigma)*parent(1:2);for i=1:Map.BarNum,if (norm([p(1);p(2)]-[Map.cx(i); Map.cy(i)])<=Map.radius(i)), collision_flag = 1;break;endendend%随机扩展树完成后,根据每个节点父节点的序号找出可行路径function path=findPath(tree)lastnodenum=size(tree,1);path=[tree(lastnodenum,1:2)];parentnodenum=tree(lastnodenum,3);while(parentnodenum~=0)path=[tree(parentnodenum,1:2);path];parentnodenum=tree(parentnodenum,3);end%画出地图以及路径function plotmap(Map,path,tree)close all;th=0:2*pi/100:2*pi;axis([0,100,0,100]);hold onfor i=1:Map.BarNumX = Map.radius(i)*cos(th) + Map.cx(i);Y = Map.radius(i)*sin(th) + Map.cy(i);fill(X,Y,'k'); %障碍物endplot(tree(:,1),tree(:,2),'*'); %所有节点plot(path(:,1),path(:,2),'r','linewidth',3); %路径课程论文评分标准表。

相关文档
最新文档