移動機器人 | 全域性路徑規劃
移動機器人 | 全域性路徑規劃
主要介紹移動機器人主要的路徑規劃方法及分類,並詳細介紹了Dijkstra全域性路徑規劃方法。
對於生物來說,從一個地方移動到另一個地方是一件輕而易舉的事情。然而,這樣一個基本且簡單的事情卻是移動機器人面對的一個難題。路徑規劃是移動機器人的核心問題,它研究如何讓移動機器人從起始位置無碰撞、安全地移動到目標位置。安全有效的移動機器人導航需要一種高效的路徑規劃演算法,因為生成的路徑質量對機器人的應用影響很大。
簡單來說,移動機器人導航需要解決如下三個問題:我在哪?我要去哪?我怎麼去那?這三個問題分別對應移動機器人導航中的定位、建圖和路徑規劃功能。定位用於確定移動機器人在環境中的位置。移動機器人在移動時需要一張環境的地圖,用以確定移動機器人在目前運動環境中的方向和位置。地圖可以是提前人為給定的,也可以是移動機器人在移動過程中自己逐步建立的。而路徑規劃就是在移動機器人事先知道目標相對位置的情況下,為機器人找到一條從起點移動到終點的合適路徑,它在移動的同時還要避開環境中分散的障礙物,儘量減少路徑長度。
在路徑規劃中主要有三個需要考慮的問題:效率、準確性和安全性。移動機器人應該在儘可能短的時間內消耗最少的能量,安全地避開障礙物找到目標。如圖7-1所示,機器人可通過感測器感知自身和環境的資訊,確定自身在地圖中的當前位置及周圍區域性範圍內的障礙物分佈情況,在目標位置已知的情況下躲避障礙物,行進至目標位置。
■ 圖7-1路徑規劃與運動示意圖
根據移動機器人對環境的瞭解情況、環境性質以及使用的演算法,可將路徑規劃分為基於環境的路徑規劃演算法、基於地圖知識的路徑規劃演算法和基於完備性的路徑規劃演算法,如圖7-2所示。
■ 圖7-2路徑規劃演算法的分類
環境情況:移動機器人的環境可以分為靜態環境和動態環境。在靜態環境中,起點和目標位置是固定的,障礙物也不會隨時間改變位置。在動態環境中,障礙物和目標的位置在搜尋過程中可能會發生變化。通常,由於環境的不確定性,動態環境中的路徑規劃比靜態環境中的路徑規劃更復雜。實際環境通常是未知變化的,路徑規劃演算法需要適應環境未知的變化,例如突然出現的障礙物或者是目標在持續移動時。當障礙物和目標都在變化時,由於演算法必須對目標和障礙物的移動實時做出響應,路徑規劃就更加困難了。
完備性:根據完備性,可將路徑規劃演算法分為精確的演算法和啟發式演算法。如果最優解存在或者證明不存在可行解,那麼精確的演算法可以找到一個最優的解決方案。而啟發式演算法能在較短的時間內尋找高質量的解決方案。
地圖知識:移動機器人路徑規劃基本上是依靠現有的地圖作為參考,確定初始位置和目標位置以及它們之間的聯絡。地圖的資訊量對路徑規劃演算法的設計起著重要的作用。根據對環境的瞭解情況,路徑規劃可以分為全域性路徑規劃和區域性路徑規劃。其中,全域性路徑規劃需要知道關於環境的所有資訊,根據環境地圖進行全域性的路徑規劃,併產生一系列關鍵點作為子目標點下達給區域性路徑規劃系統。在區域性路徑規劃中,移動機器人缺乏環境的先驗知識,在搜尋過程中,必須實時感知障礙物的位置,構建區域性環境的估計地圖,並獲得通往目標位置的合適路徑。全域性路徑規劃與區域性路徑規劃的區別見表7-1。
表7-1全域性路徑規劃與區域性路徑規劃的區別
移動機器人導航通過路徑規劃使其可以到達目標點。導航規劃層可以分為全域性路徑規劃層、區域性路徑規劃層、行為執行層等。
(1) 全域性路徑規劃層。依據給定的目標,接受權值地圖資訊生成全域性權值地圖,規劃出從起點到目標位置的全域性路徑,作為區域性路徑規劃的參考。
(2) 區域性路徑規劃層。作為導航系統的區域性規劃部分,接受權值地圖生成的區域性權值地圖資訊,依據附近的障礙物資訊進行區域性路徑規劃。
(3) 行為執行層。結合上層傳送的指令以及路徑規劃,給出移動機器人的當前行為。
作為移動機器人研究的一個重點領域,移動機器人路徑規劃演算法的優劣很大程度上決定了機器人的工作效率。隨著機器人路徑規劃研究的不斷深入,路徑規劃演算法也越來越成熟,並且朝著下面的趨勢不斷髮展:
(1) 從單一機器人移動路徑規劃演算法向多種演算法相結合的方向發展。目前的路徑規劃方法每一種都有其優缺點,研究新演算法的同時可以考慮將兩種或兩種以上演算法結合起來,取長補短,克服缺點,使優勢更加明顯,效率更高。
(2) 從單機器人路徑規劃到多機器人協調路徑規劃發展。隨著機器人(特別是移動機器人)越來越多地投入到各個行業中,路徑規劃不再僅侷限於一臺移動機器人,而是多個移動機器人的協調運作。多個機器人資訊資源共享,對於路徑規劃方面是一大進步。如何更好地處理多個移動機器人的路徑規劃問題需要研究者重點研究。
01、全域性路徑規劃
全域性路徑規劃是指機器人在障礙環境下按照一種或多種效能指標(如最短路徑等),尋找一條起點到終點的最優無碰撞路徑。全域性規劃首先要建立環境模型,在環境模型裡進行路徑規劃。環境建模是指對機器人實際的工作環境進行抽象轉換,換成演算法可識別的空間,如可根據構型空間理論,考慮安全閾值後,取機器人能自由活動的最小矩形空間作為柵格單元,將機器人的工作空間劃分為柵格。如此,便可根據機器人及實驗場地大小選擇合適的柵格尺寸。柵格法是移動機器人全域性路徑規劃中公認最成熟、安全係數最高的演算法,但此方法受限於感測器,且需要大量運算資源。除柵格法外,還有構型空間法、拓撲法、Dijkstra演算法、A*演算法等。下面著重介紹Dijkstra演算法。
Dijkstra演算法
Dijkstra演算法由荷蘭電腦科學家 E.W.Dijkstra 於 1956年提出。Dijkstra 演算法使用寬度優先搜尋解決帶權有向圖的最短路徑問題。它是非常典型的最短路徑演算法,因此可用於求移動機器人行進路線中的一個節點到其他所有節點的最短路徑。Dijkstra 演算法會以起始點為中心向外擴充套件,擴充套件到最終目標點為止,通過節點和權值邊的關係構成整個路徑網路圖。該演算法存在很多變體,最原始的Dijkstra演算法是用於找到兩個頂點之間的最短路徑,但現在多用於固定一個起始頂點之後,找到該源節點到圖中其他所有節點的最短路徑,產生一個最短路徑樹。除移動機器人路徑規劃外,該演算法還常用於路由演算法或者其他圖搜尋演算法的一個子模組。Dijkstra演算法虛擬碼見表7-2。
表7-2 Dijkstra演算法偽代
演算法中,G為帶權重的有向圖,s是起點(源點),V表示G中所有頂點的集合,(u,v)表示頂點u到v有路徑相連,w(u,v)表示頂點u到v之間的非負權重。演算法通過為每個頂點u保留當前為止找到的從s到v的最短路徑來工作。初始時,源點s的路徑權重被賦為0,所以d[s] = 0。若對於頂點u存在能直接到達的邊(s,u),則把d[v] 設為w(s, u),同時把所有其他s不能直接到達的頂點的路徑長度設為無窮大,即表示當前還不知道任何通向這些頂點的路徑。當演算法結束時,d[v]中儲存的便是從s到u的最短路徑,或者,如果路徑不存在,則其值是無窮大。
Dijkstra演算法中邊的拓展如下:如果存在一條從u到v的邊,那麼從s到v的最短路徑可以通過將邊(u, v)新增到從s到u的路徑尾部拓展一條從s到v的路徑。這條路徑的長度是d[u] + w(u, v)。如果這個值比當前已知的d[v]的值小,則可以用新值替代當前d[v]中的值。拓展邊的操作,一直執行到所有的d[v]都代表從s到v的最短路徑的長度值。此演算法的組織令d[u]達到其最終值時,每條邊(u,v)都只被拓展一次。
演算法維護兩個頂點集合S和Q。集合S保留所有已知最小d[v]值的頂點v,而集合Q則保留其他所有頂點。集合S的初始狀態為空,而後每一步都有一個頂點從Q移動到S。這個被選擇的頂點是Q中擁有最小的d[u]值的頂點。當一個頂點u從Q中轉移到S中,演算法對u的每條外接邊(u, v)進行拓展。
同時,上述演算法保留圖G中源點s到每一頂點v的最短距離d[v],同時找出並保留v在此最短路徑上的“前趨”,即沿此路徑由s前往v,到達v之前所到達的頂點。其中,函式Extract_Min(Q)將頂點集合Q中有最小d[u]值的頂點u從Q中刪除並返回u。
在移動機器人導航應用中通常只需要求起點到目標點間的最短距離,此時可在上述經典演算法結構中新增判斷,判斷當前點是否為目標點,若為目標點,即結束。
若用O表示演算法時間複雜度,則邊數m和頂點數n是時間複雜度的函式。對於頂點集Q,演算法的時間複雜度O(|E|·dkQ+|V|emQ),其中dkQ和emQ分別表示完成鍵的降序排列時間和從Q中提取最小鍵的時間。Dijkstra演算法最簡單的實現方法是用一個數組或者連結串列儲存所有頂點的集合Q,故搜尋Q中最小元素的運算Extract_Min(Q)只需要線性搜尋集合Q中的所有頂點元素,此時時間複雜度為O(n2)。
邊數少於n2的為稀疏圖。對於稀疏圖,可用鄰接表更有效地實現,同時需要將一個二叉堆或者斐波那契堆做優先佇列查詢最小頂點。使用二叉堆的時間複雜度為O((m+n)log n),而使用斐波那契堆的時間複雜度為O(m+n log n)。