来源于文档的主要内容:

ORCA主页

文档来源

本文重新整理优化版地址(推荐)

本文要解决的问题:
n ( n > 0 ) n(n>0) n(n>0)个个体导航向目标点移动过程中,对于其它个体或者障碍物进行动态避让,并寻找最佳路径向目标点移动。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

和A星寻路算法有什么异同?
相对而言,
ORCA是局部导航,导航目标是在个体自己的周围,让个体自身避开与自己接近的其它个体目标和障碍,ORCA只能感知到靠近自身周围的情况,没有全局环境的信息,所以它只管导航时不与自己周围其它个体目标和障碍避免碰撞,或者说重叠在一起,却不能为自身起点和目标点之间找到最短路径,这刚好是A*星寻路解决的问题。
A星寻路算法刚好和ORCA形成互补:
A星是全局寻路算法,会根据配置最大可能的保证找到导航个体自身起点到目标点的最短路径,算法的全局信息中有着整个环境的障碍信息。但A星没有感知所有导航个体的具体状态和周围的“交通状况”信息,所以A星算法不处理可能会碰撞问题,因此多个导航个体之间可能会重叠在一起。这刚好是ORCA解决的问题。
所以可以把它们结合起来,形成互补,Unity有个插件A星 Pathfinding Project Pro就是将两者结合起来了,形成动态避让的全局导航。

我们在本文中讨论的问题正式定义如下:
在一个共享的空间环境下有 n ( n > 0 ) n(n>0) n(n>0)个机器人,为了简单起见,我们假设机器人都是圆形,空间环境则为2D空间。(这样我们在此中更容易提出定义和算法,也能适用于多维)。每个机器人 A A A都有一个当前位置 p A p_{A} pA(圆盘的中心点)、当前速度 v A v_{A} vA和半径 r A r_{A} rA,这些参数都是机器人的外在状态,它们可以被其他机器人观察到。此外,当每个机器人往目标点方向的路上没有其它机器人阻挡时,都有最大速度 v A m a x v_{A}^{max} vAmax 和期望速度 v A p r e f v_{A}^{pref} vApref v A p r e f v_{A}^{pref} vApref直接指向目标点,它的长度等于 v A m a x v_{A}^{max} vAmax),但这些事机器人的内部参数,无法被其它机器人观察到。
解决方案:
我们提出了一个严格的方案,假设有 n n n个个体,他们之间使用相同的避免碰撞策略,提供充足条件下,他们相互在 t t t时间内避免碰撞的方案。
这个方案基于速度,这意味着每个机器人都会考虑到其它机器人的速度避免与他们碰撞,然后从他自己的可选速度空间区域中选择自己的新速度,其它被标为"禁止"的区域则被其它机器人占据。对于每个其它机器人,当前机器人都有一个半平面(速度空间)的可选速度,用来与其它机器人避免碰撞。那么当前机器人可以从这些可选的多个平面的交集中选择一个最佳的速度,这个可以通过线性划分有效的完成。线性划分在机器人密集的环境下可能不可行,在这种情况下,我们通过三维空间来选择“尽可能安全”的速度。
我们要做的是:
第一,为每个机器人A同步独立地为它们自己选择一个新的速度 v A n e w v_{A}^{new} vAnew,并且这个新速度 v A n e w v_{A}^{new} vAnew 能够保证在预定的t时间内,持续的与别的机器人无碰撞移动。
第二,每个机器人选择新速度 v A n e w v_{A}^{new} vAnew时,都要尽可能的接近它们自己的期望速度 v A p r e f v_{A}^{pref} vApref
第三,每个机器人之间不允许进行沟通,所以它们只能够观察得到别的机器人的当前位置和当前速度。然而,每个机器人可以假设其它机器人也是使用和自己一样的策略来选择新的速度 v A n e w v_{A}^{new} vAnew
这个问题无法使用中心协调的方式解决,因为每个机器人的期望速度只有它们自己知道。
第四节,我们描述为机器人选择时间t内避免碰撞的新速度准备了足够多的条件。
第五节,展示了如何使用此原理循环多个机器人导航。

**所以,整篇文章主要部分要解释的动态避让效果也就如下图所示:
也就是要达成如下效果图这般动态避让导航的样子,走位四不四很风骚? ^ ^。
在这里插入图片描述
图解:
以红色圆为 A A A,其它颜色的圆各叫 B C D E F BCDEF BCDEF等。
图中各种颜色的直线就是上述的平面的分割线, A A A对于 B B B的半平面有效的一侧下文称为 O R C A A ∣ B τ ORCA_{A|B}^{τ} ORCAABτ。白色区域是 A A A避开多个其它颜色圆的多个半平面的交集区域,也就是自己的可选速度范围,下文称为 O R C A A τ ORCA_{A}^{τ} ORCAAτ(白色区域图中)。左边黑色点位置是目的地点, A A A的期望速度 v A p r e f {\bf v}_{A}^{pref} vApref(图中灰色线段)总是指向它,毕竟那是自己要去的地方嘛。而 A A A的当前速度 v A {\bf v}_{A}^{} vA(图中黑色线段)的下一步选择新速度 v A n e w {\bf v}_{A}^{new} vAnew(图中的黑色线段的下一步状态)时也想指向它,却无奈被限制在白色区域里,但它不死心,所以它每在下一步选择新速度 v A n e w {\bf v}_{A}^{new} vAnew都会尽可能的向灰色速度靠近,直到到达目的地。由此,风骚走位图形成

4.1准备
有两个机器人 A A A B B B,障碍速度集合为 V O A ∣ B t VO_{A|B}^{t} VOABt(解释为:A在此集合中选择此速度时,将在时间 t t t内与 B B B发生碰撞)。
D D D为以 p p p为圆心, r r r为半径的圆:

D D D( p p p, r r r) = { q q q| ||q−p|| < $ r r r}

那么:

V O A ∣ B t VO_{A|B}^{t} VOABt = { v v v|∃ t t t ∈ \in [ 0 0 0, τ τ τ] :: t v tv tv ∈ \in D D D( p B p_{B} pB p A p_{A} pA, r A r_{A} rA + r B r_{B} rB)}

在这里插入图片描述

有:
(a)两个机器人A和B
(b)这里是速度空间坐标系,障碍速度集合 V O A ∣ B t VO_{A|B}^{t} VOABt 几何解释为(灰色区域)形成一个截头的圆锥形,顶点位于原点o(速度空间),它的两边与 r A r_{A} rA + r B r_{B} rB相切,两边居中为 p B p_{B} pB p A p_{A} pA方向上。圆锥的半径由t决定,这里的障碍速度t=2。
(c)避免碰撞向量集合 C A A ∣ B t CA_{A|B}^{t} CAABt :避免发生碰撞情况下, B B B的选择速度集合为 V B V_{B} VB(深灰色),这里为坐标系的第四象限,也就是说明 B B B的速度集合方向为向右下,那么给 A A A的选择的速度集合 C A A ∣ B t CA_{A|B}^{t} CAABt也就是 V O A ∣ B t VO_{A|B}^{t} VOABtMinkowski sum的补集。
(PS : 临阵磨枪,脑补一下)Minkowski sum的大概定义如下:
X X X Y Y Y表示为X和Y的Minkowski sum,绿色为 X X X蓝色为 Y Y Y,红色为和:
X X X Y Y Y = { x x x+ y y y| x x x ∈ \in X X X, y y y ∈ \in Y Y Y},
在这里插入图片描述

障碍速度的几何解释如(b)所示,记住: C A A ∣ B t CA_{A|B}^{t} CAABt C A B ∣ A t CA_{B|A}^{t} CABAt相对于原点是对称的。
v A v_{A} vA v B v_{B} vB分别为机器人 A A A B B B的当前速度,根据障碍速度的定义意味着,如果 v A v_{A} vA v B v_{B} vB ∈ \in V O A ∣ B t VO_{A|B}^{t} VOABt,那么 A A A B B B持续以当前速度移动将在时间 t t t 内碰撞。相反,如果 v A v_{A} vA v B v_{B} vB ∉ \notin / V O A ∣ B t VO_{A|B}^{t} VOABt那么 A A A B B B t t t 时间内不会碰撞。

那么对应任何 v B v_{B} vB,如果 v B v_{B} vB ∈ \in V B V_{B} VB v A v_{A} vA ∉ \notin / V O A ∣ B t VO_{A|B}^{t} VOABt V B V_{B} VB,那么 A A A B B B以当前速度在 t t t时间内是保证不会碰撞的,从而推导出避免碰撞速度集合 C A A ∣ B t CA_{A|B}^{t} CAABt( V B V_{B} VB),也就是在 B B B选择 v B v_{B} vB速度后 A A A能够选择的速度集合。见图©:

C A A ∣ B t CA_{A|B}^{t} CAABt( V B V_{B} VB) = { v v v| v v v ∉ \notin / V O A ∣ B t VO_{A|B}^{t} VOABt V B V_{B} VB} (图c公式)

对于 A A A B B B的速度集合 V A V_{A} VA V B V_{B} VB,如果 V A V_{A} VA ⊆ \subseteq C A A ∣ B t CA_{A|B}^{t} CAABt( V B V_{B} VB) 和 V B V_{B} VB ⊆ \subseteq C A B ∣ A t CA_{B|A}^{t} CABAt( V A V_{A} VA) ,那么, A A A B B B相互不碰撞。
如果 V A V_{A} VA= C A A ∣ B t CA_{A|B}^{t} CAABt( V B V_{B} VB) 和 V B V_{B} VB= C A B ∣ A t CA_{B|A}^{t} CABAt( V A V_{A} VA) ,那么,我们称 V A V_{A} VA V B V_{B} VB互为最大化。

4.2
因为 A A A B B B是相对独立的机器人,所以它们应该在没有沟通的情况下,推断出自己被允许的速度范围,这里有无数对的 V A V_{A} VA V B V_{B} VB在遵循着这些要求。但在这些成对的 V A V_{A} VA V B V_{B} VB中,在他们互为最大化的可选的避免碰撞速度集合中选择一对接近最优的速度,称 A A A的为 v A o p t v_{A}^{opt} vAopt B B B的为 v B o p t v_{B}^{opt} vBopt。( opt : optimization)
我们称以上这些避免碰撞可选范围 A A A B B B相互最大化的速度集合 A A A的为 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt B B B的为 O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt

O R C A ORCA ORCA的具体描述
定义 1 (Optimal Reciprocal Collision Avoidance)
机器人A的 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt,机器人B的为 O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt的定义是,两边A和B避免碰撞,并且他们可选新速度范围互为最大化,以下用等式描述:

C A A ∣ B t CA_{A|B}^{t} CAABt( O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt) = O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt C A B ∣ A t CA_{B|A}^{t} CABAt( O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt) = O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt

即以上等式解释为在时间 t t t内避免与机器人 B B B O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt碰撞的向量区域,就是的机器人A的 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt,反则反之。
那么有,

| O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt ⋂ \bigcap D D D( v A o p t v_{A}^{opt} vAopt, r r r)| = | O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt ⋂ \bigcap D D D( v B o p t v_{B}^{opt} vBopt, r r r)| ≥ \geq min(| V A V_{A} VA, D D D( v A o p t v_{A}^{opt} vAopt, r r r)|,| V B V_{B} VB, D D D( v B o p t v_{B}^{opt} vBopt, r r r)|)

这意味着 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt包含着更多速度接近 v A o p t v_{A}^{opt} vAopt v B o p t v_{B}^{opt} vBopt,超过任何其它成对的速度的互相避免碰撞速度集合。它们允许选择的速度分布是均匀的,接近最优速度的速度集合数量 A A A B B B的相等。

我们构建 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt O R C A B ∣ A t ORCA_{B|A}^{t} ORCABAt的几何图如下

假设 A A A B B B最优速度分别为 v A o p t v_{A}^{opt} vAopt v B o p t v_{B}^{opt} vBopt,假设 A A A B B B一定会碰撞上,即 v A o p t v_{A}^{opt} vAopt- v B o p t v_{B}^{opt} vBopt ∈ \in V O A ∣ B t VO_{A|B}^{t} VOABt
u u u是以 v A o p t v_{A}^{opt} vAopt- v B o p t v_{B}^{opt} vBopt 为起点,指向和到以 V O A ∣ B t VO_{A|B}^{t} VOABt边界最近的点为终点的向量:
u u u = ( a r g m i n argmin argmin ∣ ∣ || v v v−( v A o p t v_{A}^{opt} vAopt v A o p t v_{A}^{opt} vAopt) ∣ ∣ || )−( v A o p t v_{A}^{opt} vAopt v A o p t v_{A}^{opt} vAopt)), v v v ∈ \in ∂ V O A ∣ B t ∂ VO_{A|B}^{t} VOABt
∂ 偏 导 符 号 ∂偏导符号

设n是 ∂ V O A ∣ B t ∂VO_{A|B}^{t} VOABt范围内向,以( v A o p t v_{A}^{opt} vAopt v B o p t v_{B}^{opt} vBopt)+ u u u为起点向外的法线,那么 u u u是对于 A A A B B B在时间 t t t内避免碰撞速度需要改变最小的值。为了避免碰撞,机器人以公平的方式"分担责任",机器应该适配自己的速度为 1 / 2 u 1/2u 1/2u
(我们引入这些 v o p t vopt vopt(优化速度)来概括 O R C A ORCA ORCA的定义。实际上,这些 v o p t vopt vopt等于当前的速度,机器人必须偏离当前轨道来避免可能的碰撞,更多选择在5.2节讨论)

如图:
在这里插入图片描述
F i g . 2 Fig.2 Fig.2
A A A O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt跟B避免碰撞的向量集合是一个半平面,被垂直于向量 u u u且经过点 v A o p t v_{A}^{opt} vAopt+ 1 / 2 u 1/2u 1/2u的线分割。
u u u是以 v A o p t v_{A}^{opt} vAopt- v B o p t v_{B}^{opt} vBopt 为起点,指向和到以 V O A ∣ B t VO_{A|B}^{t} VOABt边界最近的点为终点的向量。
n n n V O A ∣ B t VO_{A|B}^{t} VOABt范围内向,以( v A o p t v_{A}^{opt} vAopt- v B o p t v_{B}^{opt} vBopt)+ u u u为起点方向向外的法线。

O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt允许A的避免碰撞速度集合是以 v A o p t v_{A}^{opt} vAopt+ 1 / 2 u 1/2u 1/2u为起点,以 n n n为方向的半平面; B B B的允许速度集合同理。
O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt = { v v v ∣ | ( v v v−( v A o p t v_{A}^{opt} vAopt + 1 / 2 u 1/2u 1/2u))· n n n 0 0 0}.
以上等式在可能不会碰撞时也有效,即 v A o p t v_{A}^{opt} vAopt v B o p t v_{B}^{opt} vBopt ∉ \notin / V O A ∣ B t VO_{A|B}^{t} VOABt时。
以上说明每个机器人之间不通过沟通就能观察到彼此之间的大概位置、半径和速度。
这种情况下两个机器人个承担一半保持无碰撞的责任。

5 n个个体避免碰撞
在本节中,我们将展示如何应用上面定义的ORCA原理来实现多个移动机器人之间的n体碰撞避免,并讨论如何在这个框架中加入静态障碍。

10. Mermaid 流程图

感知其它机器人的位置和速度
计算机器人彼此之间的ORCA
使用线性划分选择新的速度
将速度应用于更新机器人位置

F i g . 3 Fig.3 Fig.3
每个机器人的感知和反应循环示意图

5.1 5.1 5.1基本方案
每个机器人 A A A在时间 t t t内执行连续循环的感知和做反应。 在每次循环中,机器人需要知道自己的和其它机器人的半径、当前位置和当前速度,基于这些信息,机器人 A A A推断出自己的对于机器人 B B B O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt半平面。在这个半平面内允许的速度范围内, A A A又和其它机器人产生半平面,如此之间不断影响,我们定义此为 O R C A A t ORCA_{A}^{t} ORCAAt,(见 F i g . 4 Fig.4 Fig.4)
O R C A A t ORCA_{A}^{t} ORCAAt = D D D ( ( ( 0 0 0 , , , v A m a x v_{A}^{max} vAmax ) ) ) ⋂ \bigcap O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt 其中 ( ( ( B B B ≠ \neq = A A A ) ) ) (7)
请注意,此定义还包括机器人A的最大速度限制。
接下来,避免碰撞允许速度范围内所有的速度,机器人选择一个最接近它的期望速度 v A p r e f v_{A}^{pref} vApref的新速度 v A n e w v_{A}^{new} vAnew
v A n e w v_{A}^{new} vAnew= a r g m i n ∣ ∣ v − argmin||v- argminv v A p r e f v_{A}^{pref} vApref ∣ ∣ , v ∈ ||,v∈ v O R C A A t ORCA_{A}^{t} ORCAAt(8)
我们将在下面展示如何计算这个实际应用的新速度。 更新机器人
达到新的位置;
p A n e w p_{A}^{new} pAnew= p A p_{A}^{} pA + v A n e w v_{A}^{new} vAnew ∆ t ∆t t , (9)
所有的感知-反应都是(7)(8)(9)这个循环过程。
上述过程中的关键步骤是计算新的速度 v A n e w v_{A}^{new} vAnew,也就是(7)和(8)的定义。这可以使我们有效的使用线性规划算法完成,如 O R C A A t ORCA_{A}^{t} ORCAAt是受多个机器人影响产生多个半平面共同内由线性规划约束引起的交集区域,见下图 F i g . 4 Fig.4 Fig.4。最优的解就是此区域速度集合中的某个速度到期望速度 v A p r e f v_{A}^{pref} vApref的距离,甚至这是个二次最优函数也不影响线性规划算法的特性,因为它只有一个局部最小值。
我们使用[3]的有效算法,它逐个添加约束
随机顺序,同时跟踪当前最佳新速度

在这里插入图片描述

F i g . 4 Fig.4 Fig.4
(a)8个机器人的,它们各自的速度用箭头表示。
(b)A的受多个机器人影响的多个半平面 t = 2 t=2 t=2 v ∗ o p t v_{*}^{opt} vopt= v ∗ v_{*}^{} v)。 E E E C C C的半平面重合,虚线区域是 A A A的多个半平面交集区域,也就是避免碰撞被允许的新速度选择区域范围。

算法目的是在 O R C A A t ORCA_{A}^{t} ORCAAt中找到最接近 v A p r e f v_{A}^{pref} vApref的新速度 v A n e w v_{A}^{new} vAnew,如果线性规划算法不可行,即 O R C A A t ORCA_{A}^{t} ORCAAt = 0 = 0 =0.,那么返回失败。 v A m a x v_{A}^{max} vAmax的调整不会影响算法的运行。

如果谨慎选择机器人的优化速度(我们将在5.2节讨论),ORCAτA将不会是空的,因此,总有一种解决方案可以保证机器人在t时间内无碰撞。

我们可以通过不包括所有其他机器人的约束来提高选择速度的效率,仅仅考虑那些“靠近”的机器人。 事实上,机器人B离机器人A的距离远远超过(vmaxA + vmaxB)那么时间t内是不会与机器人发生碰撞,因此在计算机器人A的新速度时可以安全地将它们排除在线性规划算法之外。还有一个小问题是机器人A不知道其他机器人的最高速度,但这可以通过“猜测”来解决,其它机器人的最高速度等于A的自身。
关于附近机器人的约束影响,可以使用kD树来寻找附近的机器人。

在这里插入图片描述
F i g . 5 Fig.5 Fig.5
(a)3个机器人 B C D BCD BCD密集的向机器人 A A A移动。
(b)机器人彼此之间的参数 t = 2 t=2 t=2 v ∗ o p t v_{*}^{opt} vopt= v ∗ v_{*}^{} v,那么区域ORCAtA是空的,所以 t t t时间内无法保证没有碰撞。
©机器人彼此之间的参数 t = 2 t=2 t=2 v ∗ o p t v_{*}^{opt} vopt= 0 0 0,那么得出灰色区域是 O R C A A t ORCA_{A}^{t} ORCAAt

5.2选择最优速度
还有一个问题,如何为每个机器人 A A A 选择 v A o p t v_{A}^{opt} vAopt。为了让机器人在没有通信的情况下推断出半平面, v A o p t v_{A}^{opt} vAopt必须是可被其它机器人观察得到的。
在这里,我们讨论一些合理的可能性:
v A o p t v_{A}^{opt} vAopt= 0 0 0 对应所有的机器人 A A A
这就保证了 O R C A A t ORCA_{A}^{t} ORCAAt对于机器人A非空。如上所述,那么线性规划算法将最快为所有机器人找到保证时间t内避免碰撞的速度。对应多个机器人B,点0始终位于障碍速度 V O A ∣ B t VO_{A|B}^{t} VOABt之外,因此半平面 O R C A A t ORCA_{A}^{t} ORCAAt总是包含最小速度 0 0 0。实际上,这条线界定了 O R C A A t ORCA_{A}^{t} ORCAAt垂直于连接 A A A B B B的线。
将优化速度设置为 0 0 0的缺点是机器人的行为看起来不自然,因为它们只考虑了别的机器人的当前位置,而不是它们的速度,在密集的情况下也可能导致全局僵硬,因为机器人的速度彼此非常接近 0 0 0
v A o p t v_{A}^{opt} vAopt= v A p r e f v_{A}^{pref} vApref 对应所有的机器人 A A A
期望速度是机器人的内部状态,因此别的机器人无法观察得到。为了能讨论下去,我们假设某种程度上可以推断出其它机器人的期望速度,然后让所有机器人的优化速度等于期望速度,这在低密度条件下运行很好,但随着优化速度的幅度递增,线性规划算法变得越来越不可行。在大多数情况下,无论密度环境如何,期望速度都具有恒定(大)长度,这将导致即使在均匀的密度环境中导航看起来也不自然。
v A o p t v_{A}^{opt} vAopt= v A v_{A}^{} vA 对应所有机器人 A A A
这里的优化速度是以上两种的理想权衡,在低密度环境下选择偏向期望速度,在高密度环境下选择偏向 0 0 0速度,当然,当前速度要被其它机器人观察得到。
尽管如此,在高密度环境下,线性规划算法依然有可能不可行(见 F i g . 5 ( b ) Fig.5(b) Fig.5(b)),这种情况下不能保证选择出一个避免碰撞的速度。为此,我们使用3-D线性规划算法为机器人选择“尽可能安全”的速度(我们在5.3节讨论)。
5.3 密集条件环境
对于所有机器人 A A A,我们选择 v A o p t v_{A}^{opt} vAopt= v A v_{A}^{} vA,在机器人密度极高的情况下,可能会 O R C A A t ORCA_{A}^{t} ORCAAt为空(见图5(b)),并且5.1的算法返回是不可行的,在这种情况下无法保证有无碰撞速度。
这种情况下,我们为每个机器人选择“尽可能安全”的速度,即速度最低限度的“穿透”其它机器人引起的约束。
正式点的说,就是设 d A ∣ B ( v ) d_{A|B}^{}(v) dAB(v)为速度 v v v到半平面 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt的边界的距离。如果 v ∈ v∈ v O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt,那么 d A ∣ B ( v ) d_{A|B}^{}(v) dAB(v)为负。我们要选择最小的可行速度,选的也就是速度到多个机器人影响的各个平面的距离中最大的一个。

v A n e w v_{A}^{new} vAnew= a r g m i n argmin argmin m a x max max d A ∣ B ( v ) d_{A|B}^{}(v) dAB(v) 其中 v ∈ D ( 0 , v∈D(0, vD(0, v A m a x v_{A}^{max} vAmax ) ) ) , , , B B B ≠ \neq = A A A

几何上,这可以解释为以相同的速度,向外垂直移动半平面 O R C A A ∣ B t ORCA_{A|B}^{t} ORCAABt的边缘,直到恰好得到一个有效的速度,这也就是我们要选的最小可行速度。
我们可以使用三维线性规划算法找到这个速度。对于每一个其它机器人 B B B,距离函数 d A ∣ B ( v ) d_{A|B}^{}(v) dAB(v)在三维 ( v , d ) (v,d) (v,d)空间中是一个平面。我们通过距离函数来寻找一个点 ( v ∗ , d ∗ ) (v*,d*) (v,d),它位于所有的平面之上,找到它的最小值 d d d,然后设置 v A n e w v_{A}^{new} vAnew = = = v ∗ v_{*}^{} v
实际上,我们可以将问题投射到v平面上,这样所有的几何形状操作可以二维进行,三维线性规划算法总是可行的,所以它总是返回一个解决方案。
请注意,在这些密集的情况下,为机器人选择的新速度不会取决于机器人的期望速度。 这意味着机器人’顺其自然流动’,其行为完全由机器人周围的机器人决定。
效果如图:
在这里插入图片描述

关于静态障碍:
在这里插入图片描述

F i g . 6 Fig.6 Fig.6
(a)机器人 A A A和线段障碍物 O O O的配置。
(b)障碍速度的几何形状 V O A ∣ O t VO_{A|O}^{t} VOAOt t = 2 t=2 t=2
(c)半平面切割线 O R C A A ∣ O t ORCA_{A|O}^{t} ORCAAOt V O A ∣ O t VO_{A|O}^{t} VOAOt相切于边上到 v A o p t v_{A}^{opt} vAopt最近的点,等于0时为碰到障碍 O O O

5.4 静态障碍物
到目前为止,我们只讨论过机器人如何避免相互碰撞,但是
典型的多机器人环境也包含(静态)障碍物。 我们可以很容易地将它们纳入上述框架中。 我们基本上遵循以上相同的方法,一个关键的区别是障碍物不移动,所以机器人应该完全负责避免与他们发生碰撞。

我们通常可以假设障碍物被建模为线段的集合。 设 O O O是这样的线段之一, A A A是半径为 r A r_{A}^{} rA,位于点 p A p_{A}^{} pA的机器人。那么由 O O O影响的障碍速度 V O A ∣ O t VO_{A|O}^{t} VOAOt定义如下:
V O A ∣ O t VO_{A|O}^{t} VOAOt = = = {v|∃t ∈ [0,τ] :: tv ∈ O⊕ −D( p A p_{A}^{} pA, r A r_{A}^{} rA)}.
如果其速度 v A v_{A}^{} vA V O A ∣ O t VO_{A|O}^{t} VOAOt内,则代理 A A A将在 τ τ τ时间内与障碍物 O O O碰撞,反之则在t时间内避免碰撞。因此,对应障碍 O O O A A A允许的速度区域为 V O A ∣ O t VO_{A|O}^{t} VOAOt的补集。这个补集是一个非凸区域,所以无法使用5.1的划线算法,为此,对于障碍O,我们定义了A可允许的速度集合 O R C A A ∣ O t ORCA_{A|O}^{t} ORCAAOt的半平面:划分线为为切线过 V O A ∣ O t VO_{A|O}^{t} VOAOt边界上一个最接近 v A o p t v_{A}^{opt} vAopt的点(见图 F i g . 6 ( c ) Fig.6(c) Fig.6(c))。

在这里插入图片描述
F i g . 7 Fig.7 Fig.7
两个机器人的踪迹模拟,机器人显示为彩色磁盘它们的初始位置很轻,随着时间的推移变暗。
(a)两机器人通过彼此的踪迹。
(b)五个机器人去到彼此对面点的踪迹。

如果遇到障碍,对于所有机器人A我们选择 v A o p t v_{A}^{opt} vAopt = 0 =0 =0 A = 0 A = 0 A=0.这保证了
机器人始终存在有效的速度,以避免在τ时间内与障碍物发生碰撞。 对于障碍物而言,我们通常可以使用比其他机器人更小的τ值,因为机器人需要避开其它机器人的情况下,通常不应该对障碍物“害羞”不敢向障碍物靠近。
另一方面,对于机器人在障碍物上允许的速度的限制不与障碍碰撞很难,应该不惜一切代价避免与障碍物碰撞。
我们注意到避免与障碍碰撞的速度集合半平面只保证机器人不与障碍碰撞,没有让机器人绕开障碍移动,这有可能与期望速度方向相反,也就是非最短路径,这应该用全局寻路导航来处理,例如A*寻路啦。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐