孫明,陳日輝,陳燕,陳小冰
(1.澳門科技大學(xué),澳門 999078;2.珠??萍紝W(xué)院,廣東 珠海 519041)
隨著信息技術(shù)的發(fā)展,機(jī)器人的智能性和自主性不斷增強(qiáng),新一代的自主移動(dòng)機(jī)器人(Autonomous Mobile Robot,AMR)逐步在工農(nóng)業(yè)生產(chǎn)和日常生活中發(fā)揮更加重要的作用。特別是近年來(lái),根據(jù)新冠疫情防控的需要,大規(guī)模的消毒機(jī)器人,配送機(jī)器人的使用,大大提高了工作效率,降低了人際病毒的風(fēng)險(xiǎn)。其中,路徑規(guī)劃和導(dǎo)航技術(shù)的使用,是自主移動(dòng)機(jī)器人(AMR)實(shí)現(xiàn)各項(xiàng)功能,完成各種任務(wù)的關(guān)鍵性因素。
路徑規(guī)劃是指機(jī)器人通過(guò)一定的算法規(guī)劃出一條從當(dāng)前節(jié)點(diǎn)到任務(wù)節(jié)點(diǎn)的路徑,屬于運(yùn)籌學(xué)和機(jī)器人學(xué)的基本問(wèn)題之一。根據(jù)機(jī)器人對(duì)當(dāng)前地圖環(huán)境的掌握程度,路徑規(guī)劃分為兩種類型,分別是通過(guò)激光、機(jī)器視覺(jué)等傳感器掌握局部地圖信息的局部路徑規(guī)劃,掌握全局地圖信息的全局路徑規(guī)劃。國(guó)內(nèi)外學(xué)者分別對(duì)兩種路徑規(guī)劃方法進(jìn)行了研究,探索出適用于局部路徑規(guī)劃的滾動(dòng)窗口法(陳明建,林偉等,2017)、人工勢(shì)場(chǎng)法(石為人等,2010)、模糊邏輯控制法(孫揚(yáng)智,2016)等,以及適用于全局路徑規(guī)劃的A*算法(章淑君與曹建成,2005)、蟻群算法(Dorigo,Maniezzo& Colorni,1996)、遺傳算法以及粒子群算法(王雷與李明,2017)等。
目前,機(jī)器人路徑規(guī)劃中的主流算法是A*算法以及在其基礎(chǔ)上進(jìn)行的各種改進(jìn)算法。A*算法在經(jīng)典路徑規(guī)劃的Dijkstra算法的基礎(chǔ)上發(fā)展起來(lái)的一種啟發(fā)式搜索算法,具有運(yùn)算時(shí)間短,收斂速度快,求解路徑的時(shí)間更短的優(yōu)點(diǎn),從而達(dá)到快速尋路的要求(章淑君與曹建成,2005)。作為一種全局路徑規(guī)劃算法,A*算法在動(dòng)態(tài)環(huán)境中出現(xiàn)障礙物的情況下并不適用,這時(shí)候需要引入人工勢(shì)場(chǎng)法等算法幫助機(jī)器人實(shí)時(shí)規(guī)劃出平滑安全的新路徑。
本文圍繞自主移動(dòng)機(jī)器人(AMR)在復(fù)雜動(dòng)態(tài)環(huán)境中的運(yùn)行問(wèn)題,分別從地圖構(gòu)建、定位、路徑規(guī)劃三部分,綜合考慮全局路徑規(guī)劃和局部路徑規(guī)劃問(wèn)題,提出基于雙向A*算法進(jìn)行路徑規(guī)劃和基于激光SLAM加人工勢(shì)場(chǎng)法進(jìn)行局部路徑規(guī)劃的混合導(dǎo)航算法,以提高機(jī)器人自主運(yùn)行的穩(wěn)定性和實(shí)時(shí)性。
自主移動(dòng)機(jī)器人(AMR)可以利用自身裝備的激光傳感器、攝像頭等設(shè)備,通過(guò)SLAM算法,自主構(gòu)建運(yùn)行區(qū)域的環(huán)境地圖模型并進(jìn)行自主定位。
目前,機(jī)器人進(jìn)行環(huán)境建模應(yīng)用最廣泛的是google推出的基于圖優(yōu)化的SLAM算法Cartographer,該算法使用姿態(tài)優(yōu)化進(jìn)行優(yōu)化,具有閉環(huán)檢測(cè),有良好的系統(tǒng)實(shí)時(shí)性。在計(jì)算機(jī)資源有限的情況下,能獲得更高精準(zhǔn)度的2D地圖。Cartographer算法核心思想為利用全局優(yōu)化和局部?jī)?yōu)化對(duì)機(jī)器人位姿=(ε,ε,ε)進(jìn)行優(yōu)化,其中ε和ε為機(jī)器人在和方向位移的位移量,ε為機(jī)器人繞平面旋轉(zhuǎn)的角度。激光雷達(dá)初始掃描幀記為原點(diǎn)(0,0),激光雷達(dá)掃描數(shù)據(jù)描述為={h},∈1,2,3…,,掃描數(shù)據(jù)幀映射到子圖的位姿變換記作T,公式如下:
子圖由多個(gè)掃描幀構(gòu)成,使用概率網(wǎng)格表示。每個(gè)網(wǎng)格定義兩種狀態(tài)hit和miss,每次掃描被插入概率網(wǎng)格中,將hit臨近的所有網(wǎng)格點(diǎn)加入hit集合,除已在hit集合中的點(diǎn)外,將hit與掃描點(diǎn)連接射線上的所有接觸點(diǎn)加入miss集合。沒(méi)有加入任何集合的點(diǎn)設(shè)置,已觀測(cè)到的點(diǎn)概率按照式(3)進(jìn)行更新。
使用Ceres求解器,在一個(gè)掃描被插入子圖前,和當(dāng)前的子圖進(jìn)行局部?jī)?yōu)化。此操作是為了在子圖中找到使插入掃描中所有的掃描點(diǎn)概率和最大的掃描位姿,由此便可轉(zhuǎn)變?yōu)橐粋€(gè)非線性最小二乘問(wèn)題。
Cartographer算法通過(guò)稀疏位姿調(diào)整方法來(lái)全局優(yōu)化,保存掃描幀插入子圖的位姿,當(dāng)子圖構(gòu)建完畢,使用所有對(duì)應(yīng)的掃描幀和子地圖進(jìn)行閉環(huán)檢測(cè),Cartographer框架如圖1所示。
圖1 Cartographer框架圖
機(jī)器人通過(guò)Gmapping算法成功構(gòu)建環(huán)境地圖后,需要準(zhǔn)確判斷自己的位置,才能更好的進(jìn)行路徑規(guī)劃,此時(shí)一般采用二維移動(dòng)過(guò)程中自適應(yīng)蒙特卡洛定位(Adaptive Monte Carlo Localization,AMCL),AMCL采用粒子濾波器來(lái)跟蹤已經(jīng)知道的地圖中機(jī)器人位姿,對(duì)于大范圍的局部定位問(wèn)題工作良好。該算法可在已知地圖的條件下,實(shí)時(shí)估計(jì)機(jī)器人的位姿信息。
AMCL算法思路如下:
位姿信息由機(jī)器人時(shí)刻的狀態(tài)x的后驗(yàn)信度決定,使用S表示一組有限的粒子集,則后驗(yàn)信度分布為:
AMCL算法在一段時(shí)間間隔內(nèi)通過(guò)采集S和重采集S來(lái)繪制粒子,更新姿態(tài)并計(jì)算出后驗(yàn)置信分布bel(x)在當(dāng)前狀態(tài)下的離散估計(jì):
式中為樣本估計(jì)概率。
重采樣的計(jì)算公式如下:
更新后的粒子集為:
使粒子均滿足:
自主移動(dòng)機(jī)器人(AMR)在地圖建模和自主定位完成后,根據(jù)收到的目標(biāo)節(jié)點(diǎn)信息,既可利用A*算法進(jìn)行路徑規(guī)劃。
A*算法利用啟發(fā)函數(shù)對(duì)遍歷方向進(jìn)行引導(dǎo),使用評(píng)估函數(shù)計(jì)算每個(gè)格子的代價(jià)值(),是該算法中的核心,其啟發(fā)函數(shù)公式如下:
式中()為當(dāng)前搜索節(jié)點(diǎn)到起點(diǎn)的真實(shí)距離代價(jià),()為當(dāng)前搜索節(jié)點(diǎn)到終點(diǎn)預(yù)測(cè)距離代價(jià)。為了實(shí)現(xiàn)最優(yōu)路徑規(guī)劃,常用距離代價(jià)包括曼哈頓距離、對(duì)角線距離和歐幾里得距離,它們對(duì)應(yīng)的距離如圖2所示,其中線1表示曼哈頓距離,適合4象限(東-西-南-北)運(yùn)動(dòng),路徑規(guī)劃速度相對(duì)較快;線2表示對(duì)角線距離,適合8象限(東-東南-南-西南-西-西北-北-東北)運(yùn)動(dòng);線3表示歐幾里得距離,適合任意角度的運(yùn)動(dòng),路徑規(guī)劃的速度較慢。
哈曼頓距離不符合大部分機(jī)器人的實(shí)際運(yùn)動(dòng)場(chǎng)景,歐幾里距離需要遍歷大量節(jié)點(diǎn),導(dǎo)致規(guī)劃速度較慢。在范圍較大且不規(guī)則地圖環(huán)境下,對(duì)角線距離比較符合真實(shí)機(jī)器人的移動(dòng)模型并且路徑規(guī)劃的時(shí)間較快,因此本文采用對(duì)角線距離(Diagonal Distance)作為對(duì)()的計(jì)算。
對(duì)角線距離(Diagonal Distance)的計(jì)算公式如下:
式中x和y為當(dāng)前節(jié)點(diǎn)的水平位置和垂直位置,和為終點(diǎn)的水平位置和垂直位置。
圖2 三種距離圖示
A*算法在運(yùn)行中需要兩個(gè)列表來(lái)儲(chǔ)存遍歷的點(diǎn),Open List用來(lái)存儲(chǔ)被遍歷的點(diǎn),Close List用來(lái)存儲(chǔ)被選中的點(diǎn)。每個(gè)點(diǎn)被遍歷時(shí)會(huì)計(jì)算其(),Close List中的點(diǎn)被加入后不會(huì)再更新,每個(gè)點(diǎn)存儲(chǔ)著一個(gè)指向其父節(jié)點(diǎn)的指針和該點(diǎn)的()。
初始化兩個(gè)列表為空,然后將起點(diǎn)加入Open List。取出Open List中()最小的值加入Close List中,遍歷取出點(diǎn)的八個(gè)象限的所有點(diǎn),如果該點(diǎn)為障礙物或者已在Close List中,則跳過(guò)該點(diǎn)。如果該點(diǎn)在Open List列表中,則重新計(jì)算該點(diǎn)的父節(jié)點(diǎn),否則將該點(diǎn)加入Open List中,繼續(xù)遍歷直到終點(diǎn)或者Open List為空。如果Open List為空,說(shuō)明沒(méi)有路徑可以到達(dá)終點(diǎn)。如果遍歷到終點(diǎn),結(jié)束遍歷,隨著終點(diǎn)的父節(jié)點(diǎn)直到起點(diǎn)為該次尋路的最優(yōu)路徑,A-star算法流程如圖3所示。
伴隨著機(jī)器人運(yùn)行區(qū)域的擴(kuò)大,地圖規(guī)模也越來(lái)越大,傳統(tǒng)A-star算法隨著搜索空間增大,擴(kuò)展節(jié)點(diǎn)增大,搜索速度下降。同時(shí)規(guī)劃出來(lái)的路徑存在折角過(guò)大,路徑不夠平滑的問(wèn)題。
本文通過(guò)改進(jìn),讓A-star算法從起點(diǎn)和終點(diǎn)同時(shí)進(jìn)行遍歷,直到兩邊遍歷過(guò)同一個(gè)柵格,將終點(diǎn)遍歷的路徑進(jìn)行反向,獲取到一條完整的起點(diǎn)到終點(diǎn)的路徑,改進(jìn)的A-star算法流程如圖4所示。
圖3 A-star算法流程圖
圖4 改進(jìn)的A-star算法流程圖
在實(shí)際運(yùn)行中,沿著規(guī)劃路徑前進(jìn)的機(jī)器人會(huì)遇到各種動(dòng)態(tài)的障礙物,形成路徑?jīng)_突,沿著既定路線前進(jìn)的機(jī)器人需要重新規(guī)劃新的路徑,既進(jìn)行局部路徑規(guī)劃。人工勢(shì)場(chǎng)法結(jié)構(gòu)簡(jiǎn)單,廣泛應(yīng)用于機(jī)器人躲避障礙的局部路徑規(guī)劃。
人工勢(shì)場(chǎng)法(Artificial Potential Field Method)由Khatib在1994年提出,它通過(guò)將機(jī)器人在場(chǎng)景中的移動(dòng)抽象到人工引力場(chǎng)之中,通過(guò)將機(jī)器人與目標(biāo)產(chǎn)生的“斥力”和障礙物與機(jī)器人產(chǎn)生的“引力”之間產(chǎn)生的“合力”控制機(jī)器人的運(yùn)動(dòng),圖5為人工勢(shì)場(chǎng)法的示意圖。通過(guò)建立對(duì)應(yīng)的勢(shì)能場(chǎng)函數(shù)解決避障的問(wèn)題。該方法能夠充分考慮機(jī)器人與每個(gè)障礙物之間產(chǎn)生的斥力,在A*算法找到最短路徑的同時(shí)避免碰撞。
目標(biāo)位置與移動(dòng)機(jī)器人之間引力場(chǎng)為:
機(jī)器人所受引力方向?yàn)橐?shì)場(chǎng)負(fù)梯度方向:
圖5 人工勢(shì)場(chǎng)法示意圖
設(shè)以障礙物為中心的斥力場(chǎng)影響半徑為ρ,機(jī)器人與障礙物之間的距離為,當(dāng)機(jī)器人離開斥力場(chǎng)影響范圍,所受到的斥力為0,則斥力場(chǎng)大小為:
機(jī)器人所受斥力方向?yàn)槌饬?shì)場(chǎng)負(fù)梯度方向:
機(jī)器人所受合力大小為:
在復(fù)雜動(dòng)態(tài)動(dòng)態(tài)環(huán)境路徑規(guī)劃中,采取雙向A*加人工勢(shì)場(chǎng)法的混合算法的機(jī)器人更具有優(yōu)勢(shì),如圖6所示,混合算法的實(shí)現(xiàn)流程是:
(1)機(jī)器人采取雙向A*算法進(jìn)行路徑規(guī)劃
(2)機(jī)器人在向目標(biāo)節(jié)點(diǎn)運(yùn)行過(guò)程中使用激光雷達(dá)等傳感器對(duì)行進(jìn)路徑進(jìn)行搜索,當(dāng)發(fā)現(xiàn)障礙物存在時(shí),啟動(dòng)人工勢(shì)場(chǎng)算法進(jìn)行局部路徑規(guī)劃。
(3)完成局部規(guī)劃后,判斷子目標(biāo)點(diǎn)是否為終點(diǎn),若是則完成路徑規(guī)劃,否則更新局部目標(biāo)點(diǎn)。
圖6 混合算法流程圖
本文仿真模擬采用的計(jì)算機(jī)配置如表1所示。
表1 仿真環(huán)境配置
本文利用Gazebo系統(tǒng)仿真軟件,選用Kobuki底盤作為仿真實(shí)驗(yàn)主體,該底盤使用二輪差分驅(qū)動(dòng)式,具有可擴(kuò)展性強(qiáng)、易于搭建和配置的優(yōu)點(diǎn),在ROS系統(tǒng)上具有良好的適配性,Kobuki底盤參數(shù)如表2所示。傳感器使用思嵐A2激光雷達(dá)進(jìn)行機(jī)器人周圍環(huán)境搜索和建模,RPLIDAR A2參數(shù)如表3所示??梢源_保機(jī)器人快速度移動(dòng)時(shí)的地圖構(gòu)建質(zhì)量。
表2 Kobuki底盤參數(shù)
高(mm) 124.8重量(kg) 2.35最大平移速度(cm·s-1) 70最大旋轉(zhuǎn)速度(°/s) 180里程計(jì)52 ticks/enc rev 2 578.33 ticks/wheel rev 11.7 ticks/mm陀螺儀 1軸(110度/秒)
表3 RPLIDAR A2參數(shù)
為便于研究,將移動(dòng)機(jī)器人模型進(jìn)行改造:
(1)對(duì)kobuki底盤模型進(jìn)行簡(jiǎn)化,刪掉無(wú)用傳感器,只留下左右輪、底盤、前后滾輪等必要的部件。
(2)在底盤上搭建支架,加入激光雷達(dá)傳感器。
(3)為機(jī)器人配置各個(gè)部件的碰撞屬性。
(4)設(shè)置關(guān)節(jié)類型和發(fā)布TF樹。
(5)修改Gazebo仿真中機(jī)器人的傳感器的參數(shù)和話題。
建好的機(jī)器人拓?fù)潢P(guān)系如圖7所示。
在Rviz中查看機(jī)器人模型的各項(xiàng)參數(shù)并進(jìn)行調(diào)試。圖8、圖9為TF變換關(guān)系正視圖與仰視圖,使用joint_state_publisher_gui節(jié)點(diǎn)檢查動(dòng)力輪的旋轉(zhuǎn)方向是否正確,觀察機(jī)器人模型各個(gè)link的TF變換關(guān)系,是否都與base_footprint有映射。
圖7 機(jī)器人拓?fù)潢P(guān)系圖
圖8 TF變換關(guān)系正視圖
圖9 TF變換關(guān)系仰視圖
完成機(jī)器人模型的構(gòu)建后,使用Gazebo建立仿真環(huán)境,模擬機(jī)器人在真實(shí)的公共場(chǎng)合中運(yùn)作。Gazebo可以使用Building Editor快速的繪制外圍墻壁,同時(shí)里面擁有大量的立方體、垃圾桶、桌子等模型,可以極大還原的還原真實(shí)世界。環(huán)境構(gòu)建的步驟如下:
(1)確定環(huán)境的外圍墻壁的形狀、位置和尺寸;
(2)確定環(huán)境中的障礙物的類型、尺寸和數(shù)量,繪制障礙物模型;
(3)確定各個(gè)類型的障礙物的位置,根據(jù)實(shí)際需要擺放在合適的位置;
(4)使用Building Editor繪制圍墻,并將障礙物模型加入到環(huán)境中;
(5)調(diào)整好合適的觀察視角后保存環(huán)境為.world文件,方便后續(xù)調(diào)用。
通過(guò)研究和觀察,本文將對(duì)選取幾種典型的公共場(chǎng)所環(huán)境地形進(jìn)行研究,建完的地圖模型如圖10~圖13所示。
圖10 O形地圖模型
圖11 S形地圖模型
圖12 U形地圖模型
圖13 L形地圖模型
環(huán)境模型建立好后,由機(jī)器人自行探索環(huán)境進(jìn)行SLAM建圖。本文使用Cartographer算法進(jìn)行地圖建立,利用Rviz可視化建立的地圖模型數(shù)據(jù)。建圖步驟如下:
(1)啟動(dòng)Launch打開啟動(dòng)Gazebo并加載地圖和機(jī)器人模型到環(huán)境中;
(2)運(yùn)行Cartographer算法構(gòu)建地圖的Launch文件;
(3)運(yùn)行Rviz,訂閱/submap_list和/scan話題;
(4)運(yùn)行move_base功能包,接收控制機(jī)器人的話題;
(5)使用2D Nav Goal功能發(fā)布目標(biāo)點(diǎn),使機(jī)器人運(yùn)動(dòng)完成地圖的構(gòu)建。
待地圖構(gòu)建完成,使用命令“rosservice call /finish_trajectory 0”停止接收數(shù)據(jù),構(gòu)建好的地形圖如圖14~圖17所示。
圖14 O形地圖構(gòu)建
圖15 S形地圖構(gòu)建
圖16 U形地圖構(gòu)建
圖17 L形地圖構(gòu)建
(1)運(yùn)行rosservice call /write_state "{filename:'路徑/文件名.pbstream'}"序列化保存當(dāng)前的狀態(tài)。
(2)運(yùn)行cartographer_ros包里的cartographer_pbstream_to_ros_map將pbstream轉(zhuǎn)換為pgm和yaml以便后續(xù)使用。
基于完成的準(zhǔn)備工作,使用改進(jìn)的A-star算法和人工勢(shì)場(chǎng)法的混合算法,驗(yàn)證不同環(huán)境地形下機(jī)器人自主運(yùn)作的避障能力。具體步驟如下:
(1)編寫路徑規(guī)劃算法的C++文件,使用插件注冊(cè)到ROS中來(lái),查看可用插件,如圖18所示。
圖18 查看ROS路徑規(guī)劃可用插件
(2)將move_base的全局規(guī)劃替換成A-star算法,本地規(guī)劃替換成人工勢(shì)場(chǎng)法。
(3)在地圖模型中加入障礙物,模擬現(xiàn)實(shí)環(huán)境中的障礙。
(4)使用上述建立好的地圖模型,加入地圖啟動(dòng)的配置中。
(5)編寫Launch文件一鍵啟動(dòng)環(huán)境,包括仿真環(huán)境、機(jī)器人模型、Rviz等的啟動(dòng)。
(6)啟動(dòng)move_base和amcl功能包。
(7)編寫Python文件,使反復(fù)機(jī)器人到達(dá)選定終點(diǎn)并回到選定起點(diǎn),輸出路徑規(guī)劃時(shí)間和路徑長(zhǎng)度等信息(圖19~圖22)。
圖19 O形地圖路徑規(guī)劃
圖20 S形地圖路徑規(guī)劃
圖21 U形地圖路徑規(guī)劃
圖22 L形地圖路徑規(guī)劃
本文將A-star算法和人工勢(shì)場(chǎng)法混合算法與傳統(tǒng)的A-star算法在不同地形中進(jìn)行比較,以研究該混合算法在不同場(chǎng)景下的普適性,并驗(yàn)證改進(jìn)的A-star算法相對(duì)于A-star算法是否有更好的性能。本文進(jìn)行兩組實(shí)驗(yàn),將所獲得的實(shí)驗(yàn)數(shù)據(jù)匯總成表格如表4,表5所示。
表4 A-star算法實(shí)驗(yàn)數(shù)據(jù)
表5 改進(jìn)A-star算法和人工勢(shì)場(chǎng)法混合算法實(shí)驗(yàn)數(shù)據(jù)
由路徑規(guī)劃結(jié)果和實(shí)驗(yàn)數(shù)據(jù)可以得出:(1)移動(dòng)機(jī)器人能避開障礙得到平滑路徑,行進(jìn)過(guò)程中再出現(xiàn)障礙依舊可以避開,即使遇到無(wú)法避免的障礙也能及時(shí)停下避免碰撞,算法具有有效性,在完成任務(wù)前提下保障安全;(2)改進(jìn)的A-star算法規(guī)劃的路徑相對(duì)于傳統(tǒng)的A-star算法較長(zhǎng);(3)改進(jìn)的A-star算法相較于傳統(tǒng)的 A-star算法具有更平滑的路線,使平均速度增快;(4)改進(jìn)的A-star算法在U型地形中規(guī)劃路徑需要的時(shí)間更多。
本文通過(guò)系統(tǒng)仿真,搭建了地圖模型、機(jī)器人模型、環(huán)境地圖,驗(yàn)證了改進(jìn)的A*算法和人工勢(shì)場(chǎng)法混合算法的路徑規(guī)劃的可行性和有效性。通過(guò)選取幾種常見的環(huán)境地形,并將路徑規(guī)劃時(shí)間、平均速度、路徑長(zhǎng)度、重新規(guī)劃次數(shù)等實(shí)驗(yàn)數(shù)據(jù)進(jìn)行了分析對(duì)比,最后得出結(jié)論,驗(yàn)證了改進(jìn)的A-star算法相對(duì)于傳統(tǒng)的A-star算法規(guī)劃的路徑更加平滑,能夠適應(yīng)不同的環(huán)境地形,具有良好的魯棒性。改進(jìn)的A-star算法規(guī)劃的平均規(guī)劃時(shí)間和平均運(yùn)行時(shí)間分別減少了26.67%和23.4%,除此之外,平滑度提升明顯??梢詾橹悄軝C(jī)器人使用改進(jìn)A*算法和人工勢(shì)場(chǎng)法相結(jié)合的混合導(dǎo)航算法進(jìn)行路徑規(guī)劃提供一種可靠的技術(shù)方案。