RVO2(Reciprocal Velocity Obstacles 2)动态避障算法是一种用于多智能体系统中动态避障的高效算法。
原理:
RVO2 算法基于速度障碍物(Velocity Obstacles,VO)的概念。速度障碍物是指在速度空间中,智能体为了避免与其他物体发生碰撞而需要避开的速度区域。对于每个智能体,算法会根据其当前位置、速度以及周围其他智能体或障碍物的位置和速度,计算出各自的速度障碍物。
与传统 VO 算法不同的是,RVO2 采用了一种互反的思想,即不仅考虑自身避开其他物体,也考虑其他物体可能的运动,以更准确地预测潜在的碰撞,并计算出合适的避障速度。
计算步骤:
邻居检测:每个智能体首先需要确定其周围的邻居智能体或障碍物。通常使用距离阈值或视野范围来界定邻居,只考虑在一定范围内的其他物体对自身的影响,以减少计算量。
速度障碍物计算:对于每个邻居,智能体根据相对位置、速度以及两者的半径等信息,计算出对应的速度障碍物区域。这个区域表示了如果智能体保持当前速度,在未来某个时间区间内可能与邻居发生碰撞的速度集合。
互反速度障碍物计算:在 RVO2 中,会进一步考虑邻居的速度变化,计算互反速度障碍物(RVO)。这是通过对邻居的速度障碍物进行一定的变换和扩展得到的,使得智能体能够更保守地避开潜在的碰撞,即使邻居也在同时调整速度。
最佳避障速度选择:智能体在自身的可行速度空间内,寻找一个既能避开所有 RVO,又能尽量接近其期望速度(如目标方向上的速度)的最佳速度。通常使用一些优化方法,如线性规划或基于搜索的算法来找到这个最佳速度。
速度更新:智能体根据计算出的最佳避障速度更新自身的速度,然后按照新速度移动一段距离,接着重复上述步骤,不断根据周围环境的变化调整速度,以实现动态避障。
更详细的介绍,可以观看b站的几位博主的介绍:
RVO2(ORCA)动态避障算法精简版介绍_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1qa4y117Yo/?spm_id_from=333.337.search-card.all.click&vd_source=bf6b294c298d9c158ee178418c8d651a【算法扫盲计划】ORCA 避障算法_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV14N4y1Z7ue/?spm_id_from=333.788.recommend_more_video.0&vd_source=bf6b294c298d9c158ee178418c8d651aRVO2避让算法——ORCA论文讲解_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV13P411D7z2/?spm_id_from=333.788.recommend_more_video.1&vd_source=bf6b294c298d9c158ee178418c8d651a
核心概念:
Velocity Obstacle (VO):每个智能体会根据周围其他智能体的运动轨迹计算出一个速度障碍区域,该区域表示会导致碰撞的速度集合。若自身速度位于该区域内,则需调整速度。
Reciprocal Responsibility:避障责任是双向的,每个智能体承担一半的避障责任,避免出现"震荡"问题。
ORCA Constraints (Optimal Reciprocal Collision Avoidance):通过线性规划求解一组速度约束条件,找到最优无碰撞速度。
特点:
高效性:通过只考虑局部邻居和采用相对简单的计算模型,RVO2 能够在实时性要求较高的场景中快速计算出避障策略,适用于处理多个智能体同时运动的复杂情况。
准确性:互反速度障碍物的概念使得算法能够更准确地考虑到多智能体系统中各个个体之间的相互影响,相比传统的避障算法,能够更有效地避免碰撞,尤其是在智能体密度较高的场景中表现出色。
灵活性:RVO2 算法可以很容易地与其他控制策略或运动规划算法相结合,以适应不同的应用场景和任务需求。例如,可以与路径规划算法结合,在为智能体规划好全局路径的基础上,利用 RVO2 进行局部的动态避障,确保智能体能够安全地沿着路径到达目标。
源码分析:
1.核心类:
1.Agent:
2.Simulator类:
3.Obstacle类:
2.辅助类:
1.KdTree类:
2.RVOMath、Vector2、Line类:
未完待续。。。