基于采样的路径规划(Sampling Based-Planners)

与基于search方法所不同的是,基于采样的路径规划不需要遍历空间所有点,而是通过在空间中随机撒点,通过线段连点构成路图/树(没有障碍的),来抽象的表达这个空间。 这个更高效,更适用于复杂环境、三维/高维空间

1. complete Planner完备规划器:在一定时间内,总可以找到一条路径从出发点到终点,A*就是

2. Probabilistic Complete Planner概率规划器:如果一个解存在(路径规划=找函数的解,如高斯法),使用随机采样的方法,改规划器最终能找到这个解

3. Resolution Complete Planner:和上面一样,但是基于一个确定的采样(如在一个fixed grid中采样

课程安排

1.概率路图

2.快速搜索随机树RRT

3.优化算法

4.Advanced 算法

5.实际应用

Probabilistic Road Map 概率路图(PRM)

PRM:是一种图结构

他把规划分为两个阶段:

1.学习Learning phase:学习地图结构:在环境中撒点,连点,从而做出一个图的结构,这是图的简化版,找路径直接在这个上找就会简单很多

1)采样

(1)随机采点 (2)障碍物中的点扔掉


|

|

2.连接相邻的点,得到无碰撞的有效分割

要求:

(1)起点、终点要被连接到里面,点与点之间的连接要符合距离要求:太远的点不能连(如图不能连1-3,1-4等,避免路径太多,查询效率低)所以红色的线要删掉 (2)有障碍物的点不要,所以删除绿色的线


|


|

2.查询 Query phase

直接用Dijkstra或者A*找到一条路径

直接A*等就很复杂,要很多网格计算

eg

1学习过程 2查询过程

优点Pros:概率完备的:若存在解,那么在空间中随机踩点,肯定可以找到解;相对于Dijkstra和A*不需要在整个环境中搜索,只要给出图(简化的环境)就可以找出,效率更高

问题Cons:要解决两点之间的约束,因为两个直线之间是不可导的,不适合机器人行走,要构造一条曲线满足机器人行走; 算法过于冗长,一开始就单纯的简化环境,没有考虑起始点与终点,相对不够有效率

3.PRM改进-Lazy collision-checking

效率影响因素:检查点是否在障碍物内很耗时

Lazy collision-checking:直接不考虑点在不在障碍物内,直接不去点。这样生成的路径可能是经过障碍物的,那么再把这个不可行的点及其相关的路径删了,再重新构图,…,以此类推,直到找到可行路径

||

快速搜索随机树(Rapidly-exploring Random Tree)

相对于PRM更有针对性,能快速规划,在复杂/高维环境下搜索效率更高

在起点x init附近采样一些点构成树,相对于PRM是一种增量式的路径(首先采点,找树里面最近的点做一些连接,并且要障碍物检测,然后把新的点添加到树中,这个过程不断迭代,从而把树构建出来。直到把目标点也添加到树中,则可以找到从起始点到终点的路径

相对于之前的PRM,这个Tree方法不需要区分learning phase和query phase,他的目标就是构建一条路径,只要目标点被加入则反方向查询直接找到路径,而且不需要A*等算法。

伪代码:

输入:地图、初始点、终点

输出:起点到终点的路径

for i=1 to n do

第一次循环:(比较简单)

得到蓝色采样点,得到蓝色-红色路径,让红色往这条线上走DeltaDeltaDelta距离,得到小的红色点,若这条段线段上没有障碍物,则原红色点+现在的线段=更新后的树

第二次循环

(1) x_rand<-Sample

Sample得到随机点x_rand

(2)x_near<-Near(x_rand,\Tau)

再刚刚生成的树上找一点距离x_rand最近的点x_near

(3)x_new<-Steer(x_rand,x_near,StepSize)

(4)E_i<-Edge(x_new,x_near)

(5) if CollisionFree(M,E_i) then \Tau.addNode(x_new) \Tau.addEdge(E_i)

Steer就是x_near到x_rand的连线上移动一定的距离StepSize,得到新的点x_new,和边Ei,如果这个edge Ei和Point x_new是collision-free的,那么这个点和边就加到树里面去,完成一次更新

后面的循环:若出现collision,则因为(5)中的判断条件,则边和点不会加到树中

最后

(6) if x_new=x_goal then Success(其实这力不应该直接说最后把绿色的点加入树就成功了,而是把绿色周围的点加到树中就成功了,因为绿色的点不一定会被随机采样到。如果绿色周围的点被选中,则也说明路径规划完成,只是有一定的偏移量

|||

所以从终点倒着找父节点,最终找到起始节点,则路径就出来了

缺点:区域特殊,如下。落在狭窄区域的概率比较小,导致可能一直在一侧扩散

|||

PPT的优势与缺点

优势Pros:相对于PRM,更有针对性的去找起点到终点的路径,速度较快

缺点Cons:不是最优路径(不是最短,也不是完全符合运动学约束)

改进:toward improving efficiency

1.Kd-tree

当重新选取一个rand点时,需要找打离其最近的点–笨方法是一一对比;Kd-tree工具:对所以点取横坐标的中位数,4,然后根据4划分成左右两支,再左右两侧分别纵坐标,…这个方法可以快速找到离你最近的点

2.Bidirectional RRT/RRT Connect

通过一次采样,在起点、终点处分别构建树,直到x_rand同时连接两棵树算法截止

有利于解决狭窄区域的概率比较小,导致可能一直在一侧扩散的问题,因为在终点也生成树了!

Bidirectional RRT 相对于单纯的RRT效率是高的,对于特例:终点在narrow path的问题也很有帮助,但对于narrow path问题他不是解决的唯一方式,更多的人倾向于通过改进采样的方式来解决narrow path问题:通过一些采样函数使得在狭窄区域落的点采样多一点(自行百度了解)

第3章 第1节-基于采样的路径规划-PRMRRT及其优化相关推荐

  1. Apollo学习笔记(24)基于采样的路径规划算法

    之前的文章都是基于搜索的路径算法,这两天在又学习了一下基于采样的路径规划算法,这里做一下记录,最后会奉上大神的链接 基于采样的路径规划算法大致可以分为综合查询方法和单一查询方法两种. 前者首先构建路线 ...

  2. 【自动驾驶】基于采样的路径规划算法——PRM(含python实现)

    文章目录 参考资料 1. 基本概念 1.1 基于随机采样的路径规划算法 1.2 概率路图算法(Probabilistic Road Map, PRM) 1.3 PRM算法的优缺点 1.4 PRM算法伪 ...

  3. 基于采样的路径规划算法总结:RRT-Matlab实现

    任务说明 在一张大小800*800具有障碍物的地图里实现RRT算法 算法流程 流程图 流程描述 Sample()函数在地图上随机采样一个点Xrand 遍历树T得到距离Xrand最近的点Xnear 扩展 ...

  4. 基于采样的路径规划算法RRT和代码实现

    文章目录 前言 一.概率路图法 1.1 采样阶段 1.2 搜索阶段 1.3 Lazy collision-checking 二.快速扩展随机树 2.1 RRT算法流程 2.2 RRT 算法改进 2.3 ...

  5. 自动驾驶路径规划——基于概率采样的路径规划算法(RRT、RRT*)

    目录 1. RRT算法背景 1.1 RRT算法核心思想 1.2 RRT算法优缺点 2. 经典RRT算法 2.1 RRT算法流程 2.2 RRT伪代码 3. 基于目标概率采样 4. RRT*算法 4.1 ...

  6. rrt算法流程图_基于采样的路径搜索算法代码实现(RRT和PRM)

    1.采样法 利用网格法可以得到对特定离散化后C-space的最优解.但网格法的缺点是计算复杂度高,适用于自由度较低的机器人.本文简要介绍另一种基于采样的规划器,它涉及以下函数,通过这些函数构建一个图( ...

  7. 自动驾驶路径规划——基于概率采样的路径规划算法(PRM)

    目录 1. PRM算法流程 1.1 预处理 1.2 搜索 2. PRM算法案例 2.1 构型采样 2.2 邻域计算 2.3 图搜索(A*搜索) 3. 采样数量的影响 4. 采样策略 4.1 基于障碍物 ...

  8. 基于图搜索的路径规划方法

    ps:本文的相关图片来自与深蓝学院的课件. 图搜索的基本概念 Workspace:现实空间. 配置空间:机器人表示为一个点,障碍物表示为无法达到的点. 下面是不同的图的形式:抽象图.无向图.带权重的图 ...

  9. 【路径规划】基于PSO的路径规划问题【Matlab代码#7】

    文章目录 [`获取资源`请见文章第5节:资源获取] 1. 粒子群算法(PSO) 2. 路径规划问题介绍 3. 部分代码展示 4. 结果图展示 5. 资源获取 [获取资源请见文章第5节:资源获取] 1. ...

最新文章

  1. 汇编语言关于8086CPU多种寻址方式总结
  2. 【硬件基础】个人感悟+C语言 引入头文件时引号括号的区别
  3. Ubuntu 安装OpenCV3.0.0
  4. JAVA springboot ssm b2b2c多用户商城系统源码:服务消费(基础)...
  5. Windows2003使用WEB方式修改域用户密码
  6. 线程同步的各种方法汇总
  7. 2019-0405视觉SLAM的学习第四讲
  8. 用vsftp建立个人ftp站点
  9. read()/write()的生命旅程之二——第二章:read()
  10. java教程 电子书_java教程合集(25本)
  11. java 定时关机_java实现电脑定时关机的方法
  12. omnigraffle所有模板免费下载网站
  13. BP神经网络的基本思想,bp神经网络原理简述
  14. LSH(Locality Sensitive Hashing)原理与实现
  15. 考试总结T2(接上次整的T1)
  16. DGL dist sampling OP
  17. assign和weak之间的区别
  18. 大众点评景点美食楼盘点评(Android,AndroidStudio,IDEA,SpringBoot,Mysql)
  19. 俄语专业个人简历范文
  20. 计算机机场基础知识,全国机场频率_电脑基础知识_IT计算机_专业资料

热门文章

  1. SSB配置异常引起的问题
  2. 学生默写陆游的古诗《卧春》
  3. tomcat6和jdk5版本运行项目报version error
  4. VMware安装新版本ChromeOS
  5. Servlet转发和重定向的区别
  6. ubuntu下ssh2安装
  7. [CF626E]Simple Skewness
  8. 微信公众号测试账号申请,后台获取公众号关注取关事件,获取用户发送消息
  9. 网页被篡改怎么防护?
  10. 世界那么大,我想去看看!