一文弄懂基于采样的路径规划-RRT系列(python代码)

news2024/10/6 8:29:40

基于采样的路径规划算法-RRT系列
VX关注晓理紫并回复rrt获取代码
[晓理紫]

1、基于采样的路径规划算法

基于抽样的规划方法(或称概率方法)通过在连续 C 空间中逐步或批量抽样,构建由离散 C 空间样本连接的树或图,从而捕捉解空间的连通性,进而得出可行或最优解,而无需明确构建解空间。其性能主要取决于采样策略、碰撞检查和邻域搜索。

1.1 概念

  • 解连续空间的确定
    • 在连续的勾型空间中采样离散的样本构成树或者图结构来表征连续空间
  • 两大基本任务
    • 探索解空间:获取搜索空间拓扑信息,即空间子集的连接方式。(生长路径树或者路径图的过程)
    • 增量式完善解空间:通过处理探索任务计算出的可用信息,逐步完善解决方案。(使路径树或者路径图填满解空间)
  • 常用术语
    • 概率完备性(针对可行解,如果有解一定可以找到可行解):当样本数接近无穷大时,如果存在可行解,则找到可行解的概率为 1。
    • 渐近(接近)最优性:当样本数接近无穷大时,返回解决方案的成本几乎肯定会收敛到最优值。
    • 随时,即时性:快速找到可行但不一定是最优的解决方案,然后随着时间的推移逐步改进。

2、 可行解算法

常用的可行解算法有 Probabilistic Road Map (PRM),Rapidly-exploring Random Tree (RRT)

2.1 PRM

  • 什么是 PRM?(得到图结构,渐进的探索解空间的连续性)

    • 探测图形结构中的空间连通性;
    • 精细覆盖自由空间;
    • 将规划分为两个阶段:
      • 学习阶段:如何构建图的过程
      • 查询阶段:
  • 学习阶段

用随机点检测 C 空间,并构建表示环境连通性的图形。步骤如下

1、在 C 空间中在随机采用 N 个点

在这里插入图片描述

2、删除碰撞的点与碰撞的边

(在空间中采用 N 个点,检查 N 个点是否和障碍物发生碰撞,删除发生碰撞的点,并与相邻的点进行尝试链接。并对链接的边进行碰撞检测,如果边是碰撞的删除。)
在这里插入图片描述

删除红色的边

  • 查阅阶段

在路线图上搜索,找到从起点到目标的路径((使用 Dijkstra 算法或 A* 算法)。路线图现在与网格图(或简化网格图)相似。)

在这里插入图片描述

  • 优缺点

    • 优点

      可进行多次查询(静态地图)

    • 缺点

      在状态空间上构建图,但不特别注重生成路径。

  • 提高效率

碰撞检查过程非常耗时,尤其是在复杂或高维环境中。

  • 懒惰碰撞检测

    • 在采样点并生成线段期间,并不考虑碰撞(Lazy)。

    • 在不进行碰撞检查的情况下,在生成的路线图上寻找路径。
      在这里插入图片描述

    • 如果路径存在碰撞,则删除相应的边和节点。
      在这里插入图片描述

    • 重启路径查找。直到找到符合条件的路径

在这里插入图片描述

2.2 快速探索随机树(RRT)

通过执行随机控制,在树中生成 “next states”,从而建立一棵从起点到目标的树

在这里插入图片描述

  • 算法步骤
    在这里插入图片描述

    • 1 增量式采样,的到采样点 X r a n d X_{rand} Xrand

在这里插入图片描述

  • 2 在已有节点中找到 X r a n d X_{rand} Xrand的最近邻节点 X n e a r X_{near} Xnear

在这里插入图片描述

  • 3 从 X n e a r X_{near} Xnear节点指向 X r a n d X_{rand} Xrand方向进行拓展得到 X n e w X_{new} Xnew,并连接 X n e a r X_{near} Xnear X n e w X_{new} Xnew

在这里插入图片描述

  • 4 对连接的边进行碰撞检查

在这里插入图片描述

  • 直到找到目标节点退出(判断节点到目标节点的距离是否小于一定距离,若是小于尝试连接)

在这里插入图片描述

  • 演示

动画

  • 优缺点
    • 优点
      • 易于实施
      • 旨在找到一条从起点到目标的路径
      • 比 PRM 更注重目标
    • 缺点
      • 不是最佳解决方案
      • 效率不高(有待改进)
      • 在整个空间中取样

3、最优路径规划方法

3.1、最优标准

动态程序设计 (DP) 函数方程(离散形式)

f ( j ) = m i n i ∈ B ( j ) { f ( i ) + D ( i , j ) } , j ∈ C / { 1 } f(j)=min_{i\in B(j)}\{f(i)+D(i,j)\},j \in C /\{1\} f(j)=miniB(j){f(i)+D(i,j)},jC/{1}

B ( j ) B(j) B(j):表示 j 的前一个节点, D ( i , j ) D(i,j) D(i,j):从节点 i 过度到节点 j 的代价, f ( j ) f(j) f(j):从起始节点到 j 节点的代价(从起点到某一个节点的最优代价是其前面算有节点的最优代价加上前面节点到此节点代价之和的最小值)

  • 例子

在这里插入图片描述

DP 功能方程并不构成算法!

3.2、直接 DP 方法

在这里插入图片描述

  • 只需处理一次,就能确定每个状态的成本价值。
    • 在计算 f(j) 值时,f(i) 的所有相关值必须已经以某种方式计算过了。
    • 图必须是非循环的。

在运动规划中,状态图(或网格)几乎肯定是循环的。
每个状态可以处于任意级别(步长),只能通过范围查询或 k-NN 查询来访问状态。
基于采样的方法在增量或批量生成隐式随机几何图(RGG)时引入了某种随机性。它仍可被视为图搜索。

PRM 是先构建图在去搜索,RRT 是边构建图边搜索

3.3、快速探索随机树* (RRT*)

对于RRT的改进,渐近最优(在条件允许的情况下)

在这里插入图片描述

相同的迭代次数花费的时间更少

  • 伪代码
    在这里插入图片描述

  • 分步解释

    • 获取 x_new 周边 N 个临近节点
      在这里插入图片描述

    • 考虑历史成本,而不仅仅是局部信息,选择父节点

    在这里插入图片描述

    • 连接边

在这里插入图片描述

  • 调整树结构,提高局部最优性

在这里插入图片描述

RRTRRT*
在这里插入图片描述
在这里插入图片描述
  • 如何确定查询范围

在这里插入图片描述

r a n g e = m i n { γ . ( l o g ( c a r d ( V ) ) c a r d ( V ) ) 1 d , η } range = min\{\gamma.(\frac{log(card(V))}{card(V)})^{\frac{1}{d}},\eta\} range=min{γ.(card(V)log(card(V)))d1,η}

要保证 γ > ( 2 ( 1 + 1 d ) 1 d ) ( μ ( X f r e e ) ξ d ) 1 d \gamma>(2(1+\frac{1}{d})^{\frac{1}{d}})(\frac{\mu(X_{free})}{\xi_{d}})^{\frac{1}{d}} γ>(2(1+d1)d1)(ξdμ(Xfree))d1

其中 η \eta η:生成距离(步长), c a r d card card,势集合个数, d d d:维度,几维空间。 γ \gamma γ:保证最优性

根据经验,对于低维规划, γ \gamma γ可以设定一个比步长距离稍大的恒定范围。

  • 实际使用技巧

    • 偏差采样:向目标偏置样本(根据目标位置使用类似贪心策略有意向目标方向采样)
    • 剔除样本:剔除 g + h > c* 的样本
    • 分支与边界(树修剪):修剪不具前景的子树,以降低邻居查询成本。
    • 图形稀疏化:通过解析剔除样本。引入近似最优。
    • 邻居查询:k-nearest 或 range near;近似近邻;不同维度的范围树
    • 延迟碰撞检查:根据潜在的代价值对邻居进行排序。按顺序检查碰撞,一旦发现无碰撞边,即停止检查。
    • 双向搜索
    • 条件重绕:重新布线,直到找到第一个解决方案。
    • 数据重用:存储 ChooseParent 和 Rewire 的碰撞检查结果(仅对对称成本有效)。

4、 加速收敛

4.1 RRT#

  • RRT* 的缺陷

    • 过度扩展:"重新连接 "无前景的顶点。

在这里插入图片描述

  • 扩展不足: "重新调整"只在生成树中添加新节点后才会发生,而且只对其 "附近 "节点起作用。它不能保证任何中间迭代的临时路径都是最优的。

在这里插入图片描述

  • RRT#对 RRT*进行了优化,在一定条件下可以渐近最优
RRT#RRT*
在这里插入图片描述
在这里插入图片描述

5、提高采样

5.1、信息集合

信息集合的估计方法

  • 边界框
  • 路径启发式
  • L2 启发式

在这里插入图片描述

  • 准确度与召回率计算(从上图可以看出 L2 的准确率和召回率都是最好的)

在这里插入图片描述

  • L2 启发式采样步骤

原理图

在这里插入图片描述

  • 步骤 1

    • 先随机采样找到起点到目标点的路径 P1
  • 步骤 2

    • 以起点与目标点作为椭圆(实际画出来不一定是)两个焦点,路径 P1 长度为长轴长画一个椭圆,在椭圆内部进行扩展连接删除外部的点。直到找到最优解(注意路径 P1 的 cost 要采用欧式距离 L2-Norm 进行估计才行 )

在这里插入图片描述

动画演示

在这里插入图片描述

5.2、GuILD 引导式增量局部寻优

  • L2 启发式的缺陷

    • 只有当前解较好时椭圆才能起到作用
    • 当环境特别复杂时不一定可以找到最优解
      在这里插入图片描述
  • GuILD 方法原理图

在这里插入图片描述

  • 步骤 1

    • 随机采样找到最优路径 c
  • 步骤 2

    • 设置信标点 b,以起点 vs 与 b 点为焦点以起点到 b 点的路径长度 g(b)为长轴进行画椭圆
  • 步骤 3

    • 以信标点 b 与目标点 vt 为焦点,最优路径 C 的长度减去 g(b)为长抽画椭圆。一步步收紧直到找到最优解

    在这里插入图片描述

对于信标b的选择可以参考ZJU-FAST-Lab的sampling-based-path-findingi项目中的rrt_sharp.h的beaconSelect函数

3 代码获取方式

VX关注晓理紫并回复rrt获取代码
{晓理紫|小李子}喜分享,也很需要你的支持,喜欢留下痕迹哦!

动画来源于https://github.com/ZJU-FAST-Lab/sampling-based-path-finding

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞书应用配置+蓝鲸流水线+jump server

开发者后台创建应用 配置应用基础信息,权限,安全等 管理后台 设置应用在工作台的可见范围和其他设置 Linux 常用命令:Linux 常用命令, ll 文件夹下文件,ls 文件,cd进入目录, cat 查看文件, v…

php反序列化+题

含义: php序列化(serialize):是将变量转换为可保存或传输的字符串的过程php反序列化(unserialize):就是在适当的时候把这个字符串再转化成原来的变量使用这两个过程结合起来,可以轻…

微信小程序底部安全区域高度获取

CSS 属性 safe-area-inset-bottom safe-area-inset-bottom 就是安全区的高度 padding-bottom:env(safe-area-inset-bottom); wx.getSystemInfoSync() wx.getSystemInfoSync()可以获取系统信息 let system wx.getSystemInfoSync() let bottomSafe system.screenHeight -…

React 全栈体系(十三)

第七章 redux 五、redux 异步编程 1. 理解 redux 默认是不能进行异步处理的,某些时候应用中需要在 redux 中执行异步任务(ajax, 定时器) 2. 使用异步中间件 npm install --save redux-thunk 3. 代码 - 异步 action 版 3.1 store /* src/redux/store.js */ /*** 该文件专…

全景剖析|国产芯(CPU、GPU、SSD、NAND、DRAM)虽有突破,但路还很长

这两天小编看到两个有关国产芯的消息,很有感触,本文小编分享下所思所想,如有不当之处,还望包涵,可以留言指正! 第一个消息是:近日,华为轮值主席 徐直军在2023世界计算大会上,有个国产芯的呼吁,“我们不要抱有幻想,应该坚定不移的打造可持续发展的计算产业生态。从计…

Webpack打包时Bable解决浏览器兼容问题

当我们使用js新特性语法编写代码时,在旧的浏览器中兼容性并不好。但是我们希望能够在旧浏览器中使用这些新特性。 使用babel可以使js新代码转换为js旧代码,增加浏览器的兼容性。 如果我们希望在Webpack中支持babel,则需要在Webpack中引入bab…

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

文章目录 一、静态成员函数简介1、静态成员函数概念2、静态成员函数声明3、静态成员函数访问4、静态成员函数只能访问静态成员 二、代码示例 - 静态成员函数 一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C 类中 , 静态成员函数 是一种 特殊的函数 , 该函数…

记一次manjaro-i3系统sogoupinying候选词无法正常显示中文(变方框了)问题解决方案

记一次manjaro-i3系统sogoupinying候选词无法正常显示中文(变方框了)问题解决方案 前言解决方案 前言 今天早上发现公司电脑显卡驱动好像坏了,各种折腾完了干脆把系统搞黑屏无法开机了,时间有限懒再修了,于是重装了系…

【C++面向对象侯捷下】1.导读

文章目录 来源:我的百度网盘 百科全书 专家书籍 C标准库 C编译器

解锁学习新方式——助您迈向成功之路

近年来,随着吉林开放大学广播电视大学的崛起,越来越多的学子选择这所优秀的学府来实现自己的梦想。而作为一名学者,我有幸见证了电大搜题微信公众号的诞生,为广大学子提供了一个全新的学习支持平台。 电大搜题微信公众号&#xff…

解决老版本Oracle VirtualBox 此应用无法在此设备上运行问题

问题现象 安装华为eNSP模拟器的时候,对应的Oracle VirtualBox-5.2.26安装的时候提示兼容性问题,无法进行安装,具体版本信息如下: 软件对应版本备注Windows 11专业工作站版22H222621eNSP1.3.00.100 V100R003C00 SPC100终结正式版…

Android studio安卓生成APK文件安装包方法

1.点击Build->Generate Signed Bundle/APK 2.选择APK 3.首次生成,没有jks文件,就点击Create new。再次生成,直接点Next 4.选择创建jks文件路径 5.点击Next 6.选择release 7.生成完成的apk安装包路径

PostgreSql 统一修改date字段为timestamp

在《Powdersigner PostgreSql 同步表结构到pg数据库》中,导入表结构到pg数据后,发下时间对不上了。mysql的datetime转换后pg的变成了date了。 再同步到数据后,就变成日期类型了。 因为表中基本都有创建时间和修改时间,两个相对固…

电脑桌面透明便签软件是哪个?

在现代快节奏的工作环境中,许多上班族都希望能够在电脑桌面上方便地记录工作资料、重要事项、工作流程等内容。为了解决这个问题,一款优秀的电脑桌面便签软件是必不可少的。在选择桌面便签软件时,许多用户也希望便签软件能够与电脑桌面壁纸相…

文件操作(1)

1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失 了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久…

CBOW (以txt文本小说为例) pytorch实战

CBOW (以txt文本小说为例 pytorch实战 今天博主做了一个不错的实验,我认为,很多小伙伴可能都可以从中学到东西。 我先说一下这个实验,我做了什么,在这个实验中,博主会从零,开始从一个txt文件开…

从零开始的 MyBatis 拦截器之旅:实战经验分享

文章目录 MyBatis拦截器可以做什么?Mybatis核心对象介绍四大核心对象如何实现?接口讲解Interceptor接口intercept方法plugin方法setProperties 完整SQL打印拦截器实战拦截器实现拦截器注册 MyBatis拦截器可以做什么? MyBatis拦截器是MyBatis…

某手新版本sig3参数算法还原

Frida Native层主动调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81…

#循循渐进学51单片机#指针基础与1602液晶的初步认识#not.11

1、把本节课的指针相关内容,反复学习3到5遍,彻底弄懂指针是怎么回事,即使是死记硬背也要记住,等到后边用的时候可以实现顿悟。学会指针,就是突破了C语言的一道壁垒。 2,1602所有的指令功能都应用一遍&#…

内网穿透,轻松实现PostgreSQL数据库公网远程连接!

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统(RDBMS),下…