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

ORCA(动态避障算法 A物体沿着向量v1v2移动,刚好能B擦肩而过,不会发生碰撞;若V1V2的夹角再小一点的话就一定会发生碰撞。A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。红线画出来的锥形区域就是A相对于B的。 阅读详情

前言

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

本算法适用场景

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

优缺点

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

一、A*寻路

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

二、势场寻路

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

三、避障寻路(RVO算法)

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

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

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

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

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

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

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

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

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

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

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

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

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

五、其他

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

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

      

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

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

rvo动态避障算法源码分析 rvo动态避障算法 源码: https://github.com/snape 本文就rvo中动态避障算法源码做一个简单分析 代码取自:https://github.com/warmtrue/RVO2-Unity大约是2021-8-10这个时间取的, 是一个例子, 将rvo整合.. 阅读详情

相关推荐

基于NavMesh寻路、漏斗寻路、RVO动态避障自创的服务器大规模寻路+动态避障算法的实现

一、描述 TW项目是一个拥有较广阔野外空间的SLG游戏,玩家的军队方阵可以在野外进行长距离行军、短距离自由行军、占领要塞、驻扎、形成战斗阵型战斗等行为。其中,野外的山脉、河流等会产生静态阻挡;而由玩家迁城、把守要塞、驻扎等行为,会在野外地图上产生动态阻挡。 每个服务器活跃军队方阵目标5万个,每天产生的长距离寻路请求可能达几十万或者百万个,并且都需要在服务器端计算,用常规的A*寻路、navmesh寻路、ROV避障算法计算量巨大,影响服务器效能。所以我们可以采用两种解决方案:第一...

6327

基于Simulink的动态避障算法

通过上述步骤,设计并实现了基于 Simulink 的动态避障系统。该系统能够根据传感器数据实时感知周围环境,检测移动的障碍物,并通过控制器调整车辆的行驶方向,确保其能够安全避障。通过虚拟景仿真、硬件在环测试实车测试,验证了系统的避障性能、路径跟随精度实时性能,并通过参数优化进一步提升了系统的性能。

MHD0815的博客 1222

基于动态窗口法(DWA)的局部避障算法研究及MATALB的实现

基于动态窗口法(DWA)的局部避障算法的概念及在Matlab上的应用

m0_46427461的博客 1万+

机器人局部动态避障算法dwa解析

简介 dwa算法全称叫动态窗口法(dynamic window approach),其算法过程主要分为仿真获取机器人的运动轨迹、对轨迹进行评价选择最优轨迹两个主要过程,动态窗口表达的是仿真的运动轨迹数量有限,主要是因为机器人在较短的控制周期内只能达到一定的速度。 一、机器人如何仿真获取运动轨迹 1、获取机器人速度样本 根据机器人当前速度以及运动特性,确定机器人可达的运动速度范围。由于运动的最终目的是到达目标点,因此,在到达目标点附近时,需要降低机器人运动速度,也就是进一步限制机器人的速度范围,以保证机器人能

m0_37931718的博客 5861

VO避障(动态速度避障

动态环境下的运动规划始终是一个难题,这是因为它需要在状态空间下进行规划,也即需要同时解决路径规划速度规划两个问题。其中,路径规划是一个运动学问题,旨在计算出一条从出发点到目标点的无碰撞路径。而速度规划由于需要考虑机器人的动态执行器约束,天然地是一个动态规划问题。事实表明,在有限速度多障碍条件下对平面内一点的动态运动规划是很困难的,这其中不仅包括计算的难度,还包括由于不确定的环境特性导致的解的不确定性,比如,在时间 t0的可行解在之后的某个时间可能会变得不可行。

zhiai315的博客 1万+

【路径规划】基于matlab A_star算法机器人栅格地图最短路径规划【含Matlab源码 496期】

A_star算法机器人栅格地图最短路径规划 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 2587

【动态规划】基于A星算法实现机器人动态避障附matlab代码

本文旨在针对部分未知环境中的移动机器人动态避障及相关问题作研究,使机器人在行走过程中能够应对复杂的动态环境,顺利无碰的到达目标点。动态避障是机器人技术领域的一个研究重点,是机器人走向智能化的关键。同时机器人技术也为信号检测与处理、多传感器信息融合、运动控制等技术提供了实验平台。

matlab_dingdang的博客 814

2024年Go最新机器人避障系统基础_避障算法(2),2024年最新看完全都会了

加速度计是一种用来测量加速力的传感器,加速力是在物体在加速过程中作用在物体上的力,例如地球引力,也就是重力;我们可以通过测量由重力引起的加速度,从而计算出设备相对于水平面的倾斜角度。在三维立体空间中,利用重力传感器的关系,可以分析得到如图3.5所示的三个姿态角p(pitch)、p(roll)、日(yaw):X轴相对于地面的角度是p、是Y轴相对于地面的角度是φ、Z轴相对于重力的夹角是0。

2401_84931310的博客 1250

关于VO、RVO、ORCA的个人理解

VO,RVO,ORCA的个人理解

zzzzzzz12345699的博客 7098

「 运动控制 」”动态窗口避障算法“讲解

动态窗口避障算法的思想是对可行空间的速度进行采样,并对每一个速度样本进行轨迹预测,然后利用评价函数来对每一条轨迹进行评分,并取最优的速度样本发送给执行器执行。 动态窗口避障算法是一种局部规划算法,它直接在速度空间寻找合适的控制命令 c=(w,v)发送给电机执行,对于任一采样速度(w,v),其对应的预期轨迹都是一小段弧线。对于每一个可行的速度样本,都需要对其可能的碰撞进行推测并进行评分。为了减少采...

Robot_Starscream的博客 5021

大象机器人myAgv的slam算法学习以及动态避障下篇

为了解决TEBDWA算法的局限性,实现更加精细高效的动态避障路径规划,有人提出了TEB-DWA算法,TEB-DWA算法的核心思想是通过将TEB算法DWA算法的优点结合起来,设计出一种更加精细高效的动态避障算法。具体来说,TEB-DWA算法采用TEB算法的弹性带方法,实现路径规划优化,同时采用DWA算法的速度窗口方法,实现速度角速度的搜索评估,从而实现机器人的动态避障路径规划。使用下来的整体感受还是不错的,连接显示器就能够使用,基于树莓派也有很多的社区能够提供帮助,有许多优秀的案例。

m0_71627844的博客 2210

ROS激光雷达动态避障算法优化(C++实战)

本文深入探讨了ROS激光雷达动态避障算法的C++实战优化。针对动态环境的核心挑战,文章系统性地介绍了从激光数据预处理(降噪、瘦身)、动态障碍物检测与跟踪,到基于动态窗口法(DWA)的智能决策与调优的全流程。重点分享了如何将障碍物速度预测融入DWA打分函数,以实现更安全、流畅的避障,并提供了工程架构、性能优化及真机调试的实用建议。

weixin_29192141的博客 915

路径规划:避障算法_(3).避障算法的分类与比较

潜力人工法:适用于静态环境中的简单复杂避障任务,但在动态环境中容易失效,不推荐使用。路径图法:适用于静态环境中的全局路径规划,能够找到全局最优路径,但在动态环境中需要频繁重新构建路径图,计算复杂度较高。超声波避障算法:适用于低成本机器人近距离避障任务,但在动态环境中表现一般,容易受到环境干扰。激光雷达避障算法:适用于需要高精度避障的机器人,特别是在动态环境中的复杂避障任务,但成本较高,计算量大。基于视觉的避障算法

zhubeibei168的博客 1233

【路径规划】基于matlab DWA动态避障路径规划【含Matlab源码 2356期】

DWA动态避障路径规划 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 3361

Matlab实现的动态避障仿真算法探析

在现代自动化机器人技术中,动态避障算法扮演着至关重要的角色。随着技术的不断进步,动态避障已经成为确保机器人自动化系统在复杂环境中安全、高效运作的关键技术。本章节将介绍动态避障算法的基础知识,以及其在现代工业与服务机器人中的重要应用。动态避障算法是一种使机器人能够在动态环境中识别障碍物,并实时规划避障路径的方法。该算法不仅需要考虑静态环境中的障碍物,还要能够处理移动障碍物的出现,确保机器人在未知的、变动的环境中的安全移动。

weixin_33628677的博客 914

unity学习:寻路算法(AStar算法)与简单AI(估价算法

项目地址:https://github.com/kotomineshiki/AIFindPath 视频地址: 两个核心难点 Astar算法 先是自己实现了一遍,后来找到了效率更高的插件就重构了 决策树...

kotomineshiki的博客 2587

大规模单位实时游戏寻路的构建

大规模单位实时游戏寻路的构建 转自:https://www.cnblogs.com/xiaohutu/p/10504586.html 某个神秘的时间,我接到了一项神秘的任务,最核心的难度是要求实现:引擎是Unity3D,在手机端可以流畅运行为前提,在一个实时战斗的过程里,地图有地形(而且是会被动态改变的地形),数百个单位独立AI寻路、要实现忽略掉部分单位的筛选寻路动态避障、满足帧同步需求并...

折戟 700

地图信息,障碍判断以及寻路算法(A星算法,B星算法蚁群算法等)

A星不会像广度优先遍历那样探索所有的步骤,而是选择每一步中最优的方块。 这样就可以大大提高效率了。

任鸟飞2217777779的博客 6077
上一篇: ROK(万国觉醒)服务器卡顿解决方案
下一篇: Linux系统下基于IO多路复用的大规模可靠UDP服务器的实现(一)
唐鹏V
博客等级 码龄21年 41粉丝 18原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐鹏V

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值