rvo动态避障算法
源码: snape (Jamie Snape) · GitHub
文档: RVO2 Library - Reciprocal Collision Avoidance for Real-Time Multi-Agent Simulation
网友翻译的中文版文档: 导航动态避让算法RVO的优化ORCA(Optimal Reciprocal Collision Avoidance)_u012740992的专栏-优快云博客_orca算法
本文就rvo中动态避障的算法源码做一个简单分析
代码取自:https://github.com/warmtrue/RVO2-Unity 大约是2021-8-10这个时间取的,
是一个例子, 将rvo整合到unity里
rvo详可见上文链接
这里做一个简单的说明
RVO算法简要说明

运动的物体A与物体B,假设物体A的位置为坐标原点,并将A变成质点,
则B相应的半径增大,新的圆B记录CircleNew
如下图示,以原点为顶点,原点到CircleNew做切线,组成一个锥形区域(图中划横线的)
计算A,B之间的相对速度Va,如果Va位于锥形区域以外,则A B将不会发生碰撞,反之,则会在未来某个时间发生碰撞

进一步计算,假设时间取为t,
物体A的半径记为rA, B的半径记录rB, 位置分别为PA ,PB
CircleNew圆记位于PB - PA 半径为rA + rB,
对整个坐标系进行缩放1/t,这样速度的单位就变成秒
原来的大圆,就缩放为圆心 (PB-PA)/t 半径为(rA+rB)/t,这个新圆被称为截止圆cutoff-circle
可以看出速度的选择范围如以下右图所示,除了灰色圆头锥型区域以外,白色区域都是可选的相对速度Vr=Va-Vb(Va Vb分别为A,B的速度)方向以及大小.如图中的蓝色速度与红色速度

如果Vr速度位于灰色的锥型区,就需要调整速度至空白区域,即给速度加个分量
如下图的蓝色小箭头,这种情况下的相对速度,就需要往旁边调整,锥形区域中的切边,被称为leg

根据速度的方向大小,也有可能往cutoff-circle处调整或另一条leg处调整
如下图,往cutoff-circle处调整相对速度Vr,

这个调整的速度分量我们称之为u,
物体A调整后的速度为 Va-new = Va + u,
令A和B各负责一半的速度调整,则Va-new = Va + 0.5 *u
这样即可保证A B在t时间内不会碰撞

选取了u为调整分量后,可以发现,Va-new的取值是一个半平面,
这个半平面的分割线是以垂直向量u为方向,过点Va+0.5*u的直线,在此处称之为line
在这个半平面的一侧速度都可以为备选速度

本文详细介绍了RVO(Reduced Velocity Obstacles)动态避障算法的原理,并通过源码分析了如何计算相对速度、调整速度以避免碰撞。文章探讨了线性规划方法用于在多智能体系统中选择合适的避障速度,确保速度方向接近最优目标速度的同时避免碰撞。此外,还讨论了代码中处理特殊情况的逻辑,如物体间已发生碰撞的情况。
最低0.47元/天 解锁文章
4786

被折叠的 条评论
为什么被折叠?



