---
# System prepended metadata

title: 進度報告(2024/12/30)
tags: [Velocity Obstical, path planing, 進度報告]

---

# 進度報告(2024/12/30)
這周我找到自己寫的ORCA運作失敗的原因了。原ORCA的論文[^1]強調「每顆節點的行動都是獨立自主的，沒有與其他機器人溝通」:"In our formulation, each robot acts fully in
dependently, and does not communicate with other robots."
這導致我有點被誤導了。細看論文以及比對後續相關文獻[^2]後，結論是節點間應該有事先溝通，再來才是獨立自主的避障行為。
:::info
三節點測試情境:
{%youtube 7vfM5-L7M7M%}
B1節點的速度空間:
{%youtube 4VH80UOtqqU%}
* 黑色圓圈範圍是節點的速度範圍，設為100。黑色的點代表朝向目標的最佳速度
* 藍色線帶表膨脹後的碰撞錐，虛線為被修掉的部分
* 綠色線是與碰撞錐的切線，綠色點則是$\mathbf{u}$與碰撞錐的交點
* 紅色虛線朝向綠色線的那半邊為ORCA，紅點則是$\mathbf{v}^{opt}+\frac{1}{2}\mathbf{u}$
* 桃紅點則象徵最佳化找到的速度
:::spoiler B1的速度
![image](https://hackmd.io/_uploads/ByxEZGl8Je.png)
:::

## VO的形成
A節點與B障礙相遇時，會做下列幾件事形成VO，以保證自己不會碰撞B。
1. 將B的中心位置投射至自身的速度空間中，投射座標為$\mathbf{p}_B-\mathbf{p}_A$，也就是B相對於自身的位置

2. 在速度空間中，由B的中心點擴張出$r_A+r_B$的膨脹層，形成一個圓稱為$\hat{B}$，而自身所在的相對位置，也就是速度空間中的原點，稱為$\hat{A}$

3. 由$\hat{A}$對$\hat{B}$做兩條切線，形成一個速度空間中的錐形區域，叫做碰撞錐。此碰撞錐代表著所有會造成碰撞的A相對於B之速度$\mathbf{v}_{AB}$集合(Collision Cone,$CC_{A,B}$)
![image](https://hackmd.io/_uploads/H1JNeyx81l.png)

4. 若想得知有哪些$\mathbf{v}_A$會碰撞，將碰撞錐(相對速度集合)加回$\mathbf{v}_B$即可，而這群會造成相撞的$\mathbf{v}_A$集合，便被稱為Velocity Obstacle(VO)。
$$VO_{A,B} = CC_{A,B}\oplus\mathbf{v}_B$$
![image](https://hackmd.io/_uploads/SkIZV1lLyx.png)

    所以，我們便可以得知，節點A的速度空間中，有一塊被稱為"速度障礙"的區域，凡是$\mathbf{v}_A$踏入該區，便有可能在未來內造成AB相撞。
5. 接著，可以將VO套入TTC的概念，判斷在$\tau$秒後才會造成碰撞的$\mathbf{v}_A$速度還算安全。於是，我們可以將這個VO領域做修剪，形成$VO_{A,B}^\tau$。
![image](https://hackmd.io/_uploads/SkhwrygIJx.png)

## ORCA的形成
起初我以為ORCA僅是做VO的切線，將限制線性化而已。但是，重看論文後才明白，ORCA在平移碰撞錐形成VO的那一步，也就是樓上第4步，就已經與傳統的速度障礙法不同了。以下是ORCA形成的方式:
* 平移速度空間中的$CC_{A,B}$，但不是平移$\mathbf{v}_B$向量，而是$\mathbf{v}_B^{opt}$向量(最大速度朝終點前進的向量)。$VO_{A,B} = CC_{A,B}\oplus\mathbf{v}_B^{opt}$
* 修剪VO為$VO_{A,B}^\tau$
* 計算$\mathbf{v}_A^{opt}$距離$VO_{A,B}^\tau$最短的向量$\mathbf{u}$，並在最近點做VO的切線，然後將此切線平移$-\frac{1}{2}\mathbf{u}$的距離，得到$ORCA_{A|B}^\tau$
![image](https://hackmd.io/_uploads/SyNTexeL1e.png)

## 結論
機器人想要用ORCA法相互避障，便必須要知道對方的最佳速度($\mathbf{v}_B^{opt}$)。然而，若是機器人沒有事先知道其他機器人的目的地，便無法得知他們的最佳速度。也就是說，在所有機器人開始跑之前，他們必須先講好，而這其實就違反了不溝通的原則了。甚至可以說，ORCA對應的情況為已知意圖的多節點情境，因為 **所有機器人都希望朝目標點直線前進，也知道所有其他機器人欲朝他們的終點直線前進。** 因此ORCA提供的是一個共同行為準則，讓機器人間不會互相干擾彼此。
## Reference
[^1]:Van Den Berg, Jur, et al. "Reciprocal n-body collision avoidance." Robotics Research: The 14th International Symposium ISRR. Berlin, Heidelberg: Springer Berlin Heidelberg, 2011.
[^2]:Alonso-Mora, Javier, et al. "Optimal reciprocal collision avoidance for multiple non-holonomic robots." Distributed autonomous robotic systems: The 10th international symposium. Springer Berlin Heidelberg, 2013.