一种基于相同开销网格的高效寻路的方法及系统转让专利

申请号 : CN201410412693.5

文献号 : CN104156459B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈阳卜雄剑涂敏飞

申请人 : 焦点科技股份有限公司

摘要 :

本发明公开了一种基于相同开销网格的高效寻路的方法及系统,系统包括:初始化模块、寻路子系统、路径合并优化模块三大部分。初始化模块用于把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn)。寻路子系统用于寻找从起始点到目标点的线路,路径合并优化模块用于回溯线路长度的计算,并通过与待选线路中各段拐点间线路长度的比较,选出最短线路作为最后的行进线路。方法步骤为:第一步:初始化步骤;第二步:寻路步骤;第三步:路径优化步骤。本发明加快寻路速度,降低服务器或客户端的开销,本发明的寻路效率是大于A*。

权利要求 :

1.一种基于相同开销网格的高效寻路的方法,其特征在于,具体步骤为:第一步:初始化步骤,

把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn);

第二步:寻路步骤,

寻路步骤分为两种模式:

自由寻路模式:对于自由寻路模式,表示在寻路过程中没有遇到障碍物的情况下所进行的寻路方式;爬绕障碍模式:表示在寻路过程中遇到障碍物的情况下所进行的寻路方式;

第三步:路径优化步骤;

路径优化步骤包括:

(1)以待选线路为对象,从目标点开始进行线路的回溯;找到与目标相邻的拐点,以整个待选线路的目标点作为回溯的起始点,以相邻拐点作为目标点开始分阶段进行寻路操作;如果两者之间无障碍物,以自由寻路模式进行,如果有障碍物,以自由寻路模式与爬绕障碍模式反复切换的方式进行;

(2)到达相邻拐点后,确定目标点到相邻拐点的回溯线路,计算这一段回溯线路的长度d1,同时计算待选线路中,相邻拐点到目标点的路径长度d2;其中,一边相邻的两个网格,设置其距离为1个单位,对角相邻的两个网格,设置其距离为 个单位;

(3)比较目标点到相邻拐点的路径长度d1与相邻拐点到目标点的路径长度d2,选择两者之间距离短的作为这一段的优化后线路;

(4)再选择这个拐点作为回溯线路的起始点,选择在待选线路上回溯的下一个相邻拐点作为目标点,开始进行寻路操作;如果两者之间无障碍物,以自由寻路模式进行,如果有障碍物,以自由寻路模式与爬绕障碍模式反复切换的方式进行;然后计算这一段回溯线路的长度,并计算待选线路上这两个拐点的线路长度,比较后,选择两者之间距离短的作为这一段的优化后线路;

(5)反复进行,直到回溯的最后目标点是待选线路的起始点为止;

(6)选择每段优化后的线路,连接起来,作为最后选择的线路。

2.根据权利要求1所述的基于相同开销网格的高效寻路的方法,其特征在于,自由寻路模式包括:(1)判断起始点与目标点之间的方向差,根据方向差确定行进方向;

根据起始点和目标点的坐标,通过以下计算规则,确定第一行进点的坐标(x1,y1):●xn>x0,且yn>y0;则行进的下一点坐标为:x1=x0+1,y1=y0+1;

●xn>x0,且yn=y0;则行进的下一点坐标为:x1=x0+1,y1=y0;

●xn>x0,且yn

●xny0;则行进的下一点坐标为:x1=x0-1,y1=y0+1;

●xn

●xn

●xn=x0,且yn>y0;则行进的下一点坐标为:x1=x0,y1=y0+1;

●xn=x0,且yn=y0;则行进的下一点坐标为:x1=x0,y1=y0;

●xn=x0,且yn

(2)确定第一行进点的坐标(x1,y1)后,结合目标点的坐标,利用上述同样的计算规则,得出第二行进点坐标(x2,y2),以此类推,中间行进点(xk,yk)的坐标为:●xn>xk-1,且yn>yk-1;则行进的下一点坐标为:xk=xk-1+1,yk=yk-1+1;

●xn>xk-1,且yn=yk-1;则行进的下一点坐标为:xk=xk-1+1,yk=yk-1;

●xn>xk-1,且yn

●xnyk-1;则行进的下一点坐标为:xk=xk-1-1,yk=yk-1+1;

●xn

●xn

●xn=xk-1,且yn>yk-1;则行进的下一点坐标为:xk=xk-1,yk=yk-1+1;

●xn=xk-1,且yn=yk-1;则行进的下一点坐标为:xk=xk-1,yk=yk-1;

●xn=xk-1,且yn

(3)在没有障碍物的情况下,通过上述方式能够一直到达目标点(xn,yn);如果其中存在障碍物,则切换到爬绕障碍模式。

3.根据权利要求2所述的基于相同开销网格的高效寻路的方法,其特征在于,爬绕障碍模式:一旦在行进过程中,遇到了障碍物,必须记录两个参数:其中一个是遇到障碍物时的行进方向;另一个是在爬绕障碍过程中的行进方向;这两个行进方向都以角度来表示;根据网格的分布,在中间网格向周围8个方向行进;

(1)一旦在行进方向遇到障碍物,先记录下α0值,其中α0为0°、45°、90°、135°、180°、

225°、270°、315°这8角度值之一;

(2)遇到1个障碍物,一般从2个方向绕过去,因此以方向α0为基准,顺时针旋转45°,判断这个方向行进是否存在障碍物,如果存在,则在原来的旋转方向上再旋转45°,直到行进方向可以通行为止,作为行进路线1;同时以方向α0为基准,顺时针旋转-45°,判断这个方向行进是否存在障碍物,如果存在,则在原来的旋转方向上再旋转45°,直到行进方向可以通行为止,作为行进路线2;

分别记录每次新的行进路线的旋转角度 其中i为从第一次遇到障碍物开始,改变行进方向的次数;

因此,最新的行进方向为:

(3)对于路线1,以新的行进方向作为α,以此为基准,先顺时针旋转90°,判断这个方向行进是否存在障碍物,如果存在,则在此方向上顺时针旋转-45°,直到行进方向可以通行为止;此时如果总的顺时针旋转角度小于等于0°,则以新的行进方向作为α,在此基础上,按照上述方式继续行进,同时记录经过的网格点;

如果总的顺时针旋转角度大于0°,则把新到达的网格作为拐点,并对其做拐点标志A1,同时记录经过的网格点;

(4)对于路线2,以新的行进方向作为α,以此为基准,顺时针旋转-90°,判断这个方向行进是否存在障碍物,如果存在,则在此方向上顺时针旋转45°,直到行进方向可以通行为止;

此时如果总的顺时针旋转角度大于等于0°,则以新的行进方向作为α,在此基础上,按照上述方式继续进行,同时记录经过的网格点;

如果总的顺时针旋转角度小于0°,则把新到达的网格作为拐点,并对其做拐点标志B1,同时记录经过的网格点;

(5)在路线1中,对于某个新的拐点,一旦其最新的行进方向α与初始的行进方向α0满足条件:

45°≤α0-α

则从该拐点开始,切换到自由寻路模式;计算该拐点与目标点之间的方向差,根据方向差确定行进方向的确定;

(6)在路线2中,对于某个新的拐点,一旦其最新行进方向α与初始的行进方向α0满足条件:

45°≤α-α0

则从该拐点开始,切换到自由寻路模式;计算该拐点与目标点之间的方向差,根据方向差确定行进方向的确定。

4.根据权利要求3所述的基于相同开销网格的高效寻路的方法,其特征在于,对于障碍物较多,或者障碍物形状复杂的情况,自由寻路模式与爬绕障碍模式将反复切换。

5.根据权利要求3所述的基于相同开销网格的高效寻路的方法,其特征在于,在行进路线上遇到新的障碍物,将增加一条行进线路,这样,在到达目标点前,将有多条行进线路处于寻路状态中;当其中某条线路首先到达目标点后,其它行进线路全部停止,以首先到达的线路作为待选线路。

6.根据权利要求3所述的基于相同开销网格的高效寻路的方法,其特征在于,某条线路在行进过程中遇到已经有线路经过的网格时,这条线路自动终止。

7.一种基于相同开销网格的高效寻路的系统,其特征在于,包括:初始化模块、寻路子系统、路径合并优化模块,初始化模块、寻路子系统、路径合并优化模块顺次相连;

初始化模块用于把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn);

寻路子系统用于寻找从起始点到目标点的线路,由目标点判断器、模式选择器、自由寻路模块、爬绕障碍模块四部分组成;

目标点判断器用于判断是否已经寻找到目标点;

模式选择器用于根据行进线路上是否有障碍物,判断启用哪种寻路模式;

自由寻路模块用于网格上没有障碍物时的寻路工作;

爬绕障碍模块用于网格上有障碍物时的寻路工作;

路径合并优化模块用于回溯线路长度的计算,并通过与待选线路中各段拐点间线路长度的比较,选出最短线路作为最后的行进线路;

路径合并优化模块,包括:

寻路结果接收单元、模式选择器、自由寻路模块、爬绕障碍模块、拐点判断器、线路长度计算器、线路长度比较器、起始点判断器、线路合并器组成;

寻路结果接收单元用于接收寻路子系统得到的从起始点到目标点的行进路线,以及其中所有的拐点;

模式选择器用于根据行进线路上是否有障碍物,从而判断是否启用哪种寻路模式;

自由寻路模块用于网格上没有障碍物时的寻路工作;

爬绕障碍模式用于网格上有障碍物时的寻路工作;

拐点判断器用于判断目前行进到的网格是否是拐点;

线路长度计算器用于计算回溯线路中相邻拐点间的长度,包括目标点与相邻拐点之间的长度,起始点与相邻拐点之间的长度;同时用于计算在待选线路上相邻拐点间的长度,包括目标点与相邻拐点之间的长度,起始点与相邻拐点之间的长度;

线路长度比较器用于比较在回溯线路和待选路线中,相应的相邻拐点间的长度,包括目标点与相邻拐点之间的长度,起始点与相邻拐点之间的长度;选择线路短的线路进行保存;

起始点判断器用于判断回溯线路的行进是否到了起始点;

线路合并器用于对线路长度比较器保存的所有短的线路进行合并,形成最后的最优线路。

说明书 :

一种基于相同开销网格的高效寻路的方法及系统

技术领域

[0001] 本发明属于互联网领域,具体而言,涉及一种基于相同开销网格的高效寻路的方法及系统。

背景技术

[0002] 目前,由于互联网传输速度的提升,大量虚拟现实服务、应用在互联网上逐步扩展,例如虚拟展馆、虚拟博物馆、虚拟旅游、3D游戏等,这些应用服务必须使用寻路系统,帮助移动单位绕过障碍物到达目的地。特别是在带有多人在线版本的虚拟现实应用中,例如3D游戏,其寻路系统需要消耗服务器大量的计算资源。
[0003] 因此,寻路算法的优化,可以大大提高服务器效率,并提高服务器单机负载能力,对虚拟现实应用服务的正常运行帮助非常大。
[0004] 目前的寻路算法,比较常见的是网格型寻路,即为,把需要寻路的现实地图分成若干大小相等的网格,每个网格根据本身数据,有着自己的开销,其中,开销指的是别的网格到这个网格的所耗费的行动力,具体行动力包括距离、权重等值,开销无限大即为不可能到达的区域。进行寻路的时候,寻路系统根据这些网格的信息,从起始点到目标点,算出一个有序的、总开销较小的路点(网格)集合,这便是最终的路径。
[0005] 一般情况下,每个网格的开销,可分为无限大、相同大小这两种情况,在一些有着地形制约的虚拟现实应用中,网格的开销还会因为不同的地形而不相同,比如山地更加难以到达,所以山地上的网格要比平地上的网格开销更大。
[0006] 针对于网格开销相同的情况,即为地图中,只有不可通过和可以通过两种网格,可以通过的网格,开销均相同。这种应用在虚拟展馆、虚拟博物馆、虚拟旅游中应用相当普遍。另外,这类虚拟现实应用为了让人有身临其境的感觉,在效率和精确度的平衡上,更偏向效率,因此对实时性的要求更高。
[0007] 目前主流的针对于相同开销的网格地图上的寻路算法,绝大部分都是A*算法以及A*算法的变种或者优化算法,比如:IDA*,Breadth-First-Search、Best-First-Search、Jump Point Search等算法,在这里把这类算法统称为A*类算法。
[0008] 这类方法,计算量是对当前节点的总移动开销的计算,以及许多并不是在前进方向上的“不必要节点”的判断上,其寻路思维可以理解为自然界中“水满自溢”:从起始点向目标点倒水(寻路),水总是流向低的地方,而目标点是最低的地方,所以如果有路可以到达,水肯定会流到目标点,如果遇到障碍,水会堆积在障碍处,直到淹没障碍,溢出来,然后水接着向更低的地方流淌。
[0009] 这种方法有个不足:如果当前区域中总开销值小的网格点很多,哪怕目标点就在眼前,也会先判断那些总移动开销值小的点,导致这种A*类算法稳定,但不高效,难以满足虚拟现实应用服务在互联网上对实施性的要求。

发明内容

[0010] 针对现有技术中存在的问题,本发明设计一种基于相同开销网格的高效寻路的方法与系统,其采用的技术方案为:
[0011] 一种基于相同开销网格的高效寻路的方法,具体步骤为:
[0012] 第一步:初始化步骤,把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn);
[0013] 第二步:寻路步骤,寻路步骤分为两种模式:
[0014] 自由寻路模式:对于自由寻路模式,表示在寻路过程中没有遇到障碍物的情况下所进行的寻路方式;爬绕障碍模式:表示在寻路过程中遇到障碍物的情况下所进行的寻路方式;
[0015] 对于障碍物较多,或者障碍物形状复杂的情况,自由寻路模式与爬绕障碍模式将反复切换。
[0016] 在行进路线上遇到新的障碍物,将增加一条行进线路,这样,在到达目标点前,将有多条行进线路处于寻路状态中;当其中某条线路首先到达目标点后,其它行进线路全部停止,以首先到达的线路作为待选线路。
[0017] 某条线路在行进过程中遇到已经有线路经过的网格时,这条线路自动终止。
[0018] 第三步:路径优化步骤。
[0019] (1)以待选线路为对象,从目标点开始进行线路的回溯;找到与目标相邻的拐点,以整个待选线路的目标点作为回溯的起始点,以相邻拐点作为目标点开始分阶段进行寻路操作;如果两者之间无障碍物,以自由寻路模式进行,如果有障碍物,以自由寻路模式与爬绕障碍模式反复切换的方式进行;
[0020] (2)到达相邻拐点后,确定目标点到相邻拐点的回溯线路,计算这一段回溯线路的长度d1,同时计算待选线路中,相邻拐点到目标点的路径长度d2;其中,一边相邻的两个网格,设置其距离为1个单位,对角相邻的两个网格,设置其距离为 个单位;
[0021] (3)比较目标点到相邻拐点的路径长度d1与相邻拐点到目标点的路径长度d2,选择两者之间距离短的作为这一段的优化后线路;
[0022] (4)再选择这个拐点作为回溯线路的起始点,选择在待选线路上回溯的下一个相邻拐点作为目标点,开始进行寻路操作;如果两者之间无障碍物,以自由寻路模式进行,如果有障碍物,以自由寻路模式与爬绕障碍模式反复切换的方式进行;然后计算这一段回溯线路的长度,并计算待选线路上这两个拐点的线路长度,比较后,选择两者之间距离短的作为这一段的优化后线路;
[0023] (5)反复进行,直到回溯的最后目标点是待选线路的起始点为止;
[0024] (6)选择每段优化后的线路,连接起来,作为最后选择的线路。
[0025] 本发明同时公开了一种基于相同开销网格的高效寻路的系统,包括:
[0026] 初始化模块、寻路子系统、路径合并优化模块三大部分,初始化模块、寻路子系统、路径合并优化模块顺次相连;
[0027] 初始化模块用于把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn);
[0028] 寻路子系统用于寻找从起始点到目标点的线路,由目标点判断器、模式选择器、自由寻路模块、爬绕障碍模块四部分组成;
[0029] 目标点判断器用于判断是否已经寻找到目标点;
[0030] 模式选择器用于根据行进线路上是否有障碍物,判断启用哪种寻路模式;
[0031] 自由寻路模块用于网格上没有障碍物时的寻路工作;
[0032] 爬绕障碍模式用于网格上有障碍物时的寻路工作;
[0033] 路径合并优化模块用于回溯线路长度的计算,并通过与待选线路中各段拐点间线路长度的比较,选出最短线路作为最后的行进线路。
[0034] 本发明的有益效果如下:
[0035] 用本发明加快寻路速度,降低服务器或客户端的开销,本发明的寻路效率是大于A*。
[0036] 本发明方法在查询步数上是优于A*的,对于查询中所用到的比较方法,本发明方法采用布尔值判断,只需要判断可否通行即可,而A*中除了判断可否通行,还需要对于每个节点的开销进行计算,因此在计算开销上本方法也比A*更加节省资源。
[0037] 在优化线路方面,本发明方法中优化部分的单位开销虽然与A*相同,但是由于A*需要计算周围8个开销后,比较选择开销最小的网格,而本发明方法只需要朝向最终目标行进,因此效率在大多数情况下相对较高,更能满足实时性的要求。

附图说明

[0038] 图1,为本发明方法的行进方向示意图。
[0039] 图2,为本发明方法的行进记录点状态图。
[0040] 图3,为本发明方法的行进方向记录图。
[0041] 图4,为本发明方法的线路1记录行进网格点和拐点线路图。
[0042] 图5,为本发明方法的线路1和线路2记录行进网格点和拐点线路图。
[0043] 图6,为本发明方法的线路1行进方向角度示意图。
[0044] 图7,为本发明方法的线路2行进方向角度示意图。
[0045] 图8,为本发明方法的优化路径示意图。
[0046] 图9,为本发明系统的结构框图。
[0047] 图10,为本发明系统的路径合并优化模块的结构框图。
[0048] 图11,本发明方法的行进记录点状态图。
[0049] 图12,本发明方法与现有技术应用效果对比图(例1)。
[0050] 图13,本发明方法与现有技术应用效果对比图(例2)。

具体实施方式

[0051] 以下结合附图和具体实施例对本发明作进一步详细说明。
[0052] 本实施例的基于相同开销网格的高效寻路的方法,包括:
[0053] 第一阶段:初始化阶段。
[0054] 把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn)。
[0055] 第二阶段:寻路阶段。
[0056] 寻路阶段分为2种模式:
[0057] 1、自由寻路模式。
[0058] 对于自由寻路模式,表示在寻路过程中没有遇到障碍物的情况下所进行的寻路方式。包括:
[0059] (1)判断起始点与目标点之间的方向差,根据方向差确定行进方向。
[0060] 根据起始点和目标点的坐标,通过以下计算规则,确定第一行进点的坐标(x1,y1):
[0061] ·xn>x0,且yn>y0。则行进的下一点坐标为:x1=x0+1,y1=y0+1;
[0062] ·xn>x0,且yn=y0。则行进的下一点坐标为:x1=x0+1,y1=y0;
[0063] ·xn>x0,且yn
[0064] ·xny0。则行进的下一点坐标为:x1=x0-1,y1=y0+1;
[0065] ·xn
[0066] ·xn
[0067] ·xn=x0,且yn>y0。则行进的下一点坐标为:x1=x0,y1=y0+1;
[0068] ·xn=x0,且yn>y0。则行进的下一点坐标为:x1=x0,y1=y0;
[0069] ·xn=x0,且yn>y0。则行进的下一点坐标为:x1=x0,y1=y0-1;
[0070] (2)确定第一行进点的坐标(x1,y1)后,结合目标点的坐标,利用上述同样的计算规则,得出第二行进点坐标(x2,y2),以此类推,中间行进点(xk,yk)的坐标为:
[0071] ·xn>xk-1,且yn>yk-1。则行进的下一点坐标为:xk=xk-1+1,yk=yk-1+1;
[0072] ·xn>xk-1,且yn=yk-1。则行进的下一点坐标为:xk=xk-1+1,yk=yk-1;
[0073] ·xn>xk-1,且yn
[0074] ·xnyk-1。则行进的下一点坐标为:xk=xk-1-1,yk=yk-1+1;
[0075] ·xn
[0076] ·xn
[0077] ·xn=xk-1,且yn>yk-1。则行进的下一点坐标为:xk=xk-1,yk=yk-1+1;
[0078] ·xn=xk-1,且yn=yk-1。则行进的下一点坐标为:xk=xk-1,yk=yk-1;
[0079] ·xn=xk-1,且yn
[0080] (3)在没有障碍物的情况下,通过上述方式能够一直到达目标点(xn,yn)。如果其中存在障碍物,则切换到爬绕障碍模式。
[0081] 2、爬绕障碍模式。
[0082] 表示在寻路过程中遇到障碍物的情况下所进行的寻路方式。
[0083] 一旦在行进过程中,遇到了障碍物,必须记录2个参数:其中一个是遇到障碍物时的行进方向;另一个是在爬绕障碍过程中的行进方向。这两个行进方向都以角度来表示。
[0084] 为了描述方便,根据网格的分布,只能向8个方向行进。如图1所示,在中间网格可以向周围8个方向行进。
[0085] (1)一旦在行进方向遇到障碍物,先记录下α0值,其中α0为0°、45°、90°、135°、180°、225°、270°、315°这8角度值之一。
[0086] (2)遇到1个障碍物,一般从2个方向绕过去,因此以方向α0为基准,顺时针旋转45°,判断这个方向行进是否存在障碍物,如果存在,则在原来的旋转方向上再旋转45°,直到行进方向可以通行为止,作为行进路线1;同时以方向α0为基准,顺时针旋转-45°,判断这个方向行进是否存在障碍物,如果存在,则在原来的旋转方向上再旋转45°,直到行进方向可以通行为止,作为行进路线2;
[0087] 分别记录每次新的行进路线的旋转角度 ,其中i为从第一次遇到障碍物开始,改变行进方向的次数。
[0088] 因此,最新的行进方向为:
[0089] 如图2、图3所示:
[0090] 最初行进方向α0=270°,同时顺时针旋转90°和-90°,新的行进方向变为:
[0091] 路线1的新行进方向
[0092] 路线2的新行进方向为
[0093] (3)对于路线1,以新的行进方向作为α,以此为基准,先顺时针旋转90°,判断这个方向行进是否存在障碍物,如果存在,则在此方向上顺时针旋转-45°,直到行进方向可以通行为止;此时如果总的顺时针旋转角度小于等于0°,则以新的行进方向作为α,在此基础上,按照上述方式继续行进,同时记录经过的网格点;
[0094] 如果总的顺时针旋转角度大于0°,则把新到达的网格作为拐点,并对其做拐点标志A1,同时记录经过的网格点。
[0095] 如图4,本实施例中线路1记录网格点和网格图。
[0096] (4)对于路线2,以新的行进方向作为α,以此为基准,顺时针旋转-90°,判断这个方向行进是否存在障碍物,如果存在,则在此方向上顺时针旋转45°,直到行进方向可以通行为止;此时如果总的顺时针旋转角度大于等于0°,则以新的行进方向作为α,在此基础上,按照上述方式继续进行,同时记录经过的网格点;
[0097] 如果总的顺时针旋转角度小于0°,则把新到达的网格作为拐点,并对其做拐点标志B1,同时记录经过的网格点。
[0098] 如图5,本实施例中线路2记录网格点和网格图。
[0099] (5)在路线1中,对于某个新的拐点,一旦其最新的行进方向α与初始的行进方向α0满足条件:
[0100] 45°≤α0-α
[0101] 则从该拐点开始,切换到自由寻路模式。计算该拐点与目标点之间的方向差,根据方向差确定行进方向的确定。
[0102] 如图6,本实施例中线路1新拐点记录网格点和网格图。
[0103] (6)在路线2中,对于某个新的拐点,一旦其最新行进方向α与初始的行进方向α0满足条件:
[0104] 45°≤α-α0
[0105] 则从该拐点开始,切换到自由寻路模式。计算该拐点与目标点之间的方向差,根据方向差确定行进方向的确定。
[0106] 如图7,本实施例中线路2新拐点记录网格点和网格图。
[0107] 对于障碍物较多,或者障碍物形状复杂的情况,自由寻路模式与爬绕障碍模式将反复切换。
[0108] 在行进路线上遇到新的障碍物,将增加一条行进线路,这样,在到达目标点前,将有多条行进线路处于寻路状态中。当其中某条线路首先到达目标点后,其它行进线路全部停止,以首先到达的线路作为待选线路。
[0109] 某条线路在行进过程中遇到已经有线路经过的网格时,这条线路自动终止。
[0110] 第三阶段:路径优化阶段。
[0111] (1)以待选线路为对象,从目标点开始进行线路的回溯。找到与目标相邻的拐点,以整个待选线路的目标点作为回溯的起始点,以拐点作为目标点开始分阶段进行寻路操作。如果两者之间无障碍物,以自由寻路模式进行,如果有障碍物,以自由寻路模式与爬绕障碍模式反复切换的方式进行。
[0112] 如图8所示,本实施例的优化路径起始点示意图。
[0113] (2)到达拐点后,确定目标点到相邻拐点的回溯线路,计算这一段回溯线路的长度d1,同时计算待选线路中,拐点到目标点的路径长度d2。其中,一边相邻的两个网格,设置其距离为1个单位,对角相邻的两个网格,设置其距离为 个单位。
[0114] (3)比较目标点到相邻拐点的路径长度d1与拐点到目标点的路径长度d2,选择两者之间距离短的作为这一段的优化后线路。
[0115] (4)再选择这个拐点作为回溯线路的起始点,选择在待选线路上回溯的相邻拐点作为目标点,开始进行寻路操作。如果两者之间无障碍物,以自由寻路模式进行,如果有障碍物,以自由寻路模式与爬绕障碍模式反复切换的方式进行。然后计算这一段回溯线路的长度,并计算待选线路上这两个拐点的线路长度,比较后,选择两者之间距离短的作为这一段的优化后线路。
[0116] (5)通过上述方法,反复进行,直到回溯的最后目标点是待选线路的起始点为止。
[0117] (6)选择每段优化后的线路,连接起来,作为最后选择的线路。
[0118] 一种基于相同开销网格的高效寻路的系统,如图9所示,包括:
[0119] 初始化模块、寻路子系统、路径合并优化模块三大部分。初始化模块、寻路子系统、路径合并优化模块顺次相连。
[0120] 初始化模块用于把需要寻路的现实地图分成若干大小相等的网格,以坐标的方式确定起始点位置(x0,y0)和目标点位置(xn,yn)。
[0121] 寻路子系统用于寻找从起始点到目标点的线路,由目标点判断器、模式选择器、自由寻路模块、爬绕障碍模块四部分组成。
[0122] 目标点判断器用于判断是否已经寻找到目标点。
[0123] 模式选择器用于根据行进线路上是否有障碍物,判断启用哪种寻路模式。
[0124] 自由寻路模块用于网格上没有障碍物时的寻路工作。
[0125] 爬绕障碍模式用于网格上有障碍物时的寻路工作。
[0126] 路径合并优化模块用于回溯线路长度的计算,并通过与待选线路中各段拐点间线路长度的比较,选出最短线路作为最后的行进线路。
[0127] 路径合并优化模块的结构,如图10所示,包括:
[0128] 寻路结果接收单元、模式选择器、自由寻路模块、爬绕障碍模块、拐点判断器、线路长度计算器、线路长度比较器、起始点判断器、线路合并器组成。
[0129] 寻路结果接收单元用于接收寻路子系统得到的从起始点到目标点的行进路线,以及其中所有的拐点。
[0130] 模式选择器用于根据行进线路上是否有障碍物,从而判断是否启用哪种寻路模式。
[0131] 自由寻路模块用于网格上没有障碍物时的寻路工作。
[0132] 爬绕障碍模式用于网格上有障碍物时的寻路工作。
[0133] 拐点判断器用于判断目前是否行进到的网格是拐点。
[0134] 线路长度计算器用于计算回溯线路中相邻拐点间的长度,包括目标点与相邻拐点之间的长度,起始点与相邻拐点之间的长度。同时用于计算在待选路线上相邻拐点间的长度,包括目标点与相邻拐点之间的长度,起始点与相邻拐点之间的长度。
[0135] 线路长度比较器用于比较在回溯线路和待选路线中,相应的相邻拐点间的长度,包括目标点与相邻拐点之间的长度,起始点与相邻拐点之间的长度。选择线路短的线路进行保存。
[0136] 起始点判断器用于判断回溯线路的行进是否到了起始点。
[0137] 线路合并器用于对线路长度比较器保存的所有短的线路进行合并,形成最后的最优线路。
[0138] 应用效果对比
[0139] 下面通过本发明方法与标准的A*寻路对比。图11中各种网格点的表示如图。
[0140] 例1:图12,本发明方法与现有技术应用效果对比图(例1)。
[0141] 这个例子中,A*算法经过了81步找到目标,而本发明方法经过了57步,包括起点到第一个和第二个拐点的优化,其中,A*的81步包括每个节点的计算F值工作,其中:
[0142] F:当前节点的总移动开销,等于G+H。
[0143] G:起点移动到网格上当前节点的移动开销。
[0144] H:当前的节点移动到终点的预计开销。
[0145] 而本方法只有13步优化过程需要计算开销值。
[0146] 例2:图13,本发明方法与现有技术应用效果对比图(例2)。
[0147] 这个例子中,A*算法经过了88步,得出无法到达目的地的结论,而本方法用了11步就得出无法到达目的地的结论。其中,A*算法88步都计算了节点的F值。而本方法由于没有能到达目的地,所以没有优化过程,没必要计算开销值。
[0148] 以上所公开的仅为本发明的一种具体实施例而已,当然不能以此来限定本发明的保护范围,依照本发明权利要求的技术实质所做的改变或等同变化,仍落入本发明权利要求书所涵盖的范围。