当前位置:   article > 正文

基于A*和势场寻路的快速小队伍动态势场避障寻路_动态避障算法

动态避障算法

前言

先把本算法的适用场景和优缺点写在前面,需要的可以继续看,不适用的就可以直接略过了。然后在循序渐进介绍本算法。演示效果在最后。

本算法适用场景

  • 每次寻路以小队伍为单位(几个至几十个队员)
  • 队员之间(互斥)需要动态避障

优缺点

  • 运算速度快,效率高
  • 队伍行进效果好,逼真度高
  • 由于结合了A*算法和势场寻路算法,所以这两者的优化、特例化算法基本都可以结合到本算法中。
  • 缺点是适用范围窄,在特殊需求下需要另写算法

一、A*寻路

A*寻路算法是基于格子的启发式探索寻路,优点是准确可靠、适用性强,缺点是长距离频繁寻路时效率较低。为解决这些缺点,还出现了JPS寻路等优化的算法。

二、势场寻路

势场寻路(也叫流场)是在即时战略等类型的游戏中经常采用的,具有耗时短、效率高等优点。基本原理为阻挡、敌方防御塔等会对队员产生斥力,目标点会产生吸引力,于是在整个地图的每个格子上会计算出方向(效果如下图),那么一个队员下一步要往哪里走就显而易见了。

三、避障寻路(RVO算法)

RVO(Reciprocal Velocity Obstacles)是动态避障算法,简单的说就是让在一个区域内运动的队员相互之间不会碰撞。基本原理是把任意两个队员的运动的速度和方向、所占体积作为相对值来进行运算,用以判断在未来的某个时刻是否会碰撞(计算原理图如下)。

该算法的优点是避障的准确度高,每个队员都可以有自己的行为。缺点是运算量较大,大队伍运算时效率低。

四、快速小队伍动态势场避障寻路算法介绍

本算法结合上述A*和势场寻路的算法和特点,实现快速动态避障寻路。算法基本步骤介绍如下:

第一步:确定队员的宽度(一般是直径、或者宽度)和通常情况下队伍的整体宽度(包括队员数、松散程度、阵型等因素)

第二步:确定格子宽度,一般一个格子可以最多容纳2或者4个队员,但是在通常情况下只有一个队员,这样队伍看起来比较自然。

第三步:准备好地图数据文件,包括阻挡等信息。

第四步:当某个队伍需要寻路时,先用A*寻路,计算出最优路径。

第五步:以队伍半径,动态计算出路径的沿途势场,作为一个势场层。如果有多个队伍寻路,则形成多个层。如果有队员在该势场层所有格子之外,则判断该队员所在格子的邻近格子的势场,然后计算该格子的势场方向,然后将该格子加入势场层。势场层可以进行四叉树、AABB树优化。

第六步:队伍开始移动,逐一计算队员运动方向等,优先计算队伍前面的和距离阻挡近的,然后是中间的。判断队员所在格子的最优方向是否有其他队员,如果没有就走向这个格子;如果有则走次优方向;如果仍然没有则停止移动。

第七步:遇到路径变狭窄,则优先让队员挤进相同格子,如果挤不进去,则停止;如果路径变宽则让队员松散开。此时可能会变速(往里挤的速度会慢一点,松散开的速度会快一些)。

第八步:两个队伍相遇,如果队伍是松散状态,每个格子可以容纳多余1个的队员,则可以相交而过。如果格子里的兵满了,则会发生拥挤。此时应该判断那个一队伍有优先通过权力(先到先行、骑兵大于步兵等)。

第九步:突然出现障碍物,则需要从第四步重新计算。

五、其他

如果队员体积不同、速度不同等其他条件,需要按照具体需求改进算法。实测百人左右的队伍基本没什么压力。

第五步形成势场层后的效果图如下:

      

 整体效果视频如下(感谢网友云中漫步提供思路和视频):

整体效果视频,提取码ybk7​​​​​​​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/844882
推荐阅读
相关标签
  

闽ICP备14008679号