蚁群算法路径规划_环境感知与规划专题(十)——基于采样的路径规划算法(二)...
前言
上一篇介绍了快速搜索随机树(RRT)算法的原理,这是一种基于采样的路径规划算法,在地图尺寸较大时,其效率将显著的优于基于图搜索的路径规划算法(如A*)。
然而,RRT也有其局限性,如:
- 狭窄通道情况下的搜索效率急剧下降
- 搜索得到的路径不是全局最优的
本篇将针对RRT算法应用时出现的几个问题展开讨论,并阐述几种RRT算法的改进型。
快速获取搜索树中的相邻节点
RRT算法中有一个重要的环节——获取搜索树种距离采样点最近的节点:
该算法的效率直接影响了RRT算法的搜索效率,因此,本篇单独对其进行讨论。
在工程中,我们将搜索树构建为KD-Tree(K-dimensional Tree),通过KD-Tree来搜索相邻节点,它改进的就是上图中的
KD-Tree呢?
KD-Tree(K-dimension tree)是一种对
KD-Tree是一种二叉树,表示对
KD-Tree相当于不断地用垂直于坐标轴的超平面将
KD-Tree的每个结点对应于一个
KD-Tree可以省去对大部分数据点的搜索,从而减少搜索的计算量。
对于RRT算法,我们对搜索树进行KD-Tree构建,以二维问题为例,我们取所有节点中
KD-Tree。
在得到KD-Tree后,我们可以根据需要,快速地搜索到距离
狭窄通道问题(Narrow Passage)
由于RRT算法通常采用蒙特卡洛法采样,其采样概率是均匀分布的,因此,对于狭窄通道(Narrow Passage)的情况,RRT算法的搜索效率将大大降低(搜索树的生长需要经过狭窄通道才能达到目标点,而采样点刚好落在狭窄通道的概率相对于整张地图而言较低),由此,会产生如下现象:
对于该类问题,我们往往采用RRT-Connect算法进行处理,如下图所示,与RRT不同的是,RRT-Connect分别从起始点和目标点构建搜索树,直到两棵搜索树相交,找到一条可通行的路径。
该算法可以大大降低Narrow Passage中由于狭窄通道采样概率较低的问题,具体的实现在此不做赘述,读者可自行搜索Bidirectional RRT / RRT Connect。
RRT * 与 Informed-RRT*
传统的RRT算法搜索得到的路径往往不是全局最优的,于是,RRT算法的改进型——RRT*应运而生。
RRT*是在 RRT算法框架基础上进行了一定的改进,算法流程如下图所示:
与RRT相似的是,我们都需要通过
与RRT不同的是,RRT*中,我们在碰撞检测成功后,搜索以
这里可以对上文提及的KD-Tree搜索方法进行一定的改进,即将
然后,在相邻节点集合
最后,我们需要对重建的搜索树进行剪枝(
RRT*的精髓。对于重建之后的搜索树,我们需要对
例如,
整个过程如下所示,可以看到,RRT* 在搜索到一条可通行路径后,并未停止迭代,而是继续剪枝。从而得到一条接近全局最优的可通行路径,因此,RRT* 较RRT在实际工程中有更广泛的应用。
从上图可以很容易地发现一个问题,当RRT*找到一条可通行路径时,其采样函数依然在整个地图空间中进行均匀采样,然而进行剪枝等操作,那么这样的采样方式显然会耗费大量不必要的时间。
Informed-RRT* 被用于优化该问题,如下图所示,Informed-RRT* 较RRT*节省了大量的时间,究其原因在于优化了采样方式。
Informed-RRT* 在得到一条可通行路径的基础上,以起始点与目标点之间的连线为椭圆的长轴构建椭圆形采样区域,采样函数的采样范围被重新限制在该区域范围之中,随着搜索树的不断剪枝,椭圆范围也在不断地缩小,采样时间也随之减少,由此,大幅度节省RRT*的时间开销。
总结
本篇阐述了一种提高RRT算法搜索效率的数据结构——KD-Tree,并围绕RRT算法应用中碰到的几个问题展开,简述了RRT算法的几种改进型——RRT* 与Informed-RRT*,下一篇中将对满足动力学约束的基于采样的路径规划算法展开讨论。
作者简介: 一个被Coding耽误的无人机算法工程师,控制、导航略懂一二,热衷技术,喜欢乒乓、音乐、电影,欢迎交流。
知乎: @遥远的乌托邦
GitHub: https://github.com/DistantUtopia
微信公众号: @遥远的乌托邦
蚁群算法路径规划_环境感知与规划专题(十)——基于采样的路径规划算法(二)...相关推荐
- Apollo学习笔记(24)基于采样的路径规划算法
之前的文章都是基于搜索的路径算法,这两天在又学习了一下基于采样的路径规划算法,这里做一下记录,最后会奉上大神的链接 基于采样的路径规划算法大致可以分为综合查询方法和单一查询方法两种. 前者首先构建路线 ...
- 【自动驾驶】基于采样的路径规划算法——PRM(含python实现)
文章目录 参考资料 1. 基本概念 1.1 基于随机采样的路径规划算法 1.2 概率路图算法(Probabilistic Road Map, PRM) 1.3 PRM算法的优缺点 1.4 PRM算法伪 ...
- 第3章 第1节-基于采样的路径规划-PRMRRT及其优化
基于采样的路径规划(Sampling Based-Planners) 与基于search方法所不同的是,基于采样的路径规划不需要遍历空间所有点,而是通过在空间中随机撒点,通过线段连点构成路图/树(没有 ...
- 贝叶斯判别分析的基本步骤_环境感知算法-目标追踪1.2- 贝叶斯方法
1. 频率派 vs 贝叶斯 统计学 贝叶斯统计学十分庞大,这里我们只需一个概览. 在自动驾驶环境感知中,我们的目的想要通过一系列的观测来描述我们感兴趣的未知量,解决估计,分类,检测等问题时,比如追踪经 ...
- 一起自学SLAM算法:11.2 环境感知
连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...
- 基于采样的路径规划算法RRT和代码实现
文章目录 前言 一.概率路图法 1.1 采样阶段 1.2 搜索阶段 1.3 Lazy collision-checking 二.快速扩展随机树 2.1 RRT算法流程 2.2 RRT 算法改进 2.3 ...
- 基于采样的路径规划算法总结:RRT-Matlab实现
任务说明 在一张大小800*800具有障碍物的地图里实现RRT算法 算法流程 流程图 流程描述 Sample()函数在地图上随机采样一个点Xrand 遍历树T得到距离Xrand最近的点Xnear 扩展 ...
- rrt算法流程图_基于采样的路径搜索算法代码实现(RRT和PRM)
1.采样法 利用网格法可以得到对特定离散化后C-space的最优解.但网格法的缺点是计算复杂度高,适用于自由度较低的机器人.本文简要介绍另一种基于采样的规划器,它涉及以下函数,通过这些函数构建一个图( ...
- 排序算法python实现_用Python,Java和C / C ++实现的选择排序算法
排序算法python实现 The Selection Sort Algorithm sorts the elements of an array. In this article, we shall ...
- java经典算法思想 贪心_这几道经典例题帮你轻松搞透贪心算法
贪心算法概念叙述 运用贪心算法求解问题时,会将问题分为若干个子问题,可以将其想象成俄罗斯套娃,利用贪心的原则从内向外依次求出当前子问题的最优解,也就是该算法不会直接从整体考虑问题,而是想要达到局部最优 ...
最新文章
- 用 Linux 的 watch 命令观察命令和任务
- EXP、IMP 命令详解
- java自动雨刷系统,安装雨量传感器实现自动大灯/自动雨刷(详细方法)多图!!
- 如何获得CSDN访问量和积分
- 使用hibernate可以优化的地方
- C#.Net工作笔记014---C#中internal的意思
- 单因素方差分析graphpad_【SPSS】单因素方差分析(比较均值gt;单因素ANOVA)
- php7.0和5.6哪个好,PHP7.0与PHP5.6下Laravel博客的应用性能对比介绍
- 【BZOJ4025】二分图(可撤销并查集+线段树分治)
- __construct __destory __call __get __set
- strace ltrace使用
- Java 多线程执行
- 圈圈教你学USB学习资料大全(包含完整光盘和教程)
- 产品管理系统(MVC设计模式)——第一个Javaee项目
- IPv6 寻址方式简介
- Adobe illustrator(AI) 矢量图形软件 | 图像描摹(怎么把白色背景色的图片背景变为透明色)
- Python:for...in range() 、 for...in enumerate() 、for...in() 、for...in zip()的用法
- mysql gbk 乱码_mysql字符集(GBK、GB2312、UTF8)与中文乱码的原因及解决
- SpringBoot源码分析(二)之自动装配demo
- IOS音视频(一)AVFoundation核心类