葛文雅, 李平
(華僑大學 信息科學與工程學院, 福建 廈門 361021)
路徑規(guī)劃是對初始節(jié)點到目標節(jié)點的可行路徑進行規(guī)劃.路徑規(guī)劃的實現(xiàn)應解決以下2個問題:一是規(guī)劃的路徑能夠安全、有效地躲避障礙物,最終抵達目標節(jié)點;二是有效減少移動機器人的運動時間、優(yōu)化路徑軌跡、提高安全性、提升運行效率等[1-4].根據(jù)環(huán)境為時變模型或時不變模型,路徑規(guī)劃可分為靜態(tài)路徑規(guī)劃和動態(tài)路徑規(guī)劃[5].通常情況下,靜態(tài)路徑規(guī)劃是指移動機器人在能夠直接了解全局環(huán)境信息的前提下,規(guī)劃一條安全可行的路徑.與靜態(tài)路徑規(guī)劃不同,動態(tài)路徑規(guī)劃應用于全局環(huán)境信息不可知或隨時間變化的情況,只能得到當前周圍范圍內(nèi)的局部環(huán)境信息,并根據(jù)得到的信息完成局部路徑規(guī)劃,不斷調(diào)整移動機器人的動作,直到抵達目標位置[6].移動機器人的實際地圖信息多變且復雜,僅依靠某種算法進行路徑規(guī)劃無法滿足應用場景的要求,人與移動機器人的安全無法得到保障[7-9].移動機器人在規(guī)劃全局最優(yōu)路徑的同時,更要具備動態(tài)避障的能力[10].因此,需對各類算法應用時存在的不足進行改進,把各類算法進行融合,這是目前路徑規(guī)劃的主要研究方向之一[11-12].
全局靜態(tài)路徑規(guī)劃算法能夠基于已知的靜態(tài)信息完成規(guī)劃,得到全局最優(yōu)路徑,但因缺少動態(tài)障礙物信息,無法動態(tài)避障.局部動態(tài)路徑規(guī)劃算法能夠根據(jù)當前輸入的傳感器信息規(guī)劃局部路徑,不斷更新輸入、輸出,實現(xiàn)動態(tài)障礙物躲避,但因缺少全局信息,易陷入局部最優(yōu)[13],導致目標節(jié)點不可達.兩種算法各有優(yōu)缺點,故一些學者將這兩種算法進行結合.王志中[14]提出一種基于A*算法與改進人工勢場法的融合算法,但人工勢場法規(guī)劃的路徑轉角較大,難以應用于實際.動態(tài)窗口法容易實現(xiàn),且規(guī)劃路徑平滑,能夠?qū)崿F(xiàn)局部避障[15].王凡等[16]將動態(tài)窗口法應用于A*算法兩個路徑節(jié)點間的局部規(guī)劃,可得到更為平滑的路徑,但算法的運行時間較長.Ji等[17]提出一種基于優(yōu)化A*算法和動態(tài)窗口法的優(yōu)化算法,可提高搜索效率,但未考慮動態(tài)障礙物的情況,且存在速度震蕩的問題.Liu等[18]提出一種基于Jump-A*算法和動態(tài)窗口法的融合算法,考慮了動態(tài)障礙物的情況,可提高路徑的平滑度,但仍然存在移動機器人速度震蕩及繞遠的問題.基于此,本文提出一種基于安全A*算法和雙速度模型動態(tài)窗口法的移動機器人全局動態(tài)路徑規(guī)劃融合算法.
A*算法的路徑規(guī)劃存在路徑轉角過大,以及路徑和障礙物過近的問題.因此,提出安全A*算法,主要從兩個方面進行改進:1) 擴展搜索鄰域;2) 改進啟發(fā)式函數(shù),加入一個安全項,增加樣本信息.
針對A*算法路徑規(guī)劃存在路徑轉角過大的問題,安全A*算法將節(jié)點n的搜索鄰域擴展至24個.搜索鄰域擴展過程如下:對于節(jié)點n(x,y),遍歷節(jié)點n臨近的24個節(jié)點(圖1,中間黑色區(qū)域為節(jié)點n,周圍白色區(qū)域為遍歷的臨近節(jié)點,箭頭方向為路徑方向),以作為后續(xù)節(jié)點m(x′,y′),m={(x′,y′)∣x′=[x-2,x+2],y′=[y-2,y+2]};如果后續(xù)節(jié)點m為障礙節(jié)點,或后續(xù)節(jié)點m在close表中,則跳過,選取下一個臨近點作為后續(xù)節(jié)點;否則,計算后續(xù)節(jié)點的評價函數(shù)f(m),判斷m是否在open表中,若判斷失敗,將后續(xù)節(jié)點m放入open表,若判斷成功,則選取較小的f(m),并更新后續(xù)節(jié)點m的實際代價函數(shù)、評價函數(shù)及其父節(jié)點.
圖1 24鄰域的搜索方向
擴展節(jié)點的搜索鄰域可以減小路徑轉角,提高移動機器人實際運動中的路徑安全性.然而,路徑和障礙物的距離仍然很近,路徑的安全性還有較大的提升空間.A*算法的核心在于啟發(fā)式函數(shù)h(n)的設計,安全A*算法采用A*算法對當前軌跡節(jié)點進行評估的思想,并增加了節(jié)點及一定范圍內(nèi)的障礙物信息,增大了路徑和障礙物的距離,從而具有更高的路徑安全性.
安全A*算法的評價函數(shù)f(n)為
f(n)=g(n)+h′(n),h′(n)=h(n)+εL(n),L(n)=k/s.
(1)
式(1)中:g(n)為實際代價函數(shù),即當前已走過的路徑距離;h′(n)為安全A*算法的啟發(fā)式函數(shù);L(n)為節(jié)點n對應的危險評估值(安全項);k為評價范圍內(nèi)障礙物的個數(shù);s為移動機器人與障礙物的最小距離;ε為安全項L(n)的權重,文中設定為100.
open表存儲搜索過程中的待擴展節(jié)點,并將這些節(jié)點按照評價函數(shù)值進行升序排序;close表保存open表中評價函數(shù)值最小的后續(xù)節(jié)點;safe表保存后續(xù)節(jié)點的安全性指數(shù)S.在執(zhí)行路徑規(guī)劃時,安全A*算法主要通過open表和close表實現(xiàn)節(jié)點的擴展和最優(yōu)節(jié)點的選取.
安全A*算法的流程有以下7個步驟.
步驟1將初始節(jié)點納入open表,將障礙節(jié)點納入close表.
步驟2選取open表中評價函數(shù)值最小的后續(xù)節(jié)點,將其納入close表,將后續(xù)節(jié)點的安全性指數(shù)納入safe表,并從open表刪除此節(jié)點.
步驟3判斷該節(jié)點是否為目標節(jié)點,若為目標節(jié)點,則算法退出,返回當前節(jié)點信息;若該節(jié)點非目標節(jié)點,擴展該節(jié)點的后續(xù)節(jié)點m.
步驟4在open表中建立從后續(xù)節(jié)點m返回n的指針,并計算f(m),即
f(m)=g(m)+h′(m),h′(m)=h(m)+εL(m),L(m)=k/s.
(2)
步驟5判斷open表中是否存在后續(xù)節(jié)點m,若結果為假,則將節(jié)點m納入open表,并將節(jié)點m的安全性指數(shù)納入safe表;若結果為真,則比較不同前向指針的f(m)的大小,并選取較小的f(m).
步驟6更新g(m),f(m)及后續(xù)節(jié)點m的前向指針.
步驟7按照評價函數(shù)值對open表重新進行升序排序,并返回步驟2.
采用柵格法[19]構建地圖模型,柵格法是移動機器人環(huán)境建模的常用方法,它將移動機器人的工作空間劃分為網(wǎng)格單元.柵格地圖模型,如圖2所示.圖2中:黑色網(wǎng)格為障礙物信息;白色格子為移動機器人可移動區(qū)域.
(a) 全局最優(yōu)路徑 (b) 安全性曲線
基于柵格地圖,采用安全A*算法進行全局靜態(tài)規(guī)劃,可以得到全局最優(yōu)路徑及安全性曲線,如圖3所示.由圖3可知:全局最優(yōu)路徑平滑且距離障礙物較遠;路徑的安全性指數(shù)始終保持在10,路徑安全性很高.
動態(tài)窗口(DWA)法常用于存在動態(tài)障礙環(huán)境的路徑規(guī)劃[20],它基于采樣的當前狀態(tài)計算下一時刻的合理軌跡,為每一軌跡附加評估值,并根據(jù)評估值選取該狀態(tài)的最優(yōu)預估軌跡[21-22].
動態(tài)窗口法需要在每個采樣時刻計算下一時刻所有的可能速度,通過運動模型預估下一時刻所有的可能路徑.因此,應用動態(tài)窗口法首先應建立研究對象的運動模型,模型的準確度會影響算法的實際控制效果.
假設采樣時間間隔(Δt)很短,移動機器人的線速度(v)控制加速與減速,角速度(ω)負責轉向,記當前時刻(t)移動機器人位姿為(xt,yt,θt),xt,yt分別為當前時刻移動機器人在x軸和y軸的位置,θt為當前時刻移動機器人與x軸的夾角;下一時刻的預估速度為(vt+1ωt+1),vt+1,ωt+1分別為下一時刻移動機器人的線速度和角速度.由于采樣時間間隔很短,故將移動機器人運動的圓弧軌跡近似為直線,下一時刻的預估位姿記為(xt+1,yt+1,θt+1),計算公式為
(3)
式(3)中:vx,vy分別為vt+1投影在x軸和y軸上的線速度;ωt為當前時刻的角速度.
根據(jù)移動機器人運動模型,可通過當前位姿和施加的速度控制量預估下一時刻的運動軌跡.基于當前時刻的速度(vt,ωt),構造下一時刻速度的采樣空間,理論上存在無數(shù)下一時刻的預估速度(vt+1,ωt+1).由于受限于移動機器人速度極限、動力學性能及環(huán)境等因素,移動機器人的速度被約束在一定的范圍內(nèi).
1) 速度極限約束.在物理系統(tǒng)中,受限于移動機器人本身的設計與結構,移動機器人的線速度與角速度都有上限和下限.
移動機器人受速度極限約束所能達到的速度空間Vm為
Vm={(v,ω)∣v∈[vmin,vmax],ω∈[ωmin,ωmax]}.
(4)
式(4)中:vmax,vmin分別為線速度的上限和下限;ωmax,ωmin分別為角速度的上限和下限.
2) 動力學性能約束.每個移動機器人的電機性能并非完全相同,導致移動機器人的加速、減速也不相同,因此,移動機器人在下一個時刻的速度會受到約束.
移動機器人受動力學性能約束所能達到的速度空間Vg為
Vg={(v,ω)∣v∈[vt-av,minΔt,vt+av,maxΔt],ω∈[ωt-av,minΔt,ωt+av,maxΔt].
(5)
式(5)中:av,min,av,max分別為線加速度的最小值和最大值.
3) 最小制動距離約束.計算路徑規(guī)劃預估速度的最小制動距離,判斷其對障礙物的躲避能力,以確保移動機器人移動的安全性.
移動機器人受最小制動距離約束所能達到的速度空間Va為
(6)
式(6)中:dist(v,ω)為速度(v,ω)預測的機器人和最近障礙物之間的距離(距離評價函數(shù)).
由此可得,移動機器人運動速度空間合集V為
V=Vm∩Vg∩Va.
(7)
考慮如何施加合適的控制量,使得到的速度采樣空間能夠規(guī)劃出更優(yōu)的軌跡.所有的控制量對應一個預估速度,經(jīng)計算可得對應的預估軌跡,所有的預估軌跡組成的預估軌跡集即為一個動態(tài)窗口,動態(tài)窗口在每個采樣時間內(nèi)完成更新.評價函數(shù)是對動態(tài)窗口內(nèi)的全部預估軌跡進行評價,選擇評價值最高的預估軌跡作為下一時刻的目標軌跡.評價函數(shù)主要從方位角、距離及速度3個方面進行設計.
1) 方位角評價函數(shù)heading(v,ω).方位角是指移動機器人按照采樣得到的線速度和角速度運動到預估軌跡的末端時,移動機器人的航向與移動機器人中心指向目標節(jié)點方向的角度差.角度差越大,方位角評價函數(shù)值越小.
2) 距離評價函數(shù)dist(v,ω).移動機器人按照采樣得到的線速度和角速度運動到預估軌跡的末端時,移動機器人和最近障礙物之間的距離為dist(v,ω).距離評價函數(shù)值越高,軌跡越安全,舍棄與障礙物相交的軌跡.
3) 速度評價函數(shù)vel(v,ω).采樣時刻移動機器人的速度會影響移動機器人的運行時間與工作效率.在預估速度集中,速度評價函數(shù)值與速度的大小成正比.
總評價函數(shù)G(v,ω)為
G(v,ω)=αheading(v,ω)+βdist(v,ω)+γvel(v,ω).
(8)
式(8)中:α,β,γ分別為方位角評價函數(shù)、距離評價函數(shù)、速度評價函數(shù)的權重系數(shù).
動態(tài)窗口法根據(jù)得到的局部環(huán)境信息可以很好地躲避靜態(tài)或動態(tài)的障礙物,得到一條不發(fā)生碰撞的最優(yōu)路徑.然而,動態(tài)窗口法只根據(jù)局部環(huán)境信息進行軌跡規(guī)劃,缺少全局環(huán)境信息的指引,很容易陷入局部最優(yōu),甚至出現(xiàn)無法順利到達目標位置等非常嚴重的問題.
之前,學者提出基于A*算法和動態(tài)窗口法的融合算法, 規(guī)劃時將A*算法規(guī)劃得到的全局路徑節(jié)點作為臨時目標節(jié)點,到達路徑節(jié)點pi后,路徑節(jié)點pi+1將成為下一個臨時的目標節(jié)點,直至到達目標節(jié)點.經(jīng)過實驗仿真.該算法能使移動機器人成功抵達目標位置,但移動機器人接近一個臨時目標節(jié)點時,速度會急速下降,甚至直接降為0,導致移動機器人整體運行不夠平穩(wěn).
進一步地,對基于安全A*算法和動態(tài)窗口法的融合算法(初步融合算法)進行仿真實驗,可得初步融合算法的速度曲線,如圖4所示.圖4中:tp為路徑規(guī)劃時間.
圖4 初步融合算法的速度曲線
初步融合算法進行規(guī)劃時,無法區(qū)別臨時目標節(jié)點和全局目標節(jié)點,以致無差別地給出執(zhí)行減速停止的指令.因此,需對動態(tài)窗口法的速度模型進行改進,采用雙速度模型.
當判定臨時目標節(jié)點為全局目標節(jié)點,或距離臨時目標節(jié)點還有一定距離時,速度模型不變,仍采用式(4)~(6)的約束條件;當判定臨時目標節(jié)點不是全局目標節(jié)點,且距離臨時目標節(jié)點小于一定距離時,線速度保持不變(仍為上一時刻的線速度(vt-Δt)),角速度選取原則不變.
此時,雙速度模型如下.
(9)
(10)
(11)
由此可得雙速度模型的速度空間合集為
(12)
式(12)中:p為臨時目標節(jié)點;G為全局目標節(jié)點;distp為移動機器人當前位置和臨時目標節(jié)點之間的距離;d為常數(shù),文中取3.
基于安全A*算法和雙速度模型動態(tài)窗口法,提出移動機器人全局動態(tài)路徑規(guī)劃融合算法(文中算法).采用基于柵格地圖的安全A*算法進行全局靜態(tài)路徑規(guī)劃,可得全局最優(yōu)路徑;采用時間序列Bottom-Up算法對全局最優(yōu)路徑進行特征點提取,以作為臨時目標節(jié)點;在全局最優(yōu)路徑的信息引導下,采用雙速度模型動態(tài)窗口法進行動態(tài)規(guī)劃與避障,躲避動態(tài)障礙物后,采用避障重規(guī)劃機制進行路徑重規(guī)劃,確保規(guī)劃路徑的全局最優(yōu).
文中算法的思路框架,如圖5所示.
圖5 文中算法的思路框架
針對現(xiàn)有融合算法中臨時目標節(jié)點過多導致效率較低、計算代價較大的問題,采用時間序列Bottom-Up算法,對安全A*算法得到的全局最優(yōu)路徑節(jié)點進行預處理,擬合分段得到特征路徑節(jié)點作為臨時目標節(jié)點,在保留原路徑特征的前提下,減少全局路徑節(jié)點的數(shù)量.特征路徑節(jié)點的選取,如圖6所示.圖6中:藍色實線為安全A*算法得到的全局最優(yōu)路徑;藍色空心圓為安全A*算法得到的全局最優(yōu)路徑節(jié)點(80個);紅色實心圓為經(jīng)過時間序列Bottom-Up算法預處理后的特征路徑節(jié)點(7個).由圖6可知:臨時目標節(jié)點的數(shù)量由80個減少為7個,有效降低了儲存和計算代價,提高了路徑規(guī)劃的效率.
(a) 安全A*算法 (b) 時間序列Bottom-Up算法
當環(huán)境中出現(xiàn)未知障礙物和動態(tài)障礙物時,初步融合算法根據(jù)當前窗口不斷更新速度(v,ω),使移動機器人順利地躲避障礙物.由于脫離原全局最優(yōu)路徑已有一段時間,當重新恢復至原來模式時,會出現(xiàn)移動機器人繞遠甚至繞圈的問題(圖7的紅色路徑).這是由于避障模式結束后,原臨時目標節(jié)點沒有改變,但此時移動機器人很可能已經(jīng)走過原臨時目標節(jié)點,且方位角無法立即改變.此時,如果不改變臨時目標節(jié)點,移動機器人則會繼續(xù)按照原臨時目標節(jié)點進行規(guī)劃,出現(xiàn)移動機器人繞遠甚至繞圈的問題.為了解決此問題,提出一種避障重規(guī)劃機制.在路徑規(guī)劃的過程中,全程監(jiān)控臨時目標節(jié)點、移動機器人當前位置及下一臨時目標節(jié)點三者形成的夾角(θa).如果θa<90°,則臨時目標節(jié)點保持不變,繼續(xù)進行路徑規(guī)劃;如果θa≥90°,當前規(guī)劃可能出現(xiàn)移動機器人繞遠甚至繞圈的問題,則重新選擇下一特征節(jié)點作為臨時目標節(jié)點進行路徑規(guī)劃.夾角的不同情形,如圖8所示.
(a) θa<90° (b) θa≥90°
動態(tài)窗口法根據(jù)實時獲取的局部環(huán)境信息,實現(xiàn)路徑規(guī)劃和動態(tài)避障,但由于忽略全局信息,導致易陷入局部最優(yōu)、目標節(jié)點不可達等問題.因此,文中算法首先通過安全A*算法進行全局靜態(tài)路徑規(guī)劃;然后,將規(guī)劃得到最優(yōu)路徑上的節(jié)點作為臨時目標節(jié)點,兩個臨時目標節(jié)點之間采用動態(tài)窗口法實現(xiàn)動態(tài)規(guī)劃,融合了靜態(tài)規(guī)劃的全局信息和動態(tài)規(guī)劃的動態(tài)避障.若簡單進行兩種方法的融合,則會出現(xiàn)移動機器人運動不平滑、速度震蕩、移動機器人繞遠且效率低等問題.針對以上問題使用時間序列Bottom-Up算法對安全A*算法得到的全局最優(yōu)路徑進行預處理,提取全局最優(yōu)路徑的特征節(jié)點作為融合算法的臨時目標節(jié)點,并對動態(tài)窗口法的速度模型進行改進,基于全局最優(yōu)路徑信息,采用雙速度模型動態(tài)窗口法進行動態(tài)規(guī)劃,動態(tài)避障后采用避障重規(guī)劃機制,避免出現(xiàn)移動機器人繞遠甚至繞圈的問題.文中算法流程圖,如圖9所示.
圖9 文中算法流程圖
仿真實驗的主要參數(shù)設置如下:vmax=1.0 m·s-1;ωmax=20 rad·s-1;Δt=0.1 s;α=0.05;β=0.5;γ=0.1;av,max=0.2 m·s-2;角加速度最大值aω,max=50 rad·s-2.
兩種算法的路徑軌跡,如圖10所示.由圖10可知:初步融合算法和文中算法都能在靜態(tài)環(huán)境下根據(jù)全局信息的指引進行全局路徑規(guī)劃;文中算法路徑更加平滑.
(a) 初步融合算法 (b) 文中算法
兩種算法的速度曲線,如圖11所示.由圖11可知:初步融合算法的移動機器人多次加速、減速,速度曲線震蕩劇烈,導致移動機器人運行不穩(wěn)定,且規(guī)劃時間較長,效率不高;文中算法的速度曲線平滑,移動機器人運行平穩(wěn),規(guī)劃時間較短.
(a) 初步融合算法 (b) 文中算法
因此,文中算法可解決移動機器人減速導致的運行不平穩(wěn)、速度震蕩等問題,提高了移動機器人的運行效率.
算法性能指標的對比,如表1所示.表1中:l為路徑長度.由表1可知:算法改進前后,路徑長度幾乎沒有變化,說明文中算法仍然可以較好地在最優(yōu)路徑信息的指引下進行規(guī)劃,以保證搜索路徑的全局最優(yōu)性和安全性;路徑規(guī)劃時間從202.24 s縮短到108.85 s,文中算法的規(guī)劃效率提高了46.18%.
表1 算法性能指標的對比
為了驗證文中算法的動態(tài)避障性能,在環(huán)境中增加3個持續(xù)來回運動的障礙物.文中算法的動態(tài)避障規(guī)劃,如圖12所示.圖12中:紅色圓形為動態(tài)障礙物,按照黑色虛線來回移動;藍色實線為文中算法進行全局動態(tài)規(guī)劃時遇見動態(tài)障礙物進行避障的實際規(guī)劃路徑(動態(tài)避障實際軌跡);紅色虛線為文中算法在沒有動態(tài)障礙物時進行全局動態(tài)規(guī)劃的路徑(靜態(tài)全局規(guī)劃軌跡).
由圖12可知:文中算法能夠躲避動態(tài)障礙物,且未出現(xiàn)初步融合算法中移動機器人繞遠甚至繞圈的問題,可成功地完成全局動態(tài)路徑規(guī)劃任務.
(a) 避障前(1號動態(tài)障礙物) (b) 避障后(1號動態(tài)障礙物)
文中算法全局動態(tài)規(guī)劃路徑與速度曲線,如圖13所示.由圖13可知:文中算法可在全局最優(yōu)路徑信息的指引下很好地完成全局動態(tài)路徑規(guī)劃,躲避動態(tài)障礙物,保證路徑的平滑性和安全性;文中算法動態(tài)避障規(guī)劃時對應的移動機器人速度曲線較為平滑,有少數(shù)減速;文中算法速度平穩(wěn),遇到動態(tài)障礙物時能夠適當減速,可保證移動機器人整體運行的安全性.
(a) 全局動態(tài)規(guī)劃路徑 (b) 速度曲線
由仿真實驗可知,文中算法能夠很好地解決A*算法和動態(tài)窗口法融合過程中移動機器人運動速度曲線不平滑、速度震蕩及移動機器人繞遠導致規(guī)劃效率低的問題;文中算法遇到未知障礙物時也能表現(xiàn)出很好的性能.因此,文中算法能夠高效地完成全局動態(tài)規(guī)劃任務,并保證路徑的安全性和最優(yōu)性.
針對移動機器人全局動態(tài)路徑規(guī)劃效率較低的問題,提出一種基于安全A*算法與雙速度模型動態(tài)窗口法的全局動態(tài)路徑規(guī)劃融合算法.通過時間序列Bottom-Up算法對安全A*算法規(guī)劃的全局最優(yōu)路徑進行預處理,將全局最優(yōu)路徑的特征節(jié)點作為臨時目標節(jié)點,減少臨時目標節(jié)點的數(shù)量;使用改進后的雙速度模型動態(tài)窗口法,基于全局最優(yōu)信息進行動態(tài)規(guī)劃,使移動機器人的運行速度平穩(wěn);通過避障重規(guī)劃機制,解決動態(tài)避障后的路徑重規(guī)劃問題,避免移動機器人出現(xiàn)繞遠甚至繞圈的問題.仿真結果表明,文中算法的規(guī)劃效率提高了46.18%,可保證路徑的安全性和最優(yōu)性.