【路径规划论文整理(1)】Path Deformation Roadmaps(附带对PRM改进算法、同伦映射的整理)

本系列主要是对精读的一些关于路径搜索论文的整理,包括了论文所拓展的其他一些算法的改进思路。
这是本系列的第一篇文章:
Jaillet, Léonard & Siméon, Thierry. (2008). Path Deformation Roadmaps: Compact Graphs with Useful Cycles for Motion Planning. I. J. Robotic Res… 27. 1175-1188. 10.1177/0278364908098411.

1. Introduction(含对PRM改进算法的整理)

关于PRM可以参考笔者之前的博客。本节主要将传统PRM的问题以及改进方法。
PRM的问题:在狭小的通道可能很难被采样到,要高密度的采样才能在狭小通道处形成路径。这带来了内存和时间的增长。
这篇论文总结了多篇文章提到的不同解决方法,笔者将对这些方法展开说明一下。虽然这些方法比较老,但是都有很好的创新,做一个展开的总结,有利于后续研究思路的打开。
在这里插入图片描述

1.1 偏置采样

D. Hsu, T. Jiang, J. Reif, and Z. Sun. The bridge test for sampling narrow passages with probabilistic
roadmap planners. Proc. IEEE Int. Conf. on Robotics and Automation, 2003.
这篇文章中引入了桥梁测试这一采样方法和传统的均匀采样相结合。bridge test:在配置空间中的狭窄通道内,可以想象成一条线段,其两个端点位于障碍物内,而中点悬浮在自由空间上方,类似于一座桥梁。具体工作原理:

  1. 线段选择:随机选择配置空间中的两个点作为线段的端点,这两个点应位于障碍物内部,以确保线段跨越狭窄通道;
  2. 碰撞检测:对于这两个端点以及它们的中点,执行碰撞检测,如果端点发生碰撞,而终点没有碰撞,这表明中点位于自由空间内;
  3. 接受新节点:如果中点无碰撞,它将被接受为路径图中的新节点,如此一来增加了狭窄通道内的新采样点。
    在这里插入图片描述
    这种方式的采样相对于均匀采样提高了再狭窄通道区域的采样密度,同时减少了开阔区域的采样密度。

1.2 中轴线附近采样

J.-M. Lien, S.L. Thomas, and N.M. Amato. A general framework for sampling on the medial axis of the free space. Proc. IEEE Int. Conf. on Robotics and Automation, 2003.
该论文提出了一个通用框架,用于在free space的中间轴上进行配置空间的采样。(中轴线的思路应该是来自于Voronoi图),具体流程:

  1. 节点生成:在配置空间中均匀的随机采样节点p。如果采样的节点处于自由空间,计算其到最近障碍物之间的最短距离;如果采样的节点处于碰撞状态,计算到自由空间的最短距离,文中定义为障碍物的最深入程度。二者都会获得在障碍物边界上的投影点q。
  2. 节点收缩到中间轴:对于自由节点,设置收缩方向为qp,起点为p;对于碰撞节点,设置搜索方向为pq,起点为q。从起点出发,沿着收缩方向移动节点到两个相邻边界的中点。
  3. 连接节点
    在这里插入图片描述

1.3 自由空间膨胀(这种方法通常用于机械臂)

H.-L. Cheng, D. Hsu, J.-C. Latombe, and G. S´anchez-Ante. Multi-level free-space dilation for sampling narrow passages in PRM planning. In Proc. IEEE Int. Conf. on Robotics & Automation, pages 1255–1260, 2006.
本文是利用收缩算法和多级膨胀规划器(MLDP)来解决传统PRM中狭窄通道采样问题。
收缩算法(通过对机器人或障碍物的几何模型进行收缩来膨胀自由空间F,从而简化狭窄通道的采样问题):

  1. 输入一个多面体模型M,例如机器人或障碍物的几何模型。
  2. 对模型M进行四面体化处理,将其内部划分为四面体组。
  3. 对模型M的每个表面顶点p,计算其内核(kernel,即顶点p可以移动的体积)以确保收缩后的模型M’始终包含在M内部。
  4. 对于每个表面顶点p,计算一个点τp在其内核内,然后将顶点p沿着指向τp的方向移动到新的收缩位置p’。
  5. 当生成新的收缩模型时,为了避免为每个版本的模型重建碰撞检测树,算法只需扩大每个叶节点的边界体积,以包含所有收缩因子下的三角形版本。

多级膨胀规划器(MLDP)

  1. 设置膨胀参数:初始化膨胀参数s的低值(slow)和高值(shigh),并设置迭代次数上限k。
  2. 二分搜索:在每次迭代中,根据当前的s值(slow和shigh的中点),使用搜索算法生成一个新的收缩模型M’。
  3. 调用PRM规划器:在新的收缩自由空间F’中调用PRM规划器,尝试从初始配置qint到目标配置qgoal的路径γ’。
  4. 路径修复:如果找到了路径γ’,但由于膨胀过度,路径γ’可能在原始自由空间F中存在碰撞。因此,需要通过采样和变形来修复路径γ’,使其称为F中的有效路径。
  5. 调整膨胀参数:如果路径γ’无法修复,则说明膨胀参数s过大,需要减少s ;如果路径γ’未找到,则说明s过小,需要增大s。重复迭代。
    在这里插入图片描述

1.4 基于可见性滤波

T. Sim´eon, J.-P. Laumond, and C. Nissoux. Visibility-based probabilistic roadmaps for motion planning. Advanced Robotics Journal, 14(6):477–494, 2000.
论文中提出了一个叫做可见性域(Visibility Domain)的概念:对于机器人R在一个工作空间W中运动,考虑机器人的配置空间CS和与之相关的无碰撞配置空间CSfree。定义一个局部方法C,它可以计算两个给定配置q和q’之间的路径L(例如直线段)。对于配置空间中的一个配置q,其可见性域Visc(q)由以下集合构成:
V i s c ( q ) = { 所有在 C S f r e e 中的 q ′ ,使得 C ( q , q ′ ) 也在 C S f r e e 中 } Visc(q)=\{所有在CS_{free}中的q',使得C(q,q')也在CS_{free}中\} Visc(q)={所有在CSfree中的q,使得C(q,q)也在CSfree}
换句话说,可见性域Visc(q)包含了所有可以从配置q通过局部方法C安全到达的无碰撞配置q’的集合。在这个定义中,配置q被称为守卫(guard)配置,因为它“守卫”或“监控”着其可见性域内的所有点。
构建可见性路线图

  1. 初始化一个空的图R,其中包含一组守卫节点(初始可见性域)和连接节点(相当于被两个不同的守卫节点同时"监控"到)。
  2. 通过迭代过程,随机选择无碰撞点并确定它们是否被现有守卫节点可见或是否可以连接两个守卫节点。
  3. 如果一个新点对于现有守卫节点不可见,它将称为一个新的守卫节点,并添加到图R中;如果新点可以连接两个不同的守卫节点,它将称为一个连接节点,并在图R中添加相应的边。
  4. 迭代终止条件:每当新的守卫节点加入到路线图中,CSfree的覆盖率会增加,通过估计未覆盖体积与CSfree总体积的比例来控制结束条件。

1.5 自适应采样

S. Rodriguez, S. Shawna, R. Pearce, and N.M. Amato. Resampl: A region-sensitive adaptive motion planner. Proc. Workshop on the Algorithmic Foundations of Robotics, 2006.
这篇文章提出了一种区域敏感的自适应运动规划方法,利用局部区域信息来智能地做出关于采样、样本连接和路径寻找的决策。
具体方法如下:

  1. 区域构建:从配置空间中获取一组点,这些点包括了在自由空间的和在障碍物内部的;根据初始化样本集(b)定义区域,每个区域由一个代表性点(例如区域中心)和邻近点(用于计算区域统计信息,如熵和半径)组成;区域构建算法通过随机选择未标记地点作为新的区域中心,并选择其最近的邻居样本形成区域。
  2. 基于熵的区域分类:低熵表示区域中的样本完全是自由的或完全被阻塞,高熵表示样本中既有自由样本也有被阻塞的样本。
  3. 区域图构建:构建一个图结构近似描述局部配置空间区域的连通性。图中的顶点对应于区域,如果两个区域重叠,则在它们之间放置一条边;区域图可以用来提取区域路径以辅助单查询规划,或细化它以辅助多查询规划;通过合并相邻的同类型区域或分割不清晰分类的区域来完善区域图。
  4. 多查询规划:构建区域和区域图只保留重要样本,减少构建成本,专注于配置空间中困难/狭窄区域。
  5. 单查询规划:为给定查询从起始到目标配置找到路径,使用区域图找到连接起始和结束区域的路径,区域图是加权的,优先通过未阻塞区域提取路径,仅在必要时使用阻塞区域(如果路径中发现阻塞区域,对这些区域进行重新分类,以获得一个连续的未阻塞路径区域序列);为了提高在困难区域提取路径的能力,可以通过包括邻近未阻塞区域来扩展区域路径的体积,这样做可以在困难区域中包含更多的区域,从而改进路径;对于给定的区域路径,可以根据需要采样节点,并使用k近邻连接策略来连接这些节点。
    在这里插入图片描述

1.6 利用搜索空间信息(类似于探索类问题中的最大信息增益)

B. Burns and O. Brock. Toward optimal configuration space sampling. Proceedings of Robotics: Science and Systems, 2005.
本文提出了一种自适应的运动规划方法——效用引导采样策略(Utility-Guided Sampling Strategy) ,利用过去的经验来指导未来的样本选择,以便更有效地探索配置空间并构建路径图。
具体实现:

  1. 初始化:从配置空间中随机选择初始点,并标记他们的状态(阻塞或自由)。
  2. 模型构建:使用K-NN来构建一个能够预测新样本状态的近似模型,来估计配置的状态概率。
  3. 效用计算:定义一个效用函数,该函数基于当前路径图的结构和样本可能带来的信息增益(新样本减少路径图的不确定性的贡献),效用函数考虑当前路径图的结构,以及新样本可能对路径图造成的改变。
  4. 样本选择与评估:对于每个新的样本候选,使用近似模型和效用函数来计算其期望效用。
  5. 迭代更新。
    在这里插入图片描述

1.7 延迟障碍检测

R. Bohlin and L.E. Kavraki. Path planning using lazy prm. IEEE Int. Conf. on Robotics and Automation, pages 521–528, 2000.
该论文旨在最小化路径规划过程中碰撞检查的数量,从而减少规划器的运行时间。Lazy PRM算法构建了一个假设无碰撞的路径图,该路径图由用户定义的初始和目标配置以及随机生成的节点组成。算法的目标是在路径图中找到初始和目标配置之间的最短可行路径。与标准的PRM算法不同,Lazy PRM最初假设所有节点和边都是无碰撞的,只在必要时才进行碰撞检查。
算法步骤:

  1. 构建初始路径图:算法开始时,首先在配置空间中随机生成一组节点,并将初始点和目标点加入到这些节点中,这些节点通过边连接起来,边代表节点之间的直接路线。
  2. 选择邻居节点:对于每个节点,算法确定一组邻居节点,这些节点与该节点足够接近,从而可能通过无碰撞的直接路径连接。
  3. 搜索最短路径:A*
  4. 检查路径碰撞:一旦找到路径,算法将检查路径上的节点和边是否碰撞;发现碰撞,将从路径途中移除相应的节点和边,并重新搜索路径。
  5. 节点增强:如果在路径图中找不到可行路径,算法将通过生成新节点并将其添加到路径图中来增强路径图,新节点可以均匀分布,也可以基于路径图中已有信息集中在困难区域。
  6. 多次查询:一旦找到无碰撞路径,算法将终止并返回路径。
    Lazy PRM算法是一种高效的路径规划方法,特别适合于那些碰撞检查成本较高的场景。通过减少不必要的碰撞检查,算法能够快速地为机器人找到可行路径,同时保持对路径质量的考虑。此外,算法的自适应学习能力使其在处理多次查询时更加高效。

在这里插入图片描述

1.8 回到正文内容的Introduction

论文的目标是提出一种方法,能够在保持路线图紧凑性的同时,捕捉配置空间中多种自由路径的多样性。

2. 一些概念

2.1 同伦(Homotopy)

同伦这个概念来自于拓扑数学,两个拓扑空间如果可通过一系列连续的形变从一个变成另一个,那么就称这两个拓扑空间同伦。参考博客
在这里插入图片描述
如下图,f和g就是同伦映射关系。
在这里插入图片描述

2.2 直纹曲面(Ruled Surface)

在几何学中,如果一个曲面上的任意一点上均有至少一条直线经过,则称该曲面为直纹曲面。另一种常见的说法是,如果一个曲面可以由一条直线通过连续运动构成,则可称其为直纹曲面。参考博客
在这里插入图片描述

2.3 K阶变形

一种特殊的同伦变形,使得将τ点转换为τ’点的每条曲线都是K段的角线,即由K个连续直线段形成的分段线性曲线。一阶变形表面表示直纹表面;并且通过K个直纹表面接连获得K阶变形。
在这里插入图片描述

2.4 路径可见性图(Visibility Diagram of Paths)

在这里插入图片描述
下图是计算一对路径之间可视性图的例子,白色表示可视,蓝色表示不可视。两条路径之间的可见性(一阶)变形可以表示如下:当且仅当在它们的可见性图中存在可以连接坐标(0,0)和(1,1)的路径,此时两条具有相同端点的路径是可见性变形的,即d图。
在这里插入图片描述

3. K阶变形路径图(K-order Deformation Roadmap)

Def:R是K阶变形路径图当且仅当对任何自由空间的路径τ可以在R中提取出与τ两端相同的K阶变形路径τ’。

3.1 RCPV Roadmaps

Def: RCVP即对于自由空间中的任何点,可见的子路线图都是连接的。
下图左图视点qv的子路线图是断开的,右图视点qv的子路线图是连接的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 主要算法(构建变形路径图)

算法分为两个步骤:

  1. 构建一个小的树,获得空间中的连通性。
  2. 初始树被增强为具有多重连通性所需要的有用循环。

第一步采用Visibility-PRM(见Introcution部分);第二步在节点和边上丰富第一步生成的树,创建路径变形路线图的有用循环,具体如下:
在这里插入图片描述

5. 实验结果和总结

  • 实验表明,该技术能够可靠地捕捉复杂空间中多重连通性的多连通性,适用于自由飞行和关节机器人在2D和3D环境中的问题。
  • PDR在保持紧凑结构的同时,能够有效地捕捉到不同路径的多样性,提高了路径规划的质量和效率。

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

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

相关文章

Spring Boot接收从前端传过来的数据常用方式以及处理的技巧

一、params 传参 参数是会拼接到url后面的请求 场景规范:url后面的key值<=3个参数的时候,使用params 传参 支持的请求方式:get(正规的是get方式)、post 都行 例如: http://localhost:8080/simpleParam?name=Tom&age=10 在postman里面的体现为 后端接收的接口…

格式化输出数据

JDK 5 新特性&#xff0c;格式化输出数据 长度不够前面补空格&#xff0c;超出长度按实际输出 System.out.printf(“格式控制部分”,表达式1,表达式2,,表达式n); 格式控制部分由格式符号、普通字符组成&#xff0c;普通字符原样输出&#xff0c;格式符号输出表达式的值 // …

Python+requests+Pytest+logging+allure+pymysql框架详解

一、框架目录结构 1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言 数据库断言 前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据 图片数据等;3)testcases目录用来存放测试用例,一个python文件对应…

Python网络爬虫(一):HTML/CSS/JavaScript介绍

1 HTML语言 1.1 HTML简介 HTML指的是超文本标记语言&#xff1a;HyperText Markup Language&#xff0c;它不是一门编程语言&#xff0c;而是一种标记语言&#xff0c;即一套标记标签。HTML是纯文本类型的语言&#xff0c;使用HTML编写的网页文件也是标准的文本文件&#xff0c…

天盾网络验证源码+视频教程

最新版本为746&#xff0c;企业定制版。现在正在意义上的离线版已出来&#xff0c; 天盾746离线版不需要绑定电脑&#xff0c;提供母端&#xff0c;断网可用&#xff0c;可以理解为它是一款离线版的工具。它没有任何使用限制&#xff0c;和正版唯一的区别就是不需要连接作者服…

789. 数的范围 (二分学习)

题目链接 1.确定一个区间&#xff0c;使得目标值一定在区间中 2.找一个性质满足&#xff1a; &#xff08;1&#xff09;性质具有二段性 &#xff08;2&#xff09;答案是二段性的分界点 3.整数二分&#xff08;处理红色右端点和绿色左端点&#xff09; //代码1&#xff1a;…

Aop实现公共字段自动填充

文章目录 1、问题:2.常规冗余不利于维护操作&#xff1a;3.实现思路&#xff1a; 2、步骤&#xff1a;搭建一个简单的SpringBootMyPlus项目:表结构&#xff1a; 1. 依赖&#xff1a;2. 配置连接信息:3. 创建三层架构&#xff1a;4. 代码开发:4.1 **定义数据库操作类型枚举**4.2…

MySQL之索引详细总结

索引简介 索引是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用(指向)数据&#xff0c;这样就可以在这些数据结构上实现高级查法&#xff0c;这种数据结构就是索引 为什…

基于rip环境下的MGRE综合实验

实验要求 1、R5为ISP&#xff0c;只能进行IP地址配置&#xff0c;其所有地址均配为公有IP地址。 2、&#xff08;1&#xff09;R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方。 &#xff08;2&#xff09;R2与R5之间使用ppp的CHAP认证&#xff0c;R5为主认证方。 &#…

YoloV8改进策略:Neck改进|GCNet(独家原创)|附结构图

摘要 本文使用GCNet注意力改进YoloV8,在YoloV8的Neck中加入GCNet实现涨点。改进方法简单易用&#xff0c;欢迎大家使用&#xff01; 论文:《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》 非局部网络&#xff08;NLNet&#xff09;通过为每个查…

ElasticSearch7.8的下载与安装和Kibana 7.8.0工具使用安装

1、ElasticSearch7.8.0下载 elasticsearch: 官方下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch 链接: https://pan.baidu.com/s/1wAKQoB3nhLhcnBlPfVOLxQ 提取码: t83n kibana: 链接: https://pan.baidu.com/s/156aD9zDdvUv8LFgDEIPoSw 提取码:…

PSCAD的使用

1. Canvas Settings中设置母线电压监测和虚拟连线十分重要。 2. Project Settings中snapshot可以实现分段仿真。 3. .out文献导出数据

操作系统—读者-写者问题及Peterson算法实现

文章目录 I.读者-写者问题1.读者-写者问题和分析2.读者—写者问题基本解法3.饥饿现象和解决方案总结 II.Peterson算法实现1.Peterson算法问题与分析(1).如何无锁访问临界区呢&#xff1f;(2).Peterson算法的基本逻辑(3).写对方/自己进程号的区别是&#xff1f; 2.只包含意向的解…

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图神经网络实战&#xff08;7&#xff09;——图卷积网络详解与实现 前言1. 图卷积层2. 比较 GCN 和 GNN2.1 数据集分析2.2 实现 GCN 架构 小结系列链接 前言 图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出&#xff0c;其理念是创建一…

基于springboot+vue+Mysql的教学视频点播系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

idea使用docker将Java项目生成镜像并使用

1&#xff1a;开启docker 远程访问 使用 vim 编辑docker服务配置文件 vim /lib/systemd/system/docker.service [Service] Typenotify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not suppor…

操作系统内功篇:内存管理之虚拟内存

一 虚拟内存 在这种情况下&#xff0c;要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值&#xff0c;将会擦掉第二个程序存放在相同位置上的所有内容&#xff0c;所以同时运行两个程序是根本行不通的&#xff0c;这两个程序会立刻崩溃。 …

最简单的 AAC 音频码流解析程序

最简单的 AAC 音频码流解析程序 最简单的 AAC 音频码流解析程序原理源程序运行结果下载链接参考 最简单的 AAC 音频码流解析程序 参考雷霄骅博士的文章&#xff1a;视音频数据处理入门&#xff1a;AAC音频码流解析 本文中的程序是一个AAC码流解析程序。该程序可以从AAC码流中…

Linux(05) Debian 系统修改主机名

查看主机名 方法1&#xff1a;hostname hostname 方法2&#xff1a;cat etc/hostname cat /etc/hostname 如果在创建Linux系统的时候忘记修改主机名&#xff0c;可以采用以下的方式来修改主机名称。 修改主机名 注意&#xff0c;在linux中下划线“_”可能是无效的字符&…

数据结构(初阶)第一节:数据结构概论

本篇文章是对数据结构概念的纯理论介绍&#xff0c;希望系统了解数据结构概念的友友可以看看&#xff0c;对概念要求不高的友友稍做了解后移步下一节&#xff1a; 数据结构&#xff08;初阶&#xff09;第二节&#xff1a;顺序表-CSDN博客 正文 目录 正文 1.数据结构的相关概…