路径规划算法之几何建模

news2024/11/26 22:23:54

目录

1 几何建模简介

1.1 机器人建模

1.2 环境建模

2 多边形和多面体模型

2.1 凸集的定义

2.2 凸集的边界表示与实心表示

2.3 非凸多边形

2.4 逻辑谓词

2.5 多面体模型

2.6 阿拉伯数字半代数模型

2.7 非凸多边形的另一种编码

2.8 3D三角形

2.9 非均匀有理B样条曲线

2.10 位图

2.11 更广义的定义


本文对机器人运动规划的经典书籍《planning algorithm》进行解析,原文请参考3.1 Geometric Modeling (lavalle.pl)

1 几何建模简介

对于运动规划,如何对机器人和环境进行几何建模是非常重要的内容。几何建模的方法和技术多种多样,具体的选择通常取决于应用和问题的难度。在大多数情况下,通常有两种选择:边界表示与实心表示。

1.1 机器人建模

假设我们想要定义一个机器人的模型。利用边界表示法,可以写出与机器人表面大致重合的方程。若用实心表示,我们可以描述机器人实体中包含的所有点的集合。

1.2 环境建模

第一步是定义世界W,有两种可能的选择:(1)2D世界,其中W = R2, (2) 3D世界,其中W = R3。这样的定义足以解决大多数问题,然而,人们也可能希望允许更复杂的世界如更高维度的空间,本篇文章不讨论这些,因为它们目前的应用是有限的。第二步是定义障碍物区域:世界中“永久”被占领的部分,例如建筑的墙壁。

2 多边形和多面体模型

2.1 凸集的定义

首先介绍凸集,当且仅当,对于X中的任何一对点,连接它们的线段上的所有点都包含在X中。因此,x1和x2之间的插值总是在X中产生点。直观地说,X不包含口袋或缩进

2.2 凸集的边界表示与实心表示

O的边界表示是一个m边多边形,它可以用两种特征来描述:顶点和边。每个顶点对应多边形的一个“角”,每个边对应一对顶点之间的线段。多边形可以用R2中m个点的序列(x1, y1), (x2, y2),…,(xm, ym)来表示,按逆时针顺序给出。

O的实心表示可以表示为m个半平面的交。每一个半平面对应于多边形边所共有的直线一侧的所有点的集合。下图显示了一个八边形的例子,它表示为八个半平面的交点。

多边形的边由两点指定,例如(x1, y1)和(x2, y2)。考虑经过(x1, y1)和(x2, y2)的直线方程。可以确定一个方程的形式为ax + by + c = 0,其中a, b, c∈R是由x1, y1, x2, y2确定的常数。设f: R2→R为f(x, y) = ax + by + c给出的函数,注意直线的一边是f(x, y) < 0,另一边是f(x, y) > 0。事实上,f可以解释为(x, y)到直线的有符号欧氏距离,f(x, y)的符号表示以该线为界的半平面,设fi(x, y)表示从(xi, yi)到(xi+1, yi+1)边对应的直线f函数。

Hi对于1≤i≤m定义为W的一个子集。Hi是描述直线fi(x, y) = 0(包括直线上的点)一侧所有点的集合。

 凸的m边多边形障碍区域可以是多个半空间的交集,因此O表示为

2.3 非凸多边形

但O作为多边形障碍区域是凸边形的假设太有限。现在假设O是w的一个非凸多边形。在这种情况下,O可以表示为

其中每个Oi都是一个凸多边形集。使用这种表示,可以定义W中非常复杂的障碍区域。尽管这些区域可能包含多个分量和孔洞,但只要O是有界的,它的边界将由线性段组成。因此,O可以定义为任何有限的并集、交集和差集的组合。

注意,非凸多边形的表示不是唯一的。有很多方法可以将O分解为凸集(经典的三角剖分)。应该仔细选择分解,以优化将使用该模型的任何算法的计算性能。在大多数情况下,组件甚至可能被允许重叠。理想情况下,用最少数量的基元表示O似乎很好,但是自动化这样的分解可能会导致NP-hard问题。分解O的一种高效、实用的方法是应用垂直单元格分解算法

2.4 逻辑谓词

我们可以先定义一个逻辑谓词作为碰撞检测器。设φ是一个谓词,定义为φ: W→{true, false},如果W中的点位于O,则返回true,否则返回false。对于f(x, y) = 0给出的直线,设e(x, y)表示一个逻辑谓词,如果f(x, y)≤0则返回true,否则返回false。与凸多边形区域相对应的谓词用逻辑连接表示

如果点(x, y)位于凸多边形区域,谓词α(x, y)返回真值,否则返回假值。则由n个凸多边形组成的障碍区域用并集的逻辑表示

虽然存在更有效的方法,但φ可以在时间O(n)检查点(x, y)中是否位于O,其中n是O表示中出现的集合的数量。

2.5 多面体模型

对于三维世界,W = R3,前面的概念可以很好地从二维的情况下推广,用多面体代替多边形,用半空间代替半平面。边界表示可以根据三个特征定义:顶点、边和面。每个面都是一个嵌入R3中的“平面”多边形。每条边都构成了两个面之间的边界。每个顶点形成三条或多条边之间的边界。

已经提出了几种数据结构,允许人们方便地绕着多面体特征“走”。例如,双连接边缘列表。数据结构包含三种类型的记录:面、半边和顶点。直观地说,半边是有向边。每个顶点记录保存着点坐标和指向与顶点接触的任意半边的指针。每个面记录都包含一个指向其边界上任意半边的指针。每个面都由半边组成的圆形列表限定。多面体的每条边都有一对有向半边记录。每条半边如图3.3b中的箭头所示。每个半边记录包含指向其他5个记录的指针:1)半边起源于顶点;2)“孪生”半边,限定相邻面,且方向相反;3)以半边为界的面;4)绑定面的圆形边列表中的下一个元素;和5)前一个元素的圆形列表边绑定的脸。一旦定义了所有这些记录,就可以方便地遍历多面体的结构。更多关于该数据结构的介绍请参考lect10-dcel.pdf (umd.edu)

现在考虑一个多面体的实心表示。假设O为凸多面体,可以从顶点构造一个实体表示。O的每个面沿其边界至少有三个顶点。假设这些顶点不共线,通过它们的平面的方程可以确定为

同样可以构造f,除了f: R3→R和f(x, y, z) = ax + by + cz + d。设m为面数。对于O的每一个面,定义一个半空间Hi为W的子集

2.6 阿拉伯数字半代数模型

在多边形和多面体模型中,f 都是线性的。在二维世界的半代数模型的情况下,可以是具有实值系数和变量的任何多项式。构造的方式与上面的交集并集类似。

2.7 非凸多边形的另一种编码

上述方法需要非凸多边形表示为凸多边形的并集。现在提出一种新的方法,可以表示带孔的多边形。 通过使用不同的方向:逆时针为外部边界和顺时针为孔边界。

2.8 3D三角形

最方便的几何模型之一是一组三角形,每个三角形由三个点表示,这在计算机图形学中很流行,因为图形加速硬件主要使用三角形基元。若两个三角形如果有交集,则被视为“碰撞” 另一个。允许三角形基元有交集提供了极大的灵活性,因为没有对三角形表达方式的限制,这产生了表达的多解,然而这也是缺点之一。没有连贯性可以求出一个三角形顶点是否在另一个三角形“内部”来判断。如果至少有一些连贯性, 那么有时最好减少冗余三角形坐标的规范(许多三角形将共享相同的点或边)。删除此冗余的表示称为三角形条带,它是一系列三角形,使得每个相邻的三角形共享一个共同的边。一个三角形扇形,其中所有三角形共享一个共同的顶点。

2.9 非均匀有理B样条曲线

非均匀有理B样条曲线用于许多工程设计系统,以方便曲面的设计和调整,如飞机或汽车车身设计。半代数是隐式方程,而NURBS 和其他样条曲线是参数方程。这使得诸如渲染之类的计算容易;但是,其他功能(例如碰撞检测)变得更加多难。这些模型可以在任何维度上定义。这里给出了 2D 公式,更多B样条曲线细节可以阅读《考虑车辆运动约束的最优避障轨迹规划算法》论文解读二_无意2121的博客-CSDN博客

2.10 位图

对于W = R2或W = R3,都可以将世界的有界部分离散成可能被占用或不被占用的矩形单元格。这种离散化的分辨率决定了每个轴的单元格数量和大小。这种表示可以被认为是一个二值图像,其中图像中的每个“1”对应一个包含至少一个O点的矩形区域,而“0”表示不包含任何O点的区域。尽管位图不像其他模型那样优雅,但它们在应用中经常出现。其中一个例子是由移动机器人通过传感器探索环境而构建的数字地图。位图的一个概括是灰度图或占用网格。在这种情况下,可以为每个单元格分配一个数值,表示诸如“存在障碍的概率”或“穿越单元格的预期难度”等数量。后一种解释常用于为行星漫游车导航的地形图中。更多详细的建图内容可以参考【自动驾驶轨迹规划之地图结构】_无意2121的博客-CSDN博客

2.11 更广义的定义

不仅可以用多项式来定义f ,一个流行的基元是超二次元,它概括了二次曲面。一个例子是超椭球体

广义圆柱是普通圆柱的推广。对于某些参数s∈[0,1],中轴不是局限于一条直线,而是一条连续的脊柱曲线(x(s), y(s), z(s))。沿着脊柱定义了一个半径函数r(s),而不是一个恒定的半径。r(s)的值是作为广义圆柱在点(x(s), y(s), z(s)的截面得到的圆的半径。横截面平面的法线是脊柱曲线在s处的切线。

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

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

相关文章

Qt Quick、QML01——QML内容结构介绍

目录标题一、从Window 窗口组件开始&#xff08;一&#xff09;属性flags 表&#xff1a;visibility 表&#xff08;二&#xff09;信号和处理器&#xff08;槽函数&#xff09;&#xff08;通用&#xff09;&#xff08;三&#xff09;调用函数&#xff08;通用&#xff09;&a…

MapReduce Partition 分区

MapReduce Partition 分区 MapReduce输出结果个数研究 在默认情况下 不管Map阶段有多少个并发执行的task&#xff0c;到Reduce阶段&#xff0c;所有结果都将有一个task来进行处理&#xff0c;并且最终结果将输出到一个文件中&#xff0c;part-r-0000。 可以进行手动的设置re…

微信小程序图书商城毕业设计,图书商城购物小程序系统设计与实现,图书商城购物小程序商城毕设作品参考

功能清单 【后台管理员功能】 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 录入资讯&#xff1a;录入资讯标题、内容等信息 管理资讯&#xff1a;查看已录入资讯列表&#xff0c;支持删除和修改 广告设置&#xff1a;上传图片和设置小程序首页轮播图广告地…

相机拍照不清晰怎么回事?不清晰地照片还能修复高清吗?

现在有很多的人都非常的喜欢拍照&#xff0c;主要就是因为喜欢记录&#xff0c;抓住我们身边的美&#xff0c;但是拍照的话就要使用相机&#xff0c;那么像相机电子产品我们在平常的时候是使用不到的&#xff0c;只有在有需求的时候可以使用的&#xff0c;而且也是有需求的人才…

Spring Security(6)

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; Spring Security使用MySQL保存cookie记录虽然方便&#xff0c;但是目前更多的主流互联网应用都是用NoSQL来保存非业务数据的&#xff0c;Spring Security也应该可…

案例分享|生产环境MQ集群一个非常诡异的消费延迟排查

1、问题现象 某一天&#xff0c;项目组一个同事向我反馈&#xff0c;他们使用公司的数据同步产品将MySQL数据同步到MQ集群&#xff0c;然后使用消费者将数据再同步到ES&#xff0c;反馈数据同步延迟严重&#xff0c;但对应的消费组确没有积压&#xff0c;但最近最近几分钟的数…

LinkedIn领英开发客户方法大全(篇二)

profile完善步骤详细说明 详细步骤&#xff1a; 如下图箭头所示步骤&#xff0c;点击“view my profile”&#xff1a; 进入你的档案资料界面&#xff1a; 1&#xff09;点击红色圆圈所示处&#xff0c;即进入Edit intro界面: 即编辑个人简介&#xff0c;包括&#xff1a; …

企业如何通过推特群推创造商机

尤其是小企业要足够重视Twitter在营销推广上的重要性。因此&#xff0c;你有必要精心设计Twitter主页&#xff0c;并付诸投入和努力&#xff0c;这样就会看到消费者数量的增长&#xff0c;以及品牌忠诚度的提升。无疑&#xff0c;在Twitter上&#xff0c;很多企业可以发现商机&…

HTML基础-表单标签,button按钮,select下拉菜单

HTML基础-表单标签 目标和学习路径 1.表单标签 1.1 input系列标签的基本介绍 1.2 input系列标签-文本框 (拓展)value属性和name属性作用介 1.3 input系列标签-密码框 1.4 input系列标签-单选框 1.5 input系列标签-复选框 1.6 input系列标签-文件选择 2.button按钮标签 1.7 inpu…

JVS无忧·企业计划2.1.6更新说明

无忧企业计划是JVS企业数字化全家桶中重要组成部分&#xff0c;主要用于项目管理、任务管理、进度跟踪、过程管理等场景。 任务管理是企业内部事务协同的重要工具&#xff0c;与传统的OA有类似之处&#xff0c;同样是推动企业内部事务有效快速的执行&#xff0c;但之前存在不同…

直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析(二)

文章目录前言一、转速闭环直流调速系统二、Matlab/Simulink仿真2.1.仿真电路分析2.2.仿真结果分析总结前言 变压调速是直流调速系统的主要调速方法&#xff0c;因此系统的硬件至少包含&#xff1a;可调直流电源和直流电机两部分。可调直流电源多采用直流PWM变换器&#xff0c;…

CMMI2.0之我见-过程质量保证PQA

编者按&#xff1a; CMMI2.0之我见系列将通过系列文章形式介绍CMMI2.0所涉及到的其中20个实践域&#xff0c;笔者将通过系统性的梳理、浅显易懂的文字描述&#xff0c;同时结合笔者的思考和观点&#xff0c;对每个实践域的目标以及所基本涵盖的内容进行描述&#xff0c;希望能…

CSS 的快乐:画一个可爱的三只小鸟 Button

做为前端工程师&#xff0c;最大的快乐之一就是可以用 CSS 画出各种有趣的效果。 比如我最近画的一个 Button&#xff1a; 画的过程中确实很开心&#xff0c;这也是我当时选择做前端的很大一部分原因。 今天我们就一起来画下这个可爱的 Button 吧&#xff01;纯 CSS&#xff…

Kamiya丨Kamiya艾美捷小鼠血清淀粉样蛋白A ELISA说明书

Kamiya艾美捷小鼠血清淀粉样蛋白A ELISA预期用途&#xff1a; 小鼠血清淀粉样蛋白A ELISA是一种高灵敏度的双位点酶联免疫分析&#xff08;ELISA&#xff09;小鼠生物样品中血清淀粉样蛋白A&#xff08;SAA&#xff09;的定量测定。仅供研究使用。 引言 铜蓝蛋白是参与铜转运…

Go学习之路:更多类型:struct、slice 和映射(DAY 2)

文章目录前引更多类型&#xff1a;struct、slice 和映射1、指针2.1、结构体/结构体命名&#xff08;一&#xff09;2.2、结构体/对象访问、指针访问、初始化规则&#xff08;二&#xff09;3、数组4.1、切片/初始化切片4.2、切片/切片引用数组4.3、切片/切片的length和capacity…

React Context源码是怎么实现的呢

目前来看 Context 是一个非常强大但是很多时候不会直接使用的 api。大多数项目不会直接使用 createContext 然后向下面传递数据&#xff0c;而是采用第三方库&#xff08;react-redux&#xff09;。 想想项目中是不是经常会用到 connect(...)(Comp) 以及 <Provider value{s…

非互联网客户收入近6成,阿里云进入新周期

近日&#xff0c;阿里巴巴发布了截至2022年9月30日止季度&#xff08;2023财年第二季度&#xff0c;阿里财年从每年4月1日至第二年3月31日&#xff09;业绩。 在除去阿里内部使用的额度&#xff0c;抵销跨分部交易后&#xff0c;阿里云业务分部&#xff08;包括阿里云和钉钉&am…

【web前端期末大作业】基于html+css+javascript+jquery技术设计的音乐网站(44页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【华为上机真题 2022】字符串加密

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

【Linux】基本指令(三)

文章目录sort 指令find 指令which 指令alias 指令grep 指令top 指令zip/unzip指令tar 指令bc 指令unname 指令history 指令shutdown 指令热键补充sort 指令 &#x1f495; Linux sort 命令用于将文本文件内容加以排序并且可针对文本文件的内容&#xff0c;以行为单位来排序。 …