智能驾驶规划控制理论学习03-基于采样的规划方法

目录

一、基于采样的规划方法概述

二、概率路图(PRM)

1、核心思想 

2、实现流程

3、算法描述

4、节点连接处理

5、总结

三、快速搜索随机树(RRT)

1、核心思想

2、实现流程

 3、总结

4、改进RRT算法

①快速搜索随机图(RRG)

②基于运动学的快速搜索随机树(Kinematic-based RRT)


一、基于采样的规划方法概述

        基于采样的方法就是在状态空间中不断地随机撒点,将这些节点根据一定的规则与周围的节点进行连接,以此构造一条条局部路径,最终找到一条从起点到终点的路径。随着采样点的不断增多,最终得到的解会不断逼近最优解。

        一般步骤:

  • 为图表添加随机数种子
  • 以某种策略或者给定条件采样到起始节点
  • 选择和哪些其他节点进行连接
  • 选择添加或者移除哪些边

二、概率路图(PRM)

1、核心思想 

        PRM有两个阶段分别是学习阶段(Learning Phase)和查询阶段(Query Phase)。

        学习阶段:

  • 在配置空间中随机采样足够数量的点;
  • 将相互之间能够到达的节点进行连接。

        查询阶段:

  • 利用图搜索算法寻找图表中从起始节点到目标节点的路径。 

2、实现流程

(a)图中所示为一个用于采样的配置空间,在配置空间中,自动驾驶车辆可以被近似看成一个质点,环境中的障碍物等信息都被近似为图中的forbidden space,自动驾驶车辆在free space空间中运动,二无需考虑其几何形状和运动状态;

(b)图中通过随机采样的方式获得一个坐标点,采样的方法也要根据特定的场景做出不同的选择,常见的采样算法有均匀分布采样(在未知场景中采样)、高斯分布采样(在自动驾驶场景中通常以车道中心线为均值)等;

 (c)图中通过采样大量的点来获取地图的形状;

 (d)图中对采样点进行碰撞检验,删除forbidden space中的采样点;

 (e)图中为删除forbiden space中的采样点后,在free space中保留下来的有效采样点;

  (f)图中每个有效采样点会连接以当前节点为圆心,半径r圆形范围内的所有采样点

 (g)图中若采样点之间的连线与forbiden space相交则发生碰撞,删除发生碰撞的连线;

  (f)图中碰撞检测通过的连线得到保留,作为构成图表graph的边;

 (i)在连线得到的图表graph中添加起始节点和目标节点;

 (j)在graph图中利用图搜索算法寻找最优路径。

3、算法描述

        用伪代码的方式对PRM进行简要描述:

V <- ∅; E <- ∅ // 分别维护两个集合,一个存放顶点,一个存放边
for i = 0,...,n do //假定最大采样点为n,进入循环x <- SampleFree;  //在freespace通过特定的采样策略采样得到一个节点U <- Near(G = (V,E), x, r);  //将节点半径r范围内要专注的邻居节点加入集合U中V <- V ∪ {x}; //将当前采样点x加入集合V中,更新集合Vforeach u in U, in order of increasing ||u - x||, do //对集合U中存入的节点进行处理,为了避免节点过于密集,u和x不能过于接近if x and u are not in the same connected component of G = (V,E) then  // 保证u和x之间的连线与其他连线不重合if CollisionFree(x,u) then E <- E∪{(x,u),(u,x)};  // 通过碰撞检验则将x和u的连线加入集合E
return G=(V,E); // 返回V和E表示的图

        上面是经典的PRM算法描述,也可以对其进行简化:

V <- {x}∪{SampleFree}; E <- ∅;
foreach v in V do U <- near(G=(V,E),v,r)\{v};foreach u in U doif CollisionFree(v,u) then E <- E∪{(v,u),(u,v)}
return G=(V,E);

        主要就是减少了剔除部分节点的步骤,因此在算法实现上效率会降低。

4、节点连接处理

        在PRM实现过程中,选择那些节点相连也是需要考虑的问题,下面给出三种可行的方法:

  • k-Nearest PRM:选择当前节点最近的k个邻居节点

U ← kNearest(G=(V,E),v,k)

  • Bounded-degree PRM:对半径范围内添加的最近节点添加一个边界值k

U ← Near(G,x,r) ∩ kNearest(G=(V,E),v,k)

  • Variable-radius PRM:让连接半径称为对应节点个数的函数,而不是固定的参数

5、总结

        PRM优点:具有概率完备性,只要采样点足够多,并且生成的图表有解那么一定可以结合图搜索算法找到一条最优解路径;

        缺点:

  • 如果是连接特定起点和终点,那么通过PRM的两个阶段先建图在搜索是比较浪费资源的;
  • 搜索得到的路径是节点之间通过直线连接的,不符合车辆的运动学约束。

三、快速搜索随机树(RRT)

1、核心思想

        与PRM有学习和查询两个阶段,并且在学习阶段构造的是一个图不同,RRT只有一个阶段,在采样结束的同时就能确定路径,RRT在采样的过程中维护的是一个树结构。相比图描述的网络关系,树结构描述的是一种层次关系。

        在RRT算法中,通常将起始节点作为树的根节点,在采样搜索到目标节点时通过回溯就可以确定路径。

2、实现流程

        依然使用伪代码对实现流程进行简要描述:

V <- {root}; E <- ∅; // 维护集合V和E,分别存放节点和边,在V中先将初始节点作为根节点放入
for i = 1,...,n doxrand ← SampleFree; // 在freespcace中得到采样点xrandxnearest ← Nearest(G=(V,E),xrand); // 设置离xrand距离最近的树节点为xnearestxnew ← steer(xnearest,xrand); // 通过特定的方式将xnearest与xrand进行连接,此处直接设置了一个中间节点,比较经典的方式设置一段弧长if ObtacleFree(xnearest,xrand) then  // 进行连线障碍物检测V ← V∪{xnew}; E ← E∪{xnearest,xnew};  // 检测通过将边保存到集合E中
return G={V,E};

 3、总结

        优点:如果是找寻找两个特定节点间的路径,RRT的效率会显著地优于PRM;

        缺点:RRT不具备概率完备性,因为它每次都是树的最近节点连接,如下图红色区域中搜索得到的路径显然不是最优解。

4、改进RRT算法

        为了解决RRT算法不具备概率完备性的缺陷,后来又提出了多种改进的RRT算法。

①快速搜索随机图(RRG)
V <- {root}; E <- ∅; 
for i = 1,...,n doxrand ← SampleFree; xnearest ← Nearest(G=(V,E),xrand); xnew ← steer(xnearest,xrand);if ObtacleFree(xnearest,xrand) then Xnear ← Near(G=(V,E),xnew,min{γRRG(log(card(V))/card(V)^(1/d),η); // 将xnew附近给定半径内的所有节点都存入Xnear集合中V ← V∪{xnew}; E ← E∪{xnearest,xnew};foreach xnear in Xnear doif CollisionFree(xnear,xnew) then E ← E∪{xnearest,xnew};  // 将通过碰撞检测的所有Xnear集合中的节点与xnew的连线都存入集合E中return G={V,E};

        核心思想:不仅仅只是连接xnew和xnearest,将xnew半径范围内的所有符合非碰撞条件的节点都连接。

        虽然RRG使得算法具有概率完备性,但是却违背了RRT算法提高效率的初衷,因为RRG算法在实现过程中并没有在维护树结构,输出的依然是一个图,相当于是PRM的学习阶段,还要再利用搜索算法进行最优路径确定。

②基于运动学的快速搜索随机树(Kinematic-based RRT)

        核心思想:利用车辆运动学方法在两个节点之间进行转向,主要在于RRT伪代码中xnew获取步骤的优化。

        上图所示是基于杜宾斯规划(dubins_path_planning)得到的路径,可以看出在引入车辆运动学方法后,得到的最终路径是一条较为平滑的曲线。dubins_path_planning的具体介绍在后面会具体介绍。

四、优化的快速搜索随机数(RRT*)

1、核心思想

  • 与RRG算法相比,RRT*算法维护的是一个树结构,而不是一个图,也就是说会在RRG得的图中删除掉多余的边界;
  • 与原来的RRT算法相比,RRT*增加了重连的步骤以确保各个节点取得的是最小代价值。

2、实现流程

V <- {root}; E <- ∅; 
for i = 1,...,n doxrand ← SampleFree; xnearest ← Nearest(G=(V,E),xrand); xnew ← steer(xnearest,xrand);if ObtacleFree(xnearest,xrand) then // 延续RRG的思想先搜索附近的邻居节点Xnear ← Near(G=(V,E),xnew,min{γRRG(log(card(V))/card(V)^(1/d),η); V ← V∪{xnew};xmin ← xnear; cmin ← Cost(xnearest) + c(Line(xnearest,xnew));// 获取代价值最小节点foreach xnear in Xnear do if CollisionFree(xnear,xnew) && Cost(xnew) + c(Line(xnearest,xnew)) < c(min) thenxmin ← xnear; cmin ← Cost(xnear) + c(Line(xnearest,xnew))// 对节点进行重连,通过xnew更新总代价值值和路径foreach xnear in Xnear do if CollisionFree(xnew,xnear) && Cost(xnew) + c(Line(xnew,xnearest)) < Cost(xnear)then xparent ← Parent(xnear);E ← (E\{xparent,xnear}∪{xnew,xnear}) // 在边集合中删除xnear到其原父节点xparent的连线,重新加入xnew到xnear的连线
return G = {V,E};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker知识点总结二

四、 Docker 架构 Docker使用客户端-服务器(C/S)架构模式&#xff0c;使用远程API来管理和创建Docker容器。 介绍&#xff1a; 1、Docker的客户端client&#xff0c;我们在命令行发送一些信息(命令)给Docker服务端。2、中间这个就是Docker的服务端&#xff0c;在这个服务端里面…

优选算法|【双指针】|1089.复写零

目录 题目描述 题目解析 算法原理讲解 代码 题目描述 1089. 复写零 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素。请对输入的数组 就…

初学者如何快速搭建基于 Selenium Grid 的分布式自动化

Selenium Grid是一个测试工具&#xff0c;它允许我们在不同的机器上针对不同的浏览器运行测试。 配置Hub 为了简单起见&#xff0c;我们将只使用一台机器来设置Hub&#xff0c;并在同一台机器上设置Node来运行测试。 1.需要安装Java 11或更高版本 2.需要安装浏览器 3.需要…

【Python】进阶学习:pandas--isin()用法详解

【Python】进阶学习&#xff1a;pandas–isin()用法详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅…

【简略知识】项目开发中,VO,BO,PO,DO,DTO究竟是何方妖怪?

前言 在项目开发中&#xff0c;是否需要定义VO&#xff08;视图对象&#xff09;&#xff0c;BO&#xff08;业务对象&#xff09;&#xff0c;PO&#xff08;持久化对象&#xff09;&#xff0c;DO&#xff08;领域对象&#xff09;&#xff0c;DTO&#xff08;数据传输对象&…

2.1 mov、add和sub加减指令实操体验

汇编语言 1. mov操作 1.1 mov移动值 mov指令把右边的值移动到左边 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移动寄存器的值 把右边寄存器的值赋值给左边的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位&#xff08;high&#xff09;和低八位&am…

求职招聘类App如何打造的更卓越:解析关键功能和发展趋势

随着人才市场的竞争日益激烈&#xff0c;求职招聘类App成为现代职场中不可或缺的工具。对您来说&#xff0c;一款卓越的求职招聘类App满足您用户的多样化需求是很有必要的。在这篇文章中&#xff0c;我们将深入探讨其关键功能和行业发展趋势&#xff0c;助您的App在市场中脱颖而…

腾讯云学生服务器使用教程_申请腾讯云学生机详细流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

overleaf上传到arxiv 参考文献无法引用(?)

记一下overleaf上传到arxiv的bug 参考文献无法引用&#xff08;&#xff1f;&#xff09; 因为需要上传bbl文件而不是bib 用overleaf生成bbl 另外需要将bbl和txt的文件名设置成一样的

机器学习 | 贝叶斯优化

机器学习 | 贝叶斯优化 在科学与工程领域&#xff0c;我们经常面临着需要优化某个目标函数的挑战。这个函数可能是一个复杂的黑箱&#xff0c;难以解析或者成本高昂。举个例子&#xff0c;我们可能希望在所有可能的药物组合中找到一种新药物&#xff0c;它对某个特定人群具有最…

购买腾讯云服务器请先领取代金券,2024腾讯云优惠

腾讯云优惠代金券领取入口共三个渠道&#xff0c;腾讯云新用户和老用户均可领取8888元代金券&#xff0c;可用于云服务器等产品购买、续费和升级使用&#xff0c;阿腾云atengyun.com整理腾讯云优惠券&#xff08;代金券&#xff09;领取入口、代金券查询、优惠券兑换码使用方法…

React富文本编辑器开发(一)

这是一个系统的完整的教程&#xff0c;每一节文章的内容都很重要。这个教程学完后自己可以开发出一个相当完美的富文本编辑器了。下面就开始我们今天的内容&#xff1a; 安装 是的&#xff0c;我们的开发是基于Slate的开发基础&#xff0c;所以要安装它&#xff1a; yarn ad…