一种面向虚拟现实的A*寻路优化方法与流程

文档序号:16694646发布日期:2019-01-22 19:23阅读:335来源:国知局
一种面向虚拟现实的A*寻路优化方法与流程

本发明涉及虚拟现实领域中的路径规划问题,尤其是涉及一种面向虚拟现实的a*寻路优化方法。



背景技术:

虚拟现实技术是一种可以创建虚拟环境的多种技术的集合,它通过计算机和外围传感器生成一个虚拟的3d环境,使用者可以与虚拟环境进行交互,除了提供视觉感知外,还包含其他多感知技术,是一种综合性极强、多学科交叉的前沿技术。目前,虚拟现实技术主要应用于游戏、教育以及参观展示方面,在一些大型游戏或场景中,使用者通常不知道自己身在何处,也不知道目的地该如何前往,因此对虚拟场景进行路径规划就显得格外重要。然而,相较于一般的路径规划,面向虚拟现实的路径规划则要更为复杂一些,它面向的是虚拟物体和场景,涉及到3d网格的构建以及障碍物检测,这对路径搜索算法的效率提出了更高的要求。

路径搜索可以分为两类:盲目搜索和启发式搜索。盲目搜索是一种无信息搜索,它通常不考虑节点本身的特性,直接按照预定的策略进行搜索,它比较适用于问题比较简单的情况。常用的盲目搜索算法有:深度优先搜索和广度优先搜索。深度优先搜索的缺点是可能搜索出来的路径不是最优路径,广度优先搜索的不足在于搜索过程中占用的内存较大。其中有一种经典的寻路算法是dijkstra算法,它虽然可以找到最优路径,但是不足之处在于寻路过程中遍历的节点太多从而会影响算法的效率。因此在自动寻路算法中,常用的方法是启发式搜索,它会对待搜索列表中的元素进行代价评估,找到其中代价最优的位置,然后从这个位置继续往前探索,最后找到路径终点停止。目前,a*算法是一种常用的启发式搜索算法,经常用来寻找最优路径。相比dijkstra算法,a*算法虽然降低了寻路过程中查找的节点,但对于相对复杂的场景来说,其效率仍然不够理想。



技术实现要素:

本发明提出了一种面向虚拟现实的a*寻路优化方法,首先对整个虚拟场景进行障碍物检测,然后结合节点的方向信息和约束规则进行路径规划。

本发明通过以下技术方案来实现上述目的:

(1)对整个虚拟场景进行障碍物检测,生成一个覆盖整个虚拟场景的网格地图,每个网格不仅包含坐标信息,还包括障碍物信息。

(2)确定路径的代价估计函数和启发函数。

(3)确定路径节点的方向信息和约束规则。

(4)根据(3)中方向信息和约束规则进行递归查找,直至得到下一个搜索节点。

(5)根据(2)中的代价估计函数和启发函数对(4)中得到的待搜索节点进行代价估计,并从中选取代价最小的节点加入最优路径。

附图说明

图1面向虚拟现实的a*寻路优化方法结果图;

具体实施方式

虚拟场景进行障碍物检测的具体方法如下:

在虚拟场景中,构建的是3d网格,需要将场景中物体的世界坐标系下的坐标转换成网格坐标系下的坐标。假设场景的最大长度,最大宽度和最大高度分别为a,b,c,网格的长、宽、高分别为a,b,c,以场景左上角的端点p=(m,n,p)为标定点,设为网格坐标系的坐标原点(0,0,0),接下来对整个场景进行网格构建,对于任意的网格节点坐标(x,y,z),映射到世界坐标系的坐标为(ax+m,by+n,cz+p)。

目前,常用的障碍物检测方法有空间分割法和包围盒法。空间分割法是将虚拟场景进行均匀划分,再检测相交的模块,可以快速剔除掉不相交的物体,该方法虽然对模型较少的虚拟环境效率较高,但在复杂的场景中,该方法不仅空间占据率较大且效率较低。包围盒法主要是采用近似三维场景中模型的立体几何对象将模型包围起来,之后在做障碍物检测时不需要考虑两个模型的每个面是否相交,而只需要对两个立方体进行检测,这也就极大地减少了面与面的相交测试数量,提升了检测的效率,故该算法被广泛应用于各种vr场景的障碍物检测。本系统使用的正是包围盒法,它是一个包含该物体的最小长方体,它的创建比较简单,分别找出对象的所有顶点坐标的最大值(xmax,ymax,zmax)和最小值(xmin,ymin,zmin)就能确定。它包含的区域范围为:

r={(x,y,z)|xmin≤x≤xmax,ymin≤y≤ymax,zmin≤z≤zmax}

代价估计函数和启发函数的具体方法如下:

在静态网格中,a*算法是搜索最优路径的有效方法,但采用不同的估价函数最后可能会得到不同的寻路结果。a*算法的代价估计函数为:

f(n)=g(n)+h(n)(1)

其中,g(n)表示从出发点移动到指定节点n的实际代价,而h(n)是从节点n到目的地的最小代价估计,f(n)表示从出发点搜索到目的地的最优路径的总代价。

在寻路的过程中,往往寻得的路径不止一条,但不同路径所花的代价可能不同,因此需要找到一条代价最小的路径。然而,即使代价相同的路径也有可能出现不同的走法,所以启发函数的选择就至关重要。本系统采用的启发函数是对角线距离计算方式:

若节点a的坐标为(xa,xa),节点b的坐标为(xb,xb),在场景中沿水平方向或者垂直方向移动一个单位的代价为d,沿对角线方向移动的代价为则节点a与节点b的距离dis为:

路径节点的方向信息和约束规则的具体方法如下:

对于路径节点e,它的每个邻接节点ei都是待搜索节点,ei的方向信息是其父节点e至本身节点的方向向量,则对于节点n=(xn,yn)至其父节点np=(xpn,ypn)的方向向量为:

假设节点n=(xn,yn)及其方向信息路径终点d=(xd,yd)及其方向信息若满足以下约束条件中的任意一种,则节点n=(xn,yn)是下一个路径查找节点。

(1)当dxn·dxd≥0且dyd≥0时,节点(xn,yn+1)是不可通过节点且节点(xn+1,yn+1)是可通过节点。

(2)当dxn·dxd≥0且dyd≤0时,节点(xn,yn-1)是不可通过节点且节点(xn+1,yn-1)是可通过节点。

(3)当dxn·dxd≤0且dyd≥0时,节点(xn,yn+1)是不可通过节点且节点(xn-1,yn+1)是可通过节点。

(4)当dxn·dxd≤0且dyd≤0时,节点(xn,yn-1)是不可通过节点且节点(xn-1,yn-1)是可通过节点。

面向虚拟现实的a*寻路优化方法可描述如下:

(1)先建立两个表(openset和closeset),openset表用于存储那些准备搜索、但还没加入最佳路径的节点,closeset表用来存放已加入最佳路径的节点。openset和closeset清空,将起点s加入openset。

(2)若openset为空,说明寻路失败,退出寻路过程。否则从openset中选取f值最小的节点n,将其作为当前节点加入closeset,并从openset中移除。

(3)考察节点n是否为目的地d,如果是,说明已找到最佳路径,并结束寻路过程。如果不是,则获取该节点的所有可通过邻接节点ni,根据每一个邻接节点的方向信息按照约束规则进行递归查找,直至得到下一个搜索节点,对每一个搜索节点pi进行下列步骤:

1)若pi为不可通行节点或pi存在于closeset中,则不考虑。

2)如果pi不在openset中,则通过启发函数分别计算pi的f,g,h值,将节点n设为pi的父节点,并将pi加入openset。

3)如果pi在openset中,则重新计算该节点的g值,若比pi之前的g值小,则更新pi的g值为重新计算的结果,将节点n设为pi的父节点。

(4)转到步骤(2)继续执行。

a*寻路算法的执行效率主要从路径的总长度和openset存储节点个数中体现。为了验证本发明的提出的面向虚拟现实的a*寻路优化方法的有效性,在相同实验环境的条件下,分别在3个不同的虚拟场景中对传统a*算法和本文提出的优化算法进行了对比实验。实验结果如表1所示:

表1算法执行效率比较

tab.1comparisonofalgorithmexecutionefficiency

从表中可以看出本文算法经过搜索得到的路径总长度基本与传统a*算法一致,从而保证了可靠性,但本文算法无论是openset存储节点个数还是路径节点个数都远小于传统a*算法,算法的空间性能得到了较大的提升,同时在时间性能上也优于传统算法。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1