欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

路径规划 - 搜索算法详解 (III):用 MATLAB 代码解释 RRT 算法

最编程 2024-04-30 21:06:21
...

本文讲解案例来自于古月学院,该篇也是对笔者学习内容的总结,有需要的朋友可以直接跳转到课程(新人福利8节课特惠价才12!不是广告哈,大家看需求选择,可以先看我的讲解。)。

前两篇我们介绍了Djkstra算法与Floyd算法,前者解决的是从固定起点到固定终点的最短距离的问题,后者解决的是图中任意两个路径点的最短路径问题,当节点数较多时Floyd算法可能会耗费更多时间,大家看需求选择吧。不过两种算法都是广度优先搜索算法,一定能搜出全局最优路径,遇到障碍物时需要重新规划。

本篇将介绍随机采样搜索算法(RRT),相比于上述两种方法,RRT为基于采样的搜索方法,该方法能够快速搜索路径,但是由于是随机搜索生成的路径,一般不是最优的,理论上具备概率完备性,即当搜索时间足够时可以得到最优路径,这是一种时间和路径最优上的权衡。值得注意的是,如果规划的时间不够长、迭代次数太少,可能无法找出实际存在的路径。

什么时候用RRT?

其优点是搜索速度快,因此适用于多*度机器人规划问题(如机械臂)。

一、RRT算法原理与流程

 算法流程图如下,大家可以稍微留个印象,过程很简单!

流程讲解:

1. 节点拓展流程:

起点、终点、障碍物如图1所示,此时随机采样一个点,如图2黄色点所示

在原有路径点中,找到距离采样点最近的点(由于起始路径只有起点,故起点即为最近点)。如图4所示,设定一个生长步长,以最近点与采样点的连线为采样角度,生长步长为距离,生成下一个路径点,此时判断该路径点与上一节点(起点)的连线是否与障碍物发生碰撞。当没有碰撞时将该点作为下一路径点(后面有发生碰撞时候的处理方法)。

循环以上过程,采样、寻找最近点、确定拓展方向、按照步长拓展新节点、判断是否发生碰撞、确定下一节点。

如图8-10所示,此时拓展的节点与障碍物发生了碰撞,此时丢弃此次拓展,并且重新进行采样,重复以上拓展步骤(如图11-12所示)。

2. 判断到达目标点:

由于拓展的节点直接与终点重叠的概率很小,所以当拓展到的节点距离终点在一定距离内时便认为已经搜索成功,此时只需要不断查询上一节点即可生成搜索路径(黄色折线),此时搜索完成。

二、RRT算法MATLAB仿真:

Adamaser/Path-Planning (github.com)