10_Rapidly Exploring Random Trees_宾夕法尼亚大学机器人运动规划专项课程【学习笔记】

本文解析了随机路图算法和快速扩展随机树(RRT)在运动规划中的应用,介绍了如何构建路标图、RRT的树状构建过程,以及如何利用两棵树寻找起点和终点间的路径。重点讲解了RRT在动态约束系统中的优势和在障碍物环境中的生长策略。

在随机路图算法中,基本思路是建立一个由随机样本点和连接它们的边组成的路标图,一旦建立完成,就可以将想要的起点和终点通过路标图建立连接,得到一条可行路径。注意第一阶段建立的是一般路标图,并未考虑将任何一对特定的起点和终点,这种方法的优点是你可以反复使用路标图来规划多个路径(不同起点和终点)但是有时候,你只想进行一次特定规划,在这种情况下,构建整个自由空间的路标图就很浪费时间,所以最好在采样过程中就考虑起点和终点的位置。

快速扩展随机树 RRT

和随机路图法类似,系统会生成随机样本并尝试将它们连接成网,但是采样方案有所不同,RRT采样过程通过构造一种特殊树图形来进行,其中每个节点都连接到一个父节点,并且树以给定的起点为根。

下图动画显示了在包含障碍物的二维空间内,算法是如何演示为一棵树的构造的过程。
在这里插入图片描述

基本树图构建算法伪代码
在这里插入图片描述
和PRM一样,此算法通过随机采样点将它们连接进当前地图,不同之处在于构建的方式,在迭代中系统都会在构形空间内中生成一个随机点,并检查其是否存在自由空间,然后在现有树中搜索最近的点,并尝试在连接树的当前点和新的随机顶点间直线上来生成新节点,从当前点到新点移动的距离,Delta是算法的参数。

注意,如果随机点与树中最近的现有节点之间的距离小于delta,算法将尝试直接连接这两个位置,下图中的连接顺序证明这种思想,这是原始树
在这里插入图片描述
红色点表示系统随机生成的新点,而y表示树中最近的现有节点
在这里插入图片描述
接下来,有一个新点z,它是通过找到一个点而生成的,其与点y的距离为delta
在这里插入图片描述
最后,下图显示的是更新后,添加z节点后的树
在这里插入图片描述
如果该算法未能成功到达某个随机点,它就放弃这个点,然后转到下个迭代,重新生成一个新的随机样本,然后再连接,像PRM算法一样,假设我们具有某种距离函数,可以用来测量位形空间中两点之间的有效位移,我们还使用相同的本地规划,来确定是否位形空间中的两个点是否可以通过无碰撞的轨迹连接。

事实证明,这种用于生成随机样本的过程对于生成探索并跨越自由空间的树非常有效,因此命名为快速扩展随机树或RRT。
为了创建起点与终点之间的路径,我们实际上要构造两个树,一个以起点为根,一个终点为根,然后用算法引导它们向外扩展直到二者相遇

下图显示了带有障碍物的二维位形空间中树的生长情况
在这里插入图片描述

两树生长过程伪代码

在这里插入图片描述
在每次迭代中。系统都会生成一个随机样本,并尝试使当前树朝向该随机样本的方向增长,如果成功将新点添加到树中,它会使新点连接到另一棵树上以形成网桥,如果成功找到了这样的桥梁,就可以报告成功,意味着已经在两棵树之间建立了一条可行路径,在此过程的每条路径上。它都交换两个树图,这样,两棵树都以相同的速度朝向彼此生长,以下是每一轮的步骤:

在这里插入图片描述

在第一轮,生成一个随机样本点,然后让蓝色的树朝该点的方向生长。然后,通过查看是否可以将刚添加的新点连接到红色树中最近的节点。

在这里插入图片描述

在下图所示情况由于存在障碍,这种连接会失败
在这里插入图片描述
在下一轮中,生成一个新的随机样本点,并尝试将红色的树向该点生长,完成此操作后,尝试将该点连接到蓝树

在这里插入图片描述

这里取得了成功,因此现在可以将起点和终点连接起来了

在这里插入图片描述
和PRM一样,RRT也是概率完备的。实际上,在高维位形空间,用RRT方法构建路径是非常有效的。
RRT的另一个重要特点是可以在具有动态约束的系统上使用,从而限制了系统的移动方式,一个简单的例子就是车型机器人,其转弯半径会受到限制,这意味着它不能侧向平移或不能围绕其中心旋转

感谢 B 站 up 主 Here_Kin 的翻译和分享!
【自制中英】宾夕法尼亚大学机器人专项课程二 运动规划 - Robotics:Motion and Planning

### 介绍 快速搜索随机树(RRT - Rapidly-Exploring Random Trees)是一种常见的用于机器人路径(运动规划的方法,本质上是一种随机生成的数据结构——树。这种思想自从LaValle提出以后得到了极大的发展,至今仍有改进的RRT不断被提出[^1]。 ### 原理 RRT算法的效果是随机采样点会“拉着”树向外生长,从而更快、更有效地探索空间。其随机探索有特定策略,若从树中随机取一个点然后向着随机的方向生长,树可能无法很好地探索空间。在规划路径时,已确定规划的起始点,树需朝着目标点生长,但由于存在障碍物,若让树型一味朝着目标点延伸,可能会因“撞墙”而失败。所以采取随机采样方法,在每次选择生长方向时,有一定的概率会向着目标点延伸,也有一定的概率会随机在地图内选择一个方向延伸一段距离,例如使用`rand()`函数在`[0,1]`区间内随机生成一个数,若小于0.5,则在图的范围内随机采样一个点,否则用目标点作为采样点[^2][^3]。 ### 应用 RRT主要应用于机器人路径规划领域,帮助机器人在复杂环境中找到从起始点到目标点的可行路径,能有效处理存在障碍物的环境。 ### 代码实现 以下是一个简单的Python代码示例,展示了RRT算法的核心逻辑: ```python import numpy as np class RRT: def __init__(self, start, goal, img_binary): self.start = start self.goal = goal self.img_binary = img_binary self.tree = [start] def planning(self): while True: # 随机采样 if np.random.rand() < 0.5: sample = np.mat(np.random.randint(0, self.img_binary.shape[0] - 1, (1, 2))) else: sample = np.mat(self.goal) # 找到树中距离采样点最近的点 nearest_node = min(self.tree, key=lambda node: np.linalg.norm(np.array(node) - np.array(sample))) # 从最近点向采样点生长一定距离 new_node = self.extend(nearest_node, sample) # 检查新节点是否有效 if self.is_valid(new_node): self.tree.append(new_node) # 检查是否到达目标点 if np.linalg.norm(np.array(new_node) - np.array(self.goal)) < 1: break return self.tree def extend(self, nearest_node, sample): distance = 10 # 生长距离 direction = (np.array(sample) - np.array(nearest_node)) / np.linalg.norm(np.array(sample) - np.array(nearest_node)) new_node = np.array(nearest_node) + distance * direction return new_node def is_valid(self, node): # 简单示例,检查节点是否在地图范围内且不在障碍物上 x, y = int(node[0][0]), int(node[0][1]) if 0 <= x < self.img_binary.shape[0] and 0 <= y < self.img_binary.shape[1]: return self.img_binary[x, y] == 0 return False # 示例使用 start = [0, 0] goal = [100, 100] img_binary = np.zeros((200, 200)) # 简单示例地图 rrt = RRT(start, goal, img_binary) path = rrt.planning() print(path) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值