一种大规模虚拟人群寻径方法 【技术领域】
本发明涉及计算路径的方法,特别涉及一种可以提高寻径速度和准确度的大规模虚拟人群寻径方法。
背景技术
在计算机的二维和三维游戏中,有许多场景,例如房间、大地、海洋、森林,对于这些场景计算机以网格的形式进行描述,即在一个场景是由若干个相邻的网格组成,一般采用三角形作为基本网格。在二维或三维空间中,任何一个三角形,只要给出三个顶点的坐标就可以确定下来,尤其在三维游戏中,计算机系统可以通过保存三角形的三个顶点的三维坐标来保存场景。于是一个场景划分为多少个三角形网格,是由该场景的地形以及障碍物的分布情况所决定的。
在各种场景中,一个物体要从一个地方移动到另外一个地方,往往存在多条路径,这就需要能够计算和选择一条最短路径。
目前,计算三维场景中任意两点间最短路径的常用方法如下:
基于环境模型的虚拟人群寻径是一种常见的虚拟人群寻径方法。对基于环境模型的路径规划方法来说,其性能和所用的环境模型密不可分,许多路径规划方法的突出优势即体现在其所用的环境模型上。环境模型大致可分为两类:网络/图模型,网格/树模型。前者如可视图、切线图、voorn次图、拓扑网络等,利用它们在进行路径规划时可得到比较精确的解,但计算量大。后者如栅格、四叉树、八叉树等,简单易用。
环境模型是这类路径规划方法的基础,能否充分反映环境信息、能否有效建立环境模型,关系到整个路径规划方法的性能优劣。环境信息完全已知时,可建立全局环境模型。在实际应用中,虚拟人的工作环境常常具有不确定性(包括非结构性、动态性等),虚拟人无法预先建立全局环境模型,只能根据传感器信息实时地建立局部环境模型。建立环境模型通常需要考虑两个问题:一是环境模型的结构和数据量,结构越复杂、数据越多,反映的环境信息越详细和完整,但导致用于保存环境信息的内存增大,难以实时更新环境信息和规划路径。相反,若模型结构简单、数据量小,则占用内存较小,易于实时更新和快速规划,但可能会遗失某些有用的环境细节信息。
拓扑法是一种常用的路径规划方法,如专利号200610000313.2的发明专利,它将规划空间分割成具有拓扑特征的子空间,根据彼此连通性建立拓扑网络,在网络上寻找起始点到目标点的拓扑路径,最终由拓扑路径求出几何路径。拓扑法基本思想是降维法,即将在高维几何空间中求路径的问题转化为低维拓扑空间中判别连通性的问题。优点在于:利用拓扑特征大大缩小了搜索空间;复杂性仅依赖于障碍物数目,理论上是完备的;通常不需要虚拟人的准确位置,对于位置误差也就有了更好的鲁棒性。缺点是建立拓扑网络的过程相当复杂。
A*算法方法也是一种常用的路径规划方法,该方法一般忽略了虚拟人外形大小,将虚拟人视为一个无大小的质点,不考虑虚拟人的运动特性,而且虚拟人所处的环境是全局可知的。方法虽然简单直观,但在问题规模较大时,时间和空间复杂度太高。A*算法方法是一种典型的启发搜索方法,将其用于虚拟人的自由空间路径搜索时,由于搜索空间过大,搜索效率很低,经常几乎要扩展整个规划空间才能找到目标,并且得到的路径是相对栅格化的。
【发明内容】
为了克服现有技术中针对大规模虚拟人群的路径规划存在的不足,本发明提供了一种大规模虚拟人群寻径方法,该方法充分利用了智能环境的三个层次并结合虚拟人群的三个层次,提高了当前位置到目标位置找到最优路径的可能性和计算速度,有效减少了计算量。
本发明所采用的技术方案是:
步骤1,将虚拟人群划分为三个不同层次的集合:人群(crowd)、团队(group)和个体(agent)。同时定义了人群的三个大方面的属性:知识(Knowledge)、信念(Beliefs)和意图(Intentions)。
步骤2,将3D地图转换成2D的地图,并进行简化之后存储为线段和点。
步骤3,使用约束Delaunay三角剖分把地图分成三角形网格。
步骤4,计算转角与墙之间的最短距离。
步骤5,最短距离的约束Delaunay三角形的剖分。
步骤6,简化子区域和减少单元的数量。
步骤7,将环境信息抽象成三层具有拓扑结构的地图。
步骤8,计算IP点。
步骤9,多层次的路径规划,获得最优路径。
在步骤1中,将虚拟人群分为三个不同层次的集合:人群(crowd)、团队(group)和个体(agent)。同时定义了人群地三个大方面的属性:知识(Knowledge)、信念(Beliefs)和意图(Intentions)。其中知识主要涉及虚拟环境中的各种信息,包括:障碍物、基于环境的人群动作和行为、人群知识等。障碍物知识定义了场景中各个物体的位置,或是人群可行走和不可行走的区域;基于环境的人群动作和行为知识,包括在一定区域内的路径规划,IP点(人群必须经过的位置)和AP点(人群必须执行特定动作的位置)的定义等;人群知识,则是各个群的领导人的记忆库中储存的有关人群的各种信息。
在步骤2中,将3D地图转换成2D地图,存储为线段和点,是对虚拟环境中的复杂的障碍物采用包围盒方法来简化,通过平面投影得到线段和点。
在步骤3中,使用约束Delaunay三角剖分把地图分成三角形网格。利用步骤2所得到的点和线段,使用约束Delaunay三角剖分方法对约束曲线和散乱点进行剖分得到最初的约束三角形。
散乱点:位置分布不规则的点称为散乱点。
约束曲线:对于边界由直线段组成的若干有界区域,在区域边界上且左侧邻接的全部有向直线段组成的集合称为一条约束曲线。这些区域称为约束曲线周围的区域,约束曲线上线段的点称为约束曲线的结点。
三角形的内部不包含约束曲线的结点、三个顶点彼此可见且三角形外接圆内部不包含从它的三个顶点都可见的散乱点作为生成三角形的一个约束条件,称为约束Delaunay规则,这里一个点对另外一个点“可见”是指两个点的连线不会穿过预先给定的约束曲线。
约束Delaunay三角形:符合约束Delaunay规则的三角形称为约束Delaunay三角形。
在步骤4中,对任意的三角形(A,B,C),如果(BC∈Cs),(AC∈Fs),(AB∈Cs∪Fs)且(A∈Cp),通过三角形的点A向BC作垂线AP,然后BC线段被移除并被BP和CP取代,BP和CP是被加入到集合Cs并且AP被加入到集合Dp。
其中,Cs:约束线段的集合;Fs:无约束线段的集合;Cp:从环境中抽象出来的点的集合;Dp:是计算墙和拐角处之间最短距离产生的点的集合。
在步骤5中,通过步骤4的计算产生一个包含墙和拐角处最短距离,再次使用约束Delaunay三角形剖分方法,具体过程参照步骤3。
在步骤6中,为了简化子区域和减少单元的数量,要对单元进行合并。合并的原则为挑选无约束线段,当且仅当这个结果单元是曲面并且共享无约束区域的长度长于所在无约束区域限定的结果单元时,两个单元共享的当前区域被结合成一个单元。
在步骤7中,对虚拟环境划分成三个层次,第三层(最高拓扑层)地图表示了虚拟环境不同区域之间的拓扑结构;第二层(中间拓扑层)地图表示虚拟人附近区域的环境信息,第一层(底部拓扑层)实现了实时的寻径过程。
将第一层的节点叫做cells,第二层的节点叫做groups,第三层的节点叫做zones。第一层最为详细,顶层最为粗略。
拓扑抽象原则:arity(c)表示每一个单元c拥有的通道数量,如果arity(c)=0,c就是一个closed单元;如果arity(c)=1,c就是一个dead end单元;如果arity(c)=2,c就是一个passage单元;如果arity(c)>2,c就是一个crossroads单元。
函数的定义:
定义P(c)=arity(c)*(arity(c)-1)为穿过单元c的路径(有方向的)
定义add(c1,c2)=p(c1∪c2)-p(c1)-p(c2)为当合并单元c1和c2并移除所有公共边后加入的路径的数目,如图5所示。
例如:假设合并C,I单元P(c)=12,P(i)=6,add(c1,c2)=p(c1∪c2)-p(c1)-p(c2)=p(5)-p(4)-p(3)=2合并C,I增加了2条穿过C,I单元合并了之后的单元。
所有的dead end和passage被抽象。然后所有相互连接的队列单元被抽象出来为了生成一棵平衡二叉树。因此,每一个单元队列被减少成一个独立的抽象单元。
所有的dead end单元被它们的邻接crossroads单元合并,如果这个过程产生了新的deadend单元,返回步骤6。
所有的passage单元被它邻接crossroads单元中的一个合并。
对于所有的crossroads单元的pairs(c1,c2),加入的路径是可以被计算的。设m为加入路径的最小数目,所有的单元的pairs例如add(c1,c2)=m被合并区建立一个新的抽象单元。如果这一步产生了新的dead end或者passage单元,转到步骤1,否则,就重复第4步直到遇到一个单独的closed单元。
在步骤8中,IP点即为关键点。对于每一个单元,关键点在无约束的边上产生并被线性的路径所连接。
步骤8.1,第二层的拓扑抽象,并找出对应的IP点。
将第一层的节点cells组合成更高层次的groups,参照步骤6。
步骤8.2,第三层的拓扑抽象,并找出对应的IP点。
将第二层的节点groups组合成更到层次的zones,参照步骤6。
在步骤9中,每层IP列表的计算采用A*方法。A*方法节点的启发式估计函数为f(x)=g(x)+h(x),f(x)是假设从起始节点S出发,经过节点X到达目标节点T的最小代价值估计值。估价函数f(x)由以下两部分所组成:一部分是从起始节点S到达节点x的最小代价,记为g(x);另一部分是从节点x到目标节点的最小代价,记为h(x)。即为,f(x)=Lsx+dis(X,x)+h(x)式中Lsx是从原点S到当前节点X的实际最小费用,dis(X,x)是从当前节点X到扩展节点x的直线长度,h(x)是扩展节点x到目标节点T的路径长度,dis(X,x)+h(x)是启发式函数。
花费评估:路径长度评估,路径宽度评估,人口密度的评估,目前方向的评估,目的点方向的评估。
步骤9.1,在拓扑地图的第三层寻径,从目前的zone到目标zone所要经过的IP点,得到zones层的IP列表。
步骤9.2,在拓扑地图的第二层寻径,利用步骤8.1所得的IP列表,从当前group到目标group所要经过的IP点,得到groups层的IP列表。
步骤9.3,在拓扑地图的第三层寻径,利用步骤9.2所得的IP列表,从当前cell到目标cell所要经过的IP点,得到cells层的IP列表。每组成员共享一个IP列表,个体的路径采用线性插值方式获得。
本发明的有益效果是:充分利用了虚拟人群的三个不同层次的特点,减少了路径规划的复杂度;在环境划分后对地图进行拓扑抽象,很大程度上减少了建立拓扑网络的复杂度;多层次的寻径方法,避免了对不相关区域的搜索,提高了搜索的进度;每组成员共享一个IP列表,避免了虚拟个体的重复寻径,大大加快了寻径计算的速度。
【附图说明】
图1为本发明所述一种大规模虚拟人群寻径方法的流程图;
图2为本发明所述约束Delaunay三角剖分方法后得到的结果;
图3为本发明所述计算转角与墙之间的最短距离;
图4为本发明所述再次采用约束Delaunay三角剖分方法得到的结果;
图5为本发明所述空间划分并简化后的地图;
图6为本发明所述提取IP点的之后的地图;
图7为本发明所述第一层拓扑抽象得到的结果;
图8为本发明所述通过该方法求得的最优路径。
【具体实施方式】
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
下面结合附图和实施例为例对本发明进行进一步说明:
在本实施例中,如图1所示的流程图给出了本实施例的具体过程:
步骤1,将虚拟人群分为三个不同层次的集合:人群(crowd)、团队(group)和个体(agent)。同时定义了人群的三个大方面的属性:知识(Knowledge)、信念(Beliefs)和意图(Intentions)。
其中知识主要涉及虚拟环境中的各种信息,包括:障碍物、基于环境的人群动作和行为、人群知识等。障碍物知识定义了场景中各个物体的位置,或是人群可行走和不可行走的区域;基于环境的人群动作和行为知识,包括在一定区域内的路径规划,IP点(人群必须经过的位置)和AP点(人群必须执行特定动作的位置)的定义等;人群知识,则是各个群的领导人的记忆库中储存的有关人群的各种信息。
步骤2,将3D地图转换成2D地图,存储为线段和点。
对虚拟环境中的复杂的障碍物采用包围盒方法来简化,通过平面投影得到线段和点。
步骤3,使用约束Delaunay三角剖分把地图分成三角形网格。利用步骤2所得到的点和线段,使用约束Delaunay三角剖分方法对约束曲线和散乱点进行剖分得到最初的约束三角形。
散乱点:位置分布不规则的点称为散乱点。
约束曲线:对于边界由直线段组成的若干有界区域,在区域边界上且左侧邻接的全部有向直线段组成的集合称为一条约束曲线。这些区域称为约束曲线周围的区域,约束曲线上线段的点称为约束曲线的结点。
三角形的内部不包含约束曲线的结点、三个顶点彼此可见且三角形外接圆内部不包含从它的三个顶点都可见的散乱点作为生成三角形的一个约束条件,称为约束Delaunay规则,这里一个点对另外一个点“可见”是指两个点的连线不会穿过预先给定的约束曲线。
约束Delaunay三角形:符合约束Delaunay规则的三角形称为约束Delaunay三角形。
使用约束Delaunay三角剖分方法后得到的结果可以如图2所示。
步骤4,计算转角与墙之间的最短距离。
Cs:约束线段的集合;Fs:无约束线段的集合;Cp:从环境中抽象出来的点的集合;Dp:是计算墙和拐角处之间最短距离产生的点的集合。
任意的三角形(A,B,C),如果(BC∈Cs),(AC∈Fs),(AB∈Cs∪Fs)且(A∈Cp),通过三角形的点A向BC作垂线AP,然后BC线段被移除并被BP和CP取代,BP和CP是被加入到集合Cs并且AP被加入到集合Dp,如图3所示。
步骤5,最短距离的约束Delaunay三角形的剖分。
通过步骤4的计算产生一个包含墙和拐角处最短距离,再次使用约束Delaunay三角形剖分方法,具体过程参照步骤3,得到的结果如图4所示。
步骤6,简化子区域和减少单元的数量。
为了简化子区域和减少单元的数量,要对单元进行合并。
合并的原则:挑选无约束线段,当且仅当这个结果单元是曲面并且共享无约束区域的长度长于所在无约束区域限定的结果单元时,两个单元共享的当前区域被结合成一个单元。
步骤7,进行拓扑抽象。
对虚拟环境划分成三个层次,第三层(最高拓扑层)地图表示了虚拟环境不同区域之间的拓扑结构;第二层(中间拓扑层)地图表示虚拟人附近区域的环境信息,第一层(底部拓扑层)实现了实时的寻径过程。
将第一层的节点叫做cells,第二层的节点叫做groups,第三层的节点叫做zones。第一层最为详细,顶层最为粗略。
拓扑抽象原则:arity(c)表示每一个单元c拥有的通道数量,如果arity(c)=0,c就是一个closed单元;如果arity(c)=1,c就是一个dead end单元;如果arity(c)=2,c就是一个passage单元;如果arity(c)>2,c就是一个crossroads单元。
函数的定义:
定义P(c)=arity(c)*(arity(c)-1)为穿过单元c的路径(有方向的)
定义add(c1,c2)=p(c1∪c2)-p(c1)-p(c2)为当合并单元c1和c2并移除所有公共边后加入的路径的数目。如图5所示。
例如:假设合并C,I单元P(c)=12,P(i)=6,add(c1,c2)=p(c1∪c2)-p(c1)-p(c2)=p(5)-p(4)-p(3)=2合并C,I增加了2条穿过C,I单元合并了之后的单元。
所有的dead end和passage被抽象。然后所有相互连接的队列单元被抽象出来为了生成一棵平衡二叉树。因此,每一个单元队列被减少成一个独立的抽象单元。
所有的dead end单元被它们的邻接crossroads单元合并,如果这个过程产生了新的deadend单元,返回步骤6。
所有的passage单元被它邻接crossroads单元中的一个合并。
对于所有的crossroads单元的pairs(c1,c2),加入的路径是可以被计算的。设m为加入路径的最小数目,所有的单元的pairs例如add(c1,c2)=m被合并区建立一个新的抽象单元。如果这一步产生了新的dead end或者passage单元,转到步骤1,否则,就重复第4步直到遇到一个单独的closed单元。
步骤8,计算IP点。
IP点即为关键点。对于每一个单元,关键点在无约束的边上产生并被线性的路径所连接,如图6所示:
步骤8.1,第二层的拓扑抽象,并找出对应的IP点。
将第一层的节点cells组合成更高层次的groups,参照步骤6。
步骤8.2,第三层的拓扑抽象,并找出对应的IP点。
将第二层的节点groups组合成更到层次的zones,参照步骤6。
步骤9,采用多层次寻径,获取最优路径。
每层IP列表的计算采用A*方法。
如图7所示,A*方法节点的启发式估计函数为f(x)=g(x)+h(x),f(x)是假设从起始节点S出发,经过节点X到达目标节点T的最小代价值估计值。估价函数f(x)由以下两部分所组成:一部分是从起始节点S到达节点x的最小代价,记为g(x);另一部分是从节点x到目标节点的最小代价,记为h(x)。即为,f(x)=Lsx+dis(X,x)+h(x)式中Lsx是从原点S到当前节点X的实际最小费用,dis(X,x)是从当前节点X到扩展节点x的直线长度,h(x)是扩展节点x到目标节点T的路径长度,dis(X,x)+h(x)是启发式函数。
花费评估:路径长度评估,路径宽度评估,人口密度的评估,目前方向的评估,目的点方向的评估。
步骤9.1,在拓扑地图的第三层寻径,从目前的zone到目标zone所要经过的IP点,得到zones层的IP列表。
步骤9.2,在拓扑地图的第二层寻径,利用步骤8.1所得的IP列表,从当前group到目标group所要经过的IP点,得到groups层的IP列表。
步骤9.3,在拓扑地图的第三层寻径,利用步骤9.2所得的IP列表,从当前cell到目标cell所要经过的IP点,得到cells层的IP列表。每组成员共享一个IP列表,个体的路径采用线性插值方式获得。如图8所示,S表示虚拟人的初始位置,T表示目标的位置,S→T表示通过该方法求得的最优路径。