首页 > 编程语言 >路径规划-PRM算法(1)

路径规划-PRM算法(1)

时间:2024-05-08 23:11:26浏览次数:31  
标签:采样 PRM 路径 vertex 算法 edge learning

probabilistic roadmap(PRM) 算法是一类用于机器人路径规划的算法,最早在[1]中被提出,属于随机规划器的一种,其数据的主要形式为无向图(另一种 RRT 基于树)。[^2]将 PRM 算法分成了两个阶段:learning 阶段和 query 阶段。其中 learning 阶段主要在 configuration 空间(机械臂的话是 \(C\) 空间,移动机器人的话一般就是欧几里德空间,因为原文是在 \(C\) 空间中被提出的,所以这里就用 \(C\) 空间)中进行一定次数的采样(一般而言是均匀采样,后面为了解决一些狭小空间的问题进行了一些特殊的采样手段),并对采样点进行碰撞检测,再通过距离判断和碰撞检测将采样点进行连线,最终得到由有效采样点作为 vertex 而采样点之间的连线作为 edge(两点之间的距离很自然的作为 edge 的值)所形成的无向图 G =(V, E)。
PRM 算法的使用基于 3 个前提:

  1. 我们已经具备了碰撞检测的方法,无论是对 vertex 的检测还是对 edge 的检测。对于 vertex 的检测可能比较直观,而对于 edge,最简单的方式是在 edge 上插值得到很多个点,然后再像 vertex 一样进行碰撞检测
  2. 无论是在 \(C\) 空间还是欧几里德空间,我们有比较合理的方式计算采样点之间的距离
  3. 已经具备一个可以使用的无向图路径规划器,例如 [[A*算法]]。
    PRM 算法的实现即是将上述 3 个前提工具进行组合使用,得到最终的结果。

learning 阶段

learning 阶段的目标是在 \(C_{free}\) 空间(即 \(C\) 空间中不会发生碰撞的空间)中得到一个无向图 G 。基本的实现方式如下:

  1. 将图的点和边置为空集
  2. 从 \(C_{free}\) 空间采样一个点(从 \(C\) 空间采样,直到找到一个不碰撞的点)
  3. 将点添加到图的点集合中,并尝试对新的点和图中原有的点进行连线。是否连线的标准为:1)不发生碰撞;2)在一定距离内。成功连线后,将连线添加到图的边集合中。
  4. 重复 2 与 3,直到采集到一定数量的点

query 阶段

learning 阶段得到无向图 G 后,query 阶段要利用 G 来找到一条路径连接起始点和目标点。首先要将起始点和目标点与 G 连接起来其方式与 learning 阶段添加 vertex 和 edge 的过程类似,之后,利用图规划器寻找一条路径:

  1. 尝试将起始点作为新的 vertex 连接到 G 中,如果无法连接则报错
  2. 尝试将目标点作为新的 vertex 连接到 G 中,如果无法连接则报错
  3. 使用图规划器在新的无向图中找到一条路径连接起始点与目标点

More Reading

Reference


  1. Kavraki, L.E., P. Svestka, J.-C. Latombe, and M.H. Overmars. “Probabilistic Roadmaps for Path Planning in High-Dimensional Configuration Spaces.” IEEE Transactions on Robotics and Automation 12, no. 4 (August 1996): 566–80. https://doi.org/10.1109/70.508439. ↩︎

标签:采样,PRM,路径,vertex,算法,edge,learning
From: https://www.cnblogs.com/pomolnc/p/18181126

相关文章

  • Windows平台git clone文件路径太长报错
    问题描述在Windows下拉取一些比较大的开源项目经常会提示文件路径太长(filenametoolong),然后死活都不成功解决办法1.配置gitgitconfig--systemcore.longpathstrue2.修改文件C:\ProgramFiles\Git\etc\gitconfig(需要以管理员身份打开)[core] autocrlf=true fscache=......
  • Windows程序读取不了中文路径问题
    问题描述今天调试发现win32接口GetFileAttributesW居然不支持中文路径,于是寻找解决方案,找了半天,尝试用boost的fileystem库发现能用,而且boost能跨平台!不支持中文win32接口获取文件属性,当传入参数带有中文字符时,它获取的属性就会异常DWORDGetFileAttributesW([in]LPCWSTRlpFi......
  • 代码随想录算法训练营第第一天 | 704. 二分查找 、27. 移除元素
    704、二分查找题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.二分查找.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715`varsearch=function(nums,target){letleft=0;letright=nums.length;letmi......
  • 代码随想录算法训练营第一天 | 704.二分查找 27.移除元素
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/文档讲解:https://programmercarl.com/0704.二分查找.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715左闭右开时间复杂度O(logn)空间复杂度O(1)classSolution{public:intsearch(......
  • Blender动画与云渲染:创造高质量作品的未来路径
    Blender作为开源的3D图形软件,在多个领域广受欢迎。但随着项目复杂度提升,传统渲染方式受限。云渲染技术的兴起突破了这些限制,为创作者提供了更自由、高效的创作环境。 一、Blender动画项目的挑战传统上,Blender动画渲染需要依赖昂贵的硬件设施和大量计算资源,尤其是在处理复杂场......
  • Python安装教程手册(pip路径修改,建立模块搜索)
    下载官网64位exe安装包双击安装,一步步往下走    打开cmd命令行,输入Python-V查看安装版本号,检查是否安装成功  输入pip-V查看pip的版本号,检查是否安装成功  设置pip安装的全局库目录输入python-msite,查看当前默认配置的库目录找......
  • os.path:Python操作和处理文件路径
    前言os.path是平台独立的文件名管理库,使用该库能够很方便来处理多个平台上的文件。即使程序不打算在平台之间移值,也应当使用os.path库来完成可靠的文件名解析。本篇博文将详细介绍os.path库的用法。解析路径的基本用法os.path中的第一组函数可以用来将表示文件名的字符串解析......
  • react ts 项目如何配置路径别名?
    tsconfig.json{"compilerOptions":{"baseUrl":".",//路径配置"paths":{"@/*":["src/*"]},"target":"ES2020","lib":[......
  • NodeJS路径遍历:示例及预防
    让我们来看看什么是路径遍历攻击,以及在Node.js中可以采用哪些方法来阻止这种攻击。构建一个安全而健壮的应用程序需要考虑的因素很多,并非一件容易的事情。要确保覆盖所有潜在的漏洞是一项十分艰巨的任务,这需要大量的经验和指导。在这些漏洞中,有一个和系统目录访问安全相......
  • 算法
    01-链表01.移除链表元素迭代法注意:head可能为null,也可能是要删除的val;因此要设置一个虚拟头结点指向头结点,再通过迭代一个一个删除。删除方式为:循环,判断下一节点是否是目标节点,是则指向目标节点的下一节点(这里不要移动指针,因为删除后的下一节点仍然有可能是目标节点)。不是......