RRT系列算法大体流程概括以及从理论到实践需解决的问题

   本篇文章主要包含两部分内容,第一部分是对常见的RRT系列算法大体流程的概括,第二部分是RRT算法从理论到真车使用所必须要解决的问题。


   一、常见的RRT系列算法大体流程的概括

   1、RRT

   通过Sample函数随机选取一个点Xrand,然后通过Near函数找到当前树上距离Xrand最近的一个点Xnear,再通过Steer函数,沿着从Xnear到Xrand的方向走一步,步长为Stepsize,得到一个点Xnew,通过Edge得到Xnear和Xnew之间的边EI,如果这个边Ei是无碰撞的,就将这个点Xnew和边Ei添加到树上,完成一次拓展,然后进行下一次拓展,直至终点或者终点附近一定区域的点添加到树上,就找到了一条从起点到终点的路线

   缺陷和不足:对于狭窄的区域,由于采样点落在狭窄区域额概率较小,使得RRT的效率大大降低。此外RRT规划的路径很多时候不是最短路径,且规划的路径平滑性较差



   2、Bidirectional RRT / RRT Connect

   与RRT相比,Bidirectional RRT / RRT Connect的不同之处在于一次撒点,同时进行两棵树的构建,即第一棵树以起点为根节点进行拓展,第二棵树以终点为根节点进行拓展。
   拓展结束分为四种情况,一是第一棵树上的点找到了第二棵树上的点,二是第一棵树上的点找到了终点,三是第二棵树上的点找到了第一棵树上的点,四是第二棵树上的点找到了起点。(尽管第二和第四这两种情况很少会出现,但是为提高鲁棒性,最好还是要考虑进去)

   与RRT相比,Bidirectional RRT / RRT Connec的适用性更好一些,比如下面这种情况下,因为终点在狭窄区域内,从内往外拓展容易的多,可以避免采样点落在狭窄区域概率小的问题(当然仅这种特殊情况可以避免)

   此外,Bidirectional RRT / RRT Connec的效率明显高于RRT,带来的代价是实现起来会相对复杂一些

   缺陷和不足:对于大部分狭窄的区域,依然存在采样点落在狭窄区域额概率较小,规划效率低的情况。此外Bidirectional RRT / RRT Connec规划的路径很多时候不是最短路径,且规划的路径平滑性较差



   3、RRT*

   RRT * 针对性的解决生成的路径不是最优的问题,跟RRT一样,RRT*也是先通过Sample函数随机选取一个点Xrand,然后通过Near函数找到当前树上距离Xrand最近的一个点Xnear,再通过Steer函数,沿着从Xnear到Xrand的方向走一步,步长为Stepsize,得到一个点Xnew

   与RRT不同的是,在得到Xnew后不是直接将Xnew与Xnear连起来,而是通过NearC函数在以Xnew为圆心的,R为半径的圆的区域内去找到Xnew附近的一些节点,如上图中的Xnear、X1、X2

   然后通过ChooseParent函数,将Xnew将这些点连接起来,分别计算从起点到Xnew的这三条路径哪一个花费是比较小的,这里的花费可以选为路径最短,也可以选择其他标准,上图中的例子中通过Xnear到达Xnew的那条路是最短的,这个时候Xnear就被选作了Xnew的父节点,如下图所示

   然后通过rewire函数去优化路径,将X1和X2分别与Xnew相连,去判断原来从起始点到X1的路更好,还是现在经过Xnew到X1的路更好,这里采用的衡量标准是路径长度,显然对于X1而言,是原来的路更短,不做处理,对于X2而言,显然是经过Xnew的路更短,因此将X2的父节点更改为Xnew,如下图所示:

   除此之外,相对于RRT算法,RRT*在找到一条从起点到终点的路径后并没有停止,而是不断的优化,所以说RRT * 是一种渐进最优的算法,而RRT是一种非最优的算法

   缺陷和不足:对于狭窄的区域,由于采样点落在狭窄区域额概率较小,使得RRT的效率大大降低。相比于RRT,RRT * 规划的路径的最优性得到了很大的改善,从理论上可以认为是一种渐进最优的算法,规划的路径平滑性较RRT已经有了一定的提高,但是依然比较差



   4、Kinodynamic-RRT*

   相较于RRT*,Kinodynamic-RRT*改进了Steer函数,采用曲线将点连接到树上,如下所示:

   缺陷和不足:对于狭窄的区域,由于采样点落在狭窄区域额概率较小,使得RRT的效率大大降低。相比于RRT * ,Kinodynamic-RRT * 一定程度上改善了路径的平滑性,但是随之带来了平滑后路径是否存在障碍物的检测及约束等问题。



   5、Anytime-RRT*

   Anytime-RRT*在机器人人移动的过程中会不断的将机器人的当前位置作为树的根节点,可以更好的适用变化的环境



   6、Informed RRT*

   我们用RRT * 去找到了一条可行路径,Informed RRT * 将采样的方法限制在一个椭圆里,在找到的路径附近去撒点,对于无用的空间不再进行撒点,提高了效率,如下图所示:

   将起始点和终点作为椭圆的焦点,将当前规划出来的路径长度作为椭圆上的点到两焦点的距离之和,在椭圆的范围内进行撒点,随着路径的长度变短,椭圆也变窄,采样的范围也会进一步收缩,采样的过程也会也来越快

   缺陷和不足:Informed RRT * 仅仅是提高了找到可行路径后的采样效率,但是对于狭窄的区域,寻找可行路径的效率低的问题并没有改善。



   二、RRT算法从理论到真车使用所必须要解决的问题

   上面提到的所有的评价仅仅是从理论上考虑的,当你把RRT /RRT * 系列算法用在真正的机器人上去进行路径规划的时候,还存在很多需要解决的问题,跟A*算法不一样,RRT系列算法从理论到实战需要走的路很长。

   下面以Informed RRT * 为例进行思考:

   1、Informed RRT * 仅仅是从理论上可以得到渐进最优解,可是不要忘了,这里有个修饰词 “渐进” ,得到最优解有个前提 — 足够的时间,也就说找到可行路径后,必须经过足够长时间的Informed过程,才能找到最优解,然而在实际应用中,我们的机器人是实时运动的,尤其对于动态的环境下,我需要快速的获取实时规划出的路径,留给RRT * 去采样优化路径的时间非常短,从而渐进最优性很难得到保障



   2、RRT/RRT * 系列算法是基于随机采样的算法,这也就导致了,其规划的路径存在不稳定性,在理论上,我们给定一个起点,一个终点,使用RRT/RRT * 进行一次路径规划,正如你所看到的那些MATLAB仿真效果一样,看起来没有多大问题,但是在真正的机器人上去使用的时候,对于同一个目标点,随着机器人的移动,是需要进行很多次规划的,由于该系列算法的随机性,两次规划的路径之间很有可能存在很大的差异,也就导致规划的路径稳定性很差,进一步很有可能出现机器人在两条差异很大的路径间不断徘徊的问题,导致很难到达目标点



   3、对于狭窄的区域,类似于迷宫类地图,RRT系列算法的搜索效率问题



   4、由于拓展的随机性,导致规划的路径的平滑性很差,过于折线化,尤其是对于阿克曼结构的小车而言,规划的部分路径很难跟随



   5、在实战中很多情况下并不适合在椭圆内进行撒点,并不是所有的情况在椭圆内撒点的效率就一定高,必须考虑什么情况下可以用,什么情况不能用



   以上仅列举了部分将RRT系列算法部署到机器人上进行导航时会遇到的问题,当你真正去做这件事的时候,也许会遇到很多新的问题,所有说与A * 不同,将RRT/RRT * 系列算法从理论到实战要走的路很长。而A * 这种基于搜索的算法相对来说要容易很多,至少它可以是最优的、稳定的、实时的。这应该也是为什么ROS官方提供的全局路径规划算法是基于搜索的A * 和 Dijkstra 算法,而不是基于采样的RRT系列算法的原因之一



   最后,欢迎正在尝试将RRT系列算法部署到移动机器人的小伙伴们积极的交流讨论

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕羽★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值