Robot configuration
Robot degree of freedom (DOF)
Robot configuration space
C-Space
C-space
中就是一個點而已。Planning in workspace
workspace
,簡單來說其實就是機器人真實的一個工作空間,就是我們所處的物理世界。如果在物理世界中進行機器人的一個路徑規劃,其實是一個比較麻煩的事情,有如下兩個原因:
C-space
這一概念Planning in C-space
C-space
中,機器人被抽象為了一個 C-space
中的一個點,例如三維空間中機器人可以由 position(a point in \(R^3\)),pose (a point in \(SO(3)\))C-space
中去,是一個在規劃前要完成的工作,我們稱這些障礙物為 C-space
中的障礙物,或者稱為 C-obstacle
C-free
中找一個連線 \(q_{start}\) 和 \(q_{goal}\) 的路徑In workspace
機器人是一個擁有形狀和大小的實體 (hard for motion planning)
In configuration space
C-space
中去,其實嚴格上來說也不算是加入,只是以某種方式對規劃時使用的地圖進行了一定方式的變動,使得在後續的路徑規劃中可以忽略機器人的一個形狀和大小的約束,從而簡化規劃問題的難度。在 C-space
表示障礙物可能非常複雜。 因此在實踐中使用了近似(但更保守)的表示,例如下圖所示是將機器人通建模為一個半徑為 \(r\) 的球形:
首先圖這個概念相信大家或多或少的在本科學習中都會接觸到圖論相關的內容,簡單來說圖是由節點和邊構成的。根據節點和邊的不同形式還可以分成無向圖,有向圖,賦權圖等等。下面是一些例子。
無向圖
有向圖
賦權圖
狀態空間圖 (state sapce graph
)
搜尋演演算法的數學表示,即將一張圖抽象成數學上的表達形式
state space graph
state space graph
一個基於圖搜尋的大致流程可以歸結為如下步驟
score function
\(\quad\)顯而易見,問題3則是解決圖搜尋問題或者說基於搜尋的路徑規劃問題的核心問題,起初,我們並不知道目標點在圖中的哪個位置,因此我們只能嘗試去遍歷圖中的所有節點,當到達目標節點的時候則停止遍歷即可,那麼下面的一個問題則變成了如何高效的進行圖的遍歷,從而快速的找到目標點。
\(\quad\)學過一點關於圖論的同學可能知道,圖的遍歷遍歷一般是基於兩種方法,即我們通常所說的深度優先遍歷(DFS)和廣度優先遍歷(BFS),兩者的遍歷方式有一定的區別,首先在程式設計實現的時候,所對應的資料結構一個對應的是堆,一個對應的則是棧,具體如下圖所示:
\(\quad\)策略:移除/擴充套件容器中深度最大的節點,若深度一樣,則根據自定義的策略進行選擇移除(即後文所說的 Heuristic Function)
\(\quad\)具體的實現如下圖所示,維護一個 last in first output container (i.e. statck)
\(\quad\)下面通過一個動圖來展示這一過程,根據圖中的編號,節點會依次的進行擴充套件和遍歷。
\(\quad\)廣度優先搜尋的策略:移除/擴充套件容器中最淺層的節點。
\(\quad\)實現方式:維護一個 first in first output container (i.e. queue)
\(\quad\)下面通過一個動圖來展示這一過程,根據圖中的編號,節點會依次的進行擴充套件和遍歷。
\(\quad\) 從圖中可以明顯的看到雖然兩個方法都可以找到最終的目標點,但是 DFS 明顯找到的不是最優解,即並不是最短路。這裡我們只是直觀上說明 DFS 不能找到最優路徑,事實上也確實不行因此在後面的討論中,我們值討論基於 BFS 的遍歷方式。
\(\quad\) BFS 和 DFS 在選擇下一個節點的時候,僅僅是依靠當前 container 中誰是 "first in" 或者誰是 last in 進行判斷。
\(\quad\) 貪婪演演算法進行搜尋則是根據一種 heuristic function 進行選擇,從而選擇認為(最好的節點)
Heuristic Definition:
A heuristic is a guess of how close to you are to the target。即啟發式是一個對當前點距離目標點多遠的猜測,那麼我們自然就可以使用兩點之間的一個正規化距離來判斷猜測了,下圖就表示了利用歐式距離和曼哈頓距離當作 heuristic 時所猜測的距離。
heuristic 應當滿足以下兩點:
啟發式搜尋可以指導你朝著一個儘可能正確的方向向目標點靠近。
啟發式函數應當是非常簡單進行計算的,因為本身我們在不使用啟發式搜尋時,單單通過廣度優先遍歷是可以找到一個起點到目標點的最有解的,但是其速度比較慢,因此才加入啟發式搜尋,但如果啟發式函數計算較為複雜,反而會增加計算時間,得不償失,啟發式搜尋也就是去了意義。
\(\quad\) 下面對 BFS 和 Greedy Best-First Search 通過一張動圖進行簡單對比(環境過於簡單,起點和終點之間沒有障礙物)。
\(\quad\) 看起來貪心搜尋的表現確實不錯。接下來看看如果在圖中加入障礙物會怎麼樣。
\(\quad\) 很遺憾,貪心搜尋失敗了,並沒有找到最優路徑,太過於注重眼前利益。
\(\quad\) 導致這種問題i的原因是什麼呢?在接下來的討論中揭曉。