rvo动态避障算法源码分析

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

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

在这个半平面的一侧速度都可以为备选速度

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值