地图分割

  • 定义
    • Simplicial Complex 单复形
    • Singular complex 奇异复形
  • 二维分割
    • Triangulation Decomposition 三角分割
    • Cylindrical Decomposition 柱面分解

垂直单元分割可以解决 Cobs{C}_{obs}Cobs​为多边形时的运动规划问题。然而,重要的是要理解,这只是众多分割算法中的一个。这些分割算法在2D中可能并不可取;但是,它们却可以更好地推广到更高的维度。

定义

complex(复形)指的是一组cell(单元)及其边界。单元的可以从复形派生,但复形包含描述多个单元如何组合在一起的附加信息。cell decomposition(单元分割)仍然指的是将空间划分成若干单元,这是从一个复形派生出来的。
以一种通用方式定义复形和单元分割是很有诱惑力的。假设Cfree{C}_{free}Cfree​的任何分区都可以称为单元分割。会使一个单元可能非常复杂,以至于这个概念毫无用处。甚至Cfree{C}_{free}Cfree​本身也可以声明为一个大单元。用更简单的单元(例如不包含洞的单元)构建分割更有用。这就要求每kkk-单元都与一个开放的kkk维单位球体Bk⊂RkB^k\subset{\mathbb{R}}^kBk⊂Rk在同一单元。从运动规划的角度来看,这仍然会产生相当复杂的单元,这将取决于特定的单元分割方法来实施进一步的约束,从而产生一个完整的规划算法。
将引入两种不同的复形。简单复形之所以被解释是因为它是最容易理解的复形之一。尽管它在许多应用中都很有用,但它的功能还不足以表示运动规划中出现的所有复杂情况。因此,还引入了奇异复形。尽管定义起来更复杂,但它包含了规划中所有感兴趣的单元复形,还提供了一种表示拓扑空间的优雅方法。

Simplicial Complex 单复形

假设X=RnX={\mathbb{R}}^nX=Rn,令p1p_1p1​, p2p_2p2​, …\ldots…, pk+1p_{k+1}pk+1​在 Rk{\mathbb{R}}^kRk内k+1k+1k+1线性无关。一个k−simplek-simplek−simple(k单形)即[p1,…,pk+1][p_1,\ldots,p_{k+1}][p1​,…,pk+1​],是由以下点构成的:
[p1,…,pk+1]={∑i=1k+1αipi∈R∣αi≥0,foraallaiaanda∑i=1k+1αi=1}\left[ p_1,\ldots,p_{k+1}\right] = \bigg\{ \sum_{i=1}^{k+1}\alpha_i p_i \in \mathbb{R} \bigg| \alpha_i \ge 0 ,\mathrm{for\hphantom{a} all\hphantom{a}} i \mathrm{\hphantom{a}and \hphantom{a}}\sum_{i=1}^{k+1}\alpha_i =1 \bigg\}[p1​,…,pk+1​]={i=1∑k+1​αi​pi​∈R∣∣∣∣​αi​≥0,foraallaiaandai=1∑k+1​αi​=1}其中,αipi\alpha_ip_iαi​pi​是标量乘以点坐标,另一种查看简单复形的方法是将k+1k+1k+1点作为凸包(即所有在它们之间进行线性插值的方法)(对于给定集合X,所有包含X的凸集的交集S被称为X的凸包——计算几何)如果k=2k=2k=2,则获得三角形区域。对于k=3k=3k=3,生成四面体。
对于任意kkk维单形和任意 1≤i≤k+11 \leq i \leq k+11≤i≤k+1中的iii,令αi=0\alpha_i =0αi​=0。这产生一个k−1k-1k−1维的单形,也被称为原始单形的一个face(面)。一个2维单形有三个面,其每一个面都是被称为edge边的一个1维的单形;每一个1维单形(即边)有两个被称为vertices(点)的面。
为了形成一个复形,这些单形必须以一种很好的方式组合在一起。这就产生了叫triangulation(三角剖分)的一种高维概念,在 R2{\mathbb{R}}^2R2中,三角剖分是由三角形区域平铺组成的。一个simplicial complex(单复形)K\mathcal{K}K是满足以下条件的有限单形集:

  • K\mathcal{K}K中的任意面也在K{\mathcal{K}}K中。
  • K\mathcal{K}K中的任意两个单形的交集要么是它们的公共面,要么是空集。


上图说明了这些要求。对于k>0k>0k>0,K\mathcal{K}K中的一个kkk-cell被定义为int⁡([p1,…,pk+1])\operatorname{int}([p_1,\ldots,p_{k+1}])int([p1​,…,pk+1​])的内部任意kkk-单形。对于k=0k=0k=0,每个0-单形都是一个0-单元。所有单元格的并集构成由K\mathcal{K}K覆盖的点集的分区。要成为一个单复形,这些单形的面必须很好地结合在一起。

Singular complex 奇异复形

单复形在几何建模和计算机图形学等计算模型拓扑的应用中非常有用。由于运动规划中存在复杂的拓扑空间、隐式、非线性模型和分解算法,它们不足以解决最一般的问题。singular complex奇异复形是simplicial complex单复形的推广。不局限于Rn{\mathbb{R}}^nRn,一个奇异复数可以定义在任意流形上,XXX(它甚至可以定义在任意Hausdorff拓扑空间上)。主要的区别是,对于一个单复形,每个单形是Rn{\mathbb{R}}^nRn的子集;然而,对于一个奇异复形,每个单形实际上都是从Rn{\mathbb{R}}^nRn中单形到XXX的子集的同胚(在拓扑学中,同胚是两个拓扑空间之间的双连续函数。同胚是拓扑空间范畴中的同构)。
为了帮助理解这个概念,首先考虑一个一维奇异复形,它恰好是一个拓扑图。区间[0,1][0,1][0,1]是一个111-单形,而连续路径τ:[0,1]→X\tau : [0,1] \rightarrow Xτ:[0,1]→X 是一个奇异111-单形,因为它是[0,1][0,1][0,1]到XXX中τ\tauτ的同胚。假设G(V,E){G}(V,E)G(V,E)是一个拓扑图。cell单元是遵循如下定义的XXX的子集,在XXX中的每个点 v∈Vv \in Vv∈V都是0-单元。为了遵循这种形式,每个单元都被看作是一个函数f:0→Xf:{0}\rightarrow Xf:0→X,这使得它是singular 0-simplex一个奇异0-单形,因为0{0}0是一个0-单形。对于E中的每个路径中的每个路径中的每个路径\tau\,对应的111-cell是:
{x∈X∣τ(x)=x,forasomeas∈(0,1)}\bigg\{ {{x} \in {X}} \big| \tau(x) = x, \mathrm{for\hphantom{a} some\hphantom{a}} {{s} \in {(0, 1)}} \bigg\}{x∈X∣∣​τ(x)=x,forasomeas∈(0,1)}另一种表述方式是τ((0,1))\tau((0,1))τ((0,1)),即路径τ\tauτ的像,只是端点已被0-单元覆盖而被移除(单元必须形成分区)。将这些原则推广到更高的维度,由于同一维的所有球和单形都是同胚的,因此在单形的定义中可以用球代替单形。设Bk⊂RkB^k\subset{\mathbb{R}}^kBk⊂Rk表示一个闭合的kkk维单位球,
Dk={x∈Rn∣a∥x∥≤1}D^k=\big\{ {{x} \in {\mathbb{R}}^n} \big| \hphantom{a} \left \| x \right \|\leq1\big\}Dk={x∈Rn∣∣​a∥x∥≤1}其中∥⋅∥\Vert\cdot\Vert∥⋅∥是欧几里德范数。singular kkk-simplex是σ:Dk→X{\sigma}:D^k\rightarrow Xσ:Dk→X的连续映射。令int⁡(Dk)\operatorname{int}(D^k)int(Dk)表示为DkD^kDk内部(interior)。对于k≥1k\geq 1k≥1, 一个kkk-单元CCC对应一个奇异kkk-单形σ{\sigma}σ, C=σ(int⁡(Dk))⊆XC = {\sigma}(\operatorname{int}(D^k)) \subseteq XC=σ(int(Dk))⊆X。0-单元作为0 奇异单形可以直接获得。每一个奇异的0-单形映射于XXX中的0-单元。 如果σ{\sigma}σ被限制为int⁡(Dk)\operatorname{int}(D^k)int(Dk),那么它实际上定义了一个介于DkD^kDk和CCC之间的同胚。注意,如果k>0k>0k>0,这两个都是开集。
一个单复形需要其单形很好地结合在一起。这里也应用了同样的概念,但是使用拓扑概念是因为它们更通用。设K\mathcal{K}K为一组不同维数的奇异复形。设SkS_kSk​表示所有满足i≤ki \leq ki≤k的奇异iii-单形的并集。
映射到拓扑空间XXX满足下列条件的奇异单形集合称为奇异复形(singular complex):

  • 对于每个维度kkk,集合Sk⊆XS_k\subseteq XSk​⊆X必须是闭合的。这意味着各单元必须很好地结合在一起。
  • 每个kkk-单元是拓扑子空间SkS_kSk​中的一个开集。请注意,0-单元在S0S_0S0​中是开集,即使它们通常在XXX中闭合。

垂直分解是奇异复数的一个很好的例子,它不是单形,因为它包含梯形。每个梯形和三角形的内部形成一个222-单元,这是一个开集。对于每对相邻的222-单元,它们的公共边界上都有一个111-单元。没有0单元,因为顶点位于CobsC_{obs}Cobs​,而不是CfreeC_{free}Cfree​。通过将所有222-单元和111-单元合并得到子空间S2=CfreeS_2=C_{free}S2​=Cfree​。这满足了闭合要求,因为复形只构建于CfreeC_{free}Cfree​中;因此,拓扑空间是CfreeC_{free}Cfree​。集合S2=CfreeS_2=C_{free}S2​=Cfree​既是打开的也是闭合的。集合S1S_1S1​是所有111-单元的并集。其也是闭合的,因为111-单元终点都位于CobsC_{obs}Cobs​。每个111-单元也是一个开集。
避免这些来自CfreeC_{free}Cfree​拓扑的奇怪结论的一种方法是在cl⁡Cfree\operatorname{cl}C_{free}clCfree​(即CfreeC_{free}Cfree​的闭集)中构建垂直分解。这可以从前面定义的垂直分解开始,为CobsC_{obs}Cobs​的每个边添加一个新的111-单元,并为CobsC_{obs}Cobs​的每个顶点添加一个0-单元。现在S3=cl⁡(Cfree)S_3=\operatorname{cl}(C_{free})S3​=cl(Cfree​),它在R2{\mathbb{R}}^2R2中闭合。同样,S2S_2S2​、S1S_1S1​和S0S_0S0​正常闭合。然而,每个单独的kkk-单元在拓扑空间SkS_kSk​中是开放的。唯一奇怪的情况是,0-单元被认为是开集,但这在离散拓扑空间S0S_0S0​中是正确的。

二维分割

垂直分解只是许多单元分解方法中解决CobsC_{obs}Cobs​为多边形时问题的一种。它在单元数量、计算效率和实现容易性之间提供了很好的平衡。通常可以将CobsC_{obs}Cobs​分解为更少的凸单元。因为路线图会更小,所以适用于多重查询应用。不幸的是其很难优化单元的数量。使用最小数量凸单元来确定带空洞多边形CobsC_{obs}Cobs​的分解方法是NP难的。因此,我们愿意容忍非最优分解。

Triangulation Decomposition 三角分割

垂直分解的另一种选择是执行triangulation(三角分解),这将产生一个覆盖CfreeC_{free}Cfree​的单复形。由于CfreeC_{free}Cfree​是一个开集,因此没有0-单元。每个222-单形(三角形)有一个、两个或三个面,这取决于它的边界有多少是与CobsC_{obs}Cobs​共享的。如图所示,可以通过连接111-cells和222-cells来规划路径。请注意,对于给定的问题,有很多方法可以三角化CfreeC_{free}Cfree​。在计算几何中,寻找好的三角剖分(例如,这意味着尽量避免细三角形)受到了相当大的关注。

如何计算三角分解?运行垂直分解算法并将每个梯形分割为两个三角形似乎很有诱惑力。即使这导致了三角形单元,它也不会产生一个单复形(两个三角形可以邻接三角形边的同一侧)。一种简单的方法是通过尝试用一条线段连接一个面的两个顶点来逐步分割面,如果此线段与其他线段不相交,则可以进行拆分(以所有顶点连线互不相交线段的分割)。将这个过程持续地在所有有三个以上顶点的面上执行,直到最终获得三角剖分。不幸的是,这会导致O(n3)O(n^3)O(n3)的时间复杂度,因为在最坏的情况下必须检查O(n2)O(n^2)O(n2)对,并且每次检查都需要O(n)O(n)O(n)来确定是否与其他线段相交。通过执行径向扫描,可以很容易地将其降低到O(n2lg⁡n)O(n^2 \lg n)O(n2lgn)。一种算法首先将CfreeC_{free}Cfree​划分成单调多边形(如果一个多边形基于它y 坐标值最大和最小的两个顶点可以将它的边分成两个单调边序列,则该多边形称为Y 单调多边形,即单调多边),然后对每个单调多边形进行有效的三角剖分。如果CfreeC_{free}Cfree​是简单连接的,三角剖分竟可以在线性时间内计算。不幸的是,该算法过于复杂,在实践中使用。

Cylindrical Decomposition 柱面分解

柱形分解与垂直分解非常相似,只是垂直线会从y=−∞y=-\inftyy=−∞到y=∞y=\inftyy=∞一路穿过所有面。结果如左图所示,可视为一个奇异复形。与垂直分解相比,这可能显得非常低效;然而,这里提出它是因为它可以很好地推广到任何维度、任何C-空间拓扑和任何半代数模型。因此,这里提出它是为了简化向更一般分解的过渡。圆柱分解的最重要性质如右图所示。考虑两个事件之间的每个垂直条带。从y=−∞y=-\inftyy=−∞到y=∞y=\inftyy=∞遍历条带时,点在CobsC_{obs}Cobs​和CfreeC_{free}Cfree​之间交替。例如,在事件444和555之间,边缘fff下的点位于CfreeC_{free}Cfree​。fff和ggg之间的点位于CobsC_{obs}Cobs​。ggg和hhh之间的点位于CfreeC_{free}Cfree​中,以此类推。可以定义单元分解,以便在CobsC_{obs}Cobs​中创建二维单元。让S(x,y)S(x,y)S(x,y)表示逻辑判定。当遍历条带时,S(x,y)S(x,y)S(x,y)的值也会交替出现。每个垂直条实际上被认为是一个圆柱,因此,圆柱分解的名称(即,在三维几何意义上不一定有任何圆柱)。

路径规划--地图分割相关推荐

  1. 移动机器人全覆盖路径规划及仿真(三.地图分割)

    标题移动机器人全覆盖路径规划级仿真(三.地图分割) 标题算法流程 1.建立event类和CellNode类 2.将Wall(obostacle)每个坐标点变成event,加入event_list 3. ...

  2. 路径规划学习之地图生成(一)

    路径规划入门学习之随机生成栅格地图 前言 一.栅格地图 二.随机生成栅格地图 1.随机数创建m*n矩阵地图 2.完整代码 3. 所生成的地图 总结 前言 机器人的路径规划问题是运动规划中的一个重要问题 ...

  3. 八叉树建立地图并实现路径规划导航

    构建语义地图时,用的是 octomap_server和 semantic_slam: octomap_generator,不过还是整理下之前的学习笔记. 一.Octomap 安装并使用Octomap_ ...

  4. 【路径规划】基于matlab蚁群算法机器人大规模栅格地图最短路径规划【含Matlab源码 1860期】

    ⛄一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自 ...

  5. 【路径规划】基于matlab蚁群算法栅格地图路径规划及避障【含Matlab源码 2088期】

    一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自适 ...

  6. 【Matlab路径规划】蚁群算法机器人大规模栅格地图最短路径规划【含源码 1860期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]蚁群算法机器人大规模栅格地图最短路径规划[含源码 1860期] 二.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾 ...

  7. 【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 1618期】

    ⛄一.蚁群算法及栅格地图简介 1 蚁群算法 1.1 蚁群算法的提出 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来寻找优化路径的机率型算法.它由Marc ...

  8. 【路径规划】基于matlab GUI多种蚁群算法栅格地图最短路径规划【含Matlab源码 650期】

    ⛄一.蚁群算法及栅格地图简介 1 蚁群算法 1.1 蚁群算法的提出 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来寻找优化路径的机率型算法.它由Marc ...

  9. 【大作业】基于MATLAB的PRM算法的路径规划设计(随机地图+GUI+源码+报告)

    基于MATLAB的PRM算法的路径规划设计 下载链接: [Matlab期末大作业]基于MATLAB的PRM算法的路径规划设计(大报告+源代码+注释) 课题内容和要求 学会运用MATLAB 解决实际优化 ...

最新文章

  1. linux获取后台进程的控制台数据
  2. C语言基础-第一个C程序
  3. SAPGUI系统登录页面配置的SAProuter有什么用 2
  4. 智慧交通day02-车流量检测实现06:目标估计模型-卡尔曼滤波
  5. php 树状数组公式,PY个树状数组
  6. java文件流操作注意
  7. 理解Linux中断 (3)【转】
  8. Kicad如何导入封装库、符号库(元件库)以及3D模型文件?
  9. linux yum list、search、-y、install、update、remove、grouplist、groupinstall、groupremove
  10. 对于spring中事务@Transactional注解的理解
  11. 命令行_Pytest之命令行执行
  12. 计算机里的e盘 不能应用,我的电脑里的e盘打不开是怎么回事
  13. 【测试工具】Selenium 自动化浏览器(Python 篇)
  14. 经典网页设计:20佳很酷的个人网站设计案例
  15. 电机控制的fast decay与slow decay
  16. [雅礼集训]xiz(字符串匹配)
  17. java 拼图_Java 9:“拼图计划终于给了我们急需的Java安全带”
  18. K8S kube-proxy- iptable模式实现原理分析
  19. 酒店项目 酒店管理系统酒店在线预订系统
  20. MySQL、SqlServer、Oracle 三种数据库的优缺点总结

热门文章

  1. MT4电脑版下载和安装
  2. [2002] PDOException in Connection.php line 295
  3. Floyd (弗洛伊德)算法简述
  4. html三角形图标,纯css三角形和css三角箭头实例代码
  5. python中特殊字符输出
  6. howler.js音频控制js库
  7. 实施工程师的必要条件
  8. 239. 滑动窗口最大值
  9. 如何从Vant Weapp、MinUI、iView Weapp、Wux Weapp、ColorUI共5个小程序组件库选型 转载
  10. 全国4000 AI企业北京独霸三成 | 《北京人工智能产业发展白皮书》发布(附下载)...