1. 概述
回顾RRT算法,虽然能快速地找到路径,但是得到的路径并不光滑,对机器人移动而言不是最优路径。因此,本文我们介绍优化RRT的算法,即RRT*算法。RRT*与RRT算法流程基本相同,不同之处就在于最后加入将$X_{new}$加入搜索树时父节点的选择策略上不同。
2. 算法详解
RRT算法选择新节点$X_{new}$时,基于随机点和最近邻点,前进制定步长生成。而在RRT*算法中,在选择父节点时会有一个重连(Rewire)过程,也就是以$X_{new}$为圆心,半径为r的邻域内,找到与$X_{new}$连接后,代价(从起点移动到$X_{new}$的路程)最小的节点,并选择该节点作为$X_{new}$的父节点,而不是$X_{near}$。RRT*算法详见下图:
算法步骤:
随机采样、寻找最近和确定新节点
以一定半径,重新选择父节点,选择标准是从初始节点到新节点路径cost最小的路径上的节点作为新节点的父节点,如下图所示:
重布线,对树中的节点,根据起始点到当前节点的cost进行重布线,修改节点的父节点,如下图所示,$x_2$的父节点更改为$x_{new}$:
重布线过程的意义在于每当生成了新的节点后,是否可以通过重新布线,使得某些节点的路径代价减少。如果以整体的眼光看,并不是每一个重新布线的节点都会出现在最终生成的路径中,但在生成随机树的过程中,每一次的重布线都尽可能的为最终路径代价减小创造机会。加入重连步骤后,可以确保在$X_{new}$的邻域范围得到的路径是最优的,所以相较于RRT算法得到的路径,RRT*算法得到的路径更为平直。
3. 代码实现
1 | import numpy as np |
参考:https://github.com/hichenway/sampling-based-path-planning
4. 总结和讨论
RRT*算法迭代的时间越久,就越可以得到相对满意的规划路径。