羅智杰,黃子濤,許嘉志,潘仲宇,曹 亮,劉雙印
(1.仲愷農(nóng)業(yè)工程學(xué)院信息科學(xué)與技術(shù)學(xué)院,廣東 廣州 510225;2.仲愷農(nóng)業(yè)工程學(xué)院智慧農(nóng)業(yè)工程技術(shù)研究中心,廣東 廣州 510225;3.廣州市農(nóng)產(chǎn)品質(zhì)量安全溯源信息技術(shù)重點(diǎn)實(shí)驗(yàn)室,廣東 廣州 510225)
進(jìn)入電子信息化時(shí)代,農(nóng)業(yè)領(lǐng)域已向機(jī)械化、智能化、信息化方向靠攏。農(nóng)業(yè)機(jī)器人已成為一種具備路徑規(guī)劃,環(huán)境障礙感知和能夠完成一系列動(dòng)作行為等功能為一體的智能化農(nóng)業(yè)設(shè)備?,F(xiàn)階段,國(guó)內(nèi)外現(xiàn)有的農(nóng)業(yè)機(jī)器人的主要類型有播種機(jī)器人、采摘機(jī)器人、果蔬分選機(jī)器人、除草機(jī)器人等[1,2]。為保障機(jī)器人能夠適應(yīng)復(fù)雜多變的農(nóng)業(yè)環(huán)境,其主要技術(shù)主要包括定位導(dǎo)航技術(shù)、運(yùn)動(dòng)控制技術(shù)、傳感器技術(shù)、圖像識(shí)別技術(shù)[3],要求農(nóng)業(yè)機(jī)器人具備較高的環(huán)境感知、定位和避障的能力[4]。對(duì)于企業(yè)用戶來(lái)說(shuō),農(nóng)業(yè)機(jī)器人的效率和路徑合理度是一個(gè)重要的指標(biāo)。因此如何合理規(guī)劃路徑是農(nóng)業(yè)機(jī)器人研究的熱點(diǎn)之一。近年來(lái),有關(guān)機(jī)器人路徑規(guī)劃算法的研究不斷被提出和研究,其中幾種典型的算法有:人工勢(shì)場(chǎng)法[5]、蟻群算法[6]、模擬退火法[7]、粒子群算法[8]、A*算法[9]等。
在實(shí)際農(nóng)業(yè)場(chǎng)景中,尤其是對(duì)大型農(nóng)場(chǎng)而言,單靠一個(gè)農(nóng)業(yè)機(jī)器人運(yùn)作處理是難以實(shí)現(xiàn)的,而多個(gè)機(jī)器人作業(yè)又涉及到協(xié)作問題,因此有必要考慮多個(gè)機(jī)器人的路徑規(guī)劃。為了解決蟻群算法在多移動(dòng)機(jī)器人路徑規(guī)劃應(yīng)用中的不足,本文在基本蟻群算法的基礎(chǔ)上,對(duì)啟發(fā)信息函數(shù)做出了改進(jìn),同時(shí)提出死鎖問題的解決方案,既保證了算法的速度,又避免了算法的提前收斂。另外,針對(duì)未知運(yùn)動(dòng)狀態(tài)和已知運(yùn)動(dòng)狀態(tài)的障礙物,本文分別討論了動(dòng)態(tài)窗口搭配區(qū)域膨脹以及正碰、側(cè)碰兩種避碰策略,進(jìn)一步加強(qiáng)了機(jī)器人應(yīng)對(duì)多變的室內(nèi)農(nóng)業(yè)環(huán)境的能力。本文所研究改進(jìn)的算法對(duì)于用在障礙物較多,路徑規(guī)劃較復(fù)雜的大型農(nóng)場(chǎng)中有較好的效果。本文最后也討論了多個(gè)機(jī)器人在同一環(huán)境下的路徑規(guī)劃問題。
本研究首先采用柵格法[10-12]進(jìn)行環(huán)境地圖的創(chuàng)建,以此來(lái)模擬應(yīng)用場(chǎng)景,規(guī)格為30×30。對(duì)著環(huán)境地圖從上到下,從左到右分別進(jìn)行1~900 的編號(hào),如圖1(a)所示。在這個(gè)環(huán)境中,黑色柵格表示靜態(tài)障礙物,白色柵格表示機(jī)器人的自由可行區(qū)域,分別如圖1(b)所示。建立工作空間環(huán)境時(shí),把實(shí)際的障礙物經(jīng)過膨脹處理后映射到柵格地圖中,因此可認(rèn)為柵格地圖中的邊界均為安全邊界,并將機(jī)器人視為質(zhì)點(diǎn)。
圖1 環(huán)境的柵格地圖
環(huán)境地圖中各柵格的中心點(diǎn)坐標(biāo)由其對(duì)應(yīng)的柵格序號(hào)(xi,yi)決定,其算法為
式中 i為柵格序號(hào);Nx為每行柵格的個(gè)數(shù);Ny為每列柵格的個(gè)數(shù)。
根據(jù)實(shí)際的農(nóng)業(yè)場(chǎng)景情況,規(guī)定機(jī)器人的行走方向?yàn)槲鞅?、北、東北、東、東南、南、西南、西8個(gè)方向,且每次前進(jìn)一個(gè)步長(zhǎng)的距離。如圖2 所示。
圖2 機(jī)器人行走方向
蟻群算法[13]是一種應(yīng)用于組合優(yōu)化問題的啟發(fā)式搜索算法,在解決離散組合優(yōu)化方面具有良好的性能,最早應(yīng)用在旅行商(TSP)問題上。通常,我們用(t)表示t 時(shí)刻螞蟻k 選擇從柵格i 轉(zhuǎn)移到柵格j 的概率,也稱隨機(jī)比例規(guī)則。信息素濃度τxy(t)和局部啟發(fā)信息ηxy(t)共同決定(t),其算法為
螞蟻k 下一步允許選擇的柵格的集合為
式中 m為蟻群中螞蟻的數(shù)量,只;禁忌表tabuk(i)記錄了螞蟻k當(dāng)前所走過的柵格;α為信息素啟發(fā)因子;β為期望值啟發(fā)因子;τij(t)為t時(shí)刻在柵格i和j中間殘留的信息素,初始時(shí)刻,各條路徑上的信息素相等,即τij(0)=C(const)。
啟發(fā)信息函數(shù)ηij(t)計(jì)算公式為
螞蟻完成一次遍歷后,需要對(duì)各條路徑上的殘留信息素作消散處理,避免信息素過多影響遍歷結(jié)果。更新機(jī)制為
其中,式(6)表示第k 只螞蟻留在路徑(i,j)上的信息素增量,Q 為常數(shù),Lk為優(yōu)化問題的目標(biāo)函數(shù)值,表示第k 只螞蟻在本次循環(huán)中所走路徑的長(zhǎng)度;式(7)表示每只螞蟻在柵格i 和j 路徑上增加的信息素之和;ρ為信息素?fù)]發(fā)系數(shù)。
值得注意的是,現(xiàn)階段,在不同的數(shù)學(xué)模型(如螞蟻數(shù)量系統(tǒng)、螞蟻密度系統(tǒng))中,對(duì)于Δτkij(t)給出的定義略有區(qū)別。
2.2.1 死鎖回退策略
基本蟻群算法存在的一個(gè)問題是容易過早收斂,導(dǎo)致規(guī)劃的路徑得不到較優(yōu)解。另外,在復(fù)雜的空間模型中(如大面積農(nóng)場(chǎng)),螞蟻容易陷入死鎖問題(如圖3),造成算法停滯。一種解決的辦法是采用早期死亡螞蟻策略[14],即當(dāng)螞蟻陷入死鎖時(shí),為防止程序停滯,結(jié)束本只螞蟻的搜索,并且不對(duì)當(dāng)前這只螞蟻?zhàn)鋈魏翁幚?,即不將該螞蟻的搜索路徑、留下的信息素等信息進(jìn)行保留。這種方案會(huì)導(dǎo)致有效螞蟻的數(shù)量在減少,此外還可能會(huì)導(dǎo)致蟻群算法得不到較優(yōu)解。
圖3 螞蟻陷入死鎖現(xiàn)象
考慮到室內(nèi)農(nóng)業(yè)應(yīng)用的實(shí)際情況,本文利用死鎖回退策略[15,16],該策略通過犧牲一些算法時(shí)間來(lái)得到路徑的較優(yōu)解。螞蟻死鎖回退策略具體為:若螞蟻陷入死鎖,則回退至上一次所在的柵格,并將螞蟻陷入死鎖的所在柵格臨時(shí)標(biāo)記為靜態(tài)障礙物,防止螞蟻再次陷入同樣的死鎖問題。在回退處理之后,再次判斷該只螞蟻在當(dāng)前柵格是否還是陷入死鎖。若是,則再次進(jìn)入死鎖回退的策略當(dāng)中;否則,進(jìn)入下一個(gè)柵格的選擇步驟。在本文的研究試驗(yàn)中,我們將各只螞蟻視為相互獨(dú)立,即它們?cè)谙萑胨梨i問題后所產(chǎn)生的靜態(tài)障礙物只對(duì)自己有效,一只螞蟻完成一輪搜索后,其產(chǎn)生的臨時(shí)靜態(tài)障礙物也隨之消失。這種方法能夠有效避免早期螞蟻陷入死鎖,產(chǎn)生過多的靜態(tài)障礙物導(dǎo)致算法提前收斂,規(guī)劃出不理想的搜索路徑。在空間越大的模型(如大面積的農(nóng)場(chǎng))中,這種效果表現(xiàn)的就越顯著。
2.2.2 啟發(fā)信息函數(shù)改進(jìn)
此外,本文對(duì)啟發(fā)信息函數(shù)做了一些針對(duì)性的優(yōu)化,即將每一柵格到目標(biāo)柵格的直線距離的倒數(shù)作為啟發(fā)信息函數(shù),減少了一定的計(jì)算量,提高算法速度。修改后的啟發(fā)信息函數(shù)表示為
式中 i為當(dāng)前所在的柵格;j為可前往的柵格的編號(hào);e為目標(biāo)柵格的編號(hào)。
2.2.3 路徑規(guī)劃步驟
本算法的程序流程如圖4 所示,具體算法步驟如下。
圖4 本研究的算法程序流程圖
Step1:根據(jù)實(shí)際農(nóng)業(yè)應(yīng)用場(chǎng)景,利用柵格法對(duì)整體空間進(jìn)行二維平面建模。
Step2:對(duì)算法的相關(guān)參數(shù)進(jìn)行初始化操作。
Step3:根據(jù)輪盤賭法選擇下一個(gè)相鄰的自由柵格。
Step4:更新禁忌表,將當(dāng)前所在柵格標(biāo)記為已去過柵格,避免該柵格被本只螞蟻再次選擇。
Step5:當(dāng)本次迭代的所有螞蟻完成路徑搜索后,對(duì)所有路徑上的信息素進(jìn)行更新操作。
Step6:如果迭代完畢,則輸出算法結(jié)果;否則,重置禁忌表,并跳轉(zhuǎn)到Step3。
為了對(duì)兩種算法進(jìn)行比較,在Matlab R2018b 平臺(tái)上進(jìn)行仿真試驗(yàn)。試驗(yàn)中算法的各項(xiàng)參數(shù)分別為α=1.5,β=7,ρ=0.3,Q=5,螞蟻數(shù)量為50 只,最大迭代次數(shù)為100。圖5—圖8 分別為采用基本蟻群算法和改進(jìn)蟻群算法對(duì)單個(gè)機(jī)器人進(jìn)行路徑規(guī)劃的收斂曲線趨勢(shì)圖及運(yùn)動(dòng)軌跡圖。
圖5 基本蟻群算法的運(yùn)動(dòng)路徑
圖6 改進(jìn)蟻群算法的運(yùn)動(dòng)路徑
圖7 基本蟻群算法的收斂曲線
圖8 改進(jìn)蟻群算法的收斂曲線
值得注意的是,從本次試驗(yàn)比較結(jié)果來(lái)看,雖然兩種算法都能得到給定空間模型的最優(yōu)解,但從多次試驗(yàn)數(shù)據(jù)觀察發(fā)現(xiàn),改進(jìn)蟻群算法得到優(yōu)解的概率要高于基本蟻群算法,顯得更加穩(wěn)定。表1 給出了在參數(shù)相同的情況下兩種算法的各10 次試驗(yàn)數(shù)據(jù)統(tǒng)計(jì)。從表1 中的數(shù)據(jù)可以看到,改進(jìn)蟻群算法10 次試驗(yàn)得到的平均路徑長(zhǎng)度要優(yōu)于基本蟻群算法得到的平均路徑長(zhǎng)度,反映了改進(jìn)蟻群算法的穩(wěn)定性要高于基本蟻群算法的穩(wěn)定性,且改進(jìn)蟻群算法出現(xiàn)的最差路徑長(zhǎng)度接近于平均值,沒有出現(xiàn)像基本蟻群算法那樣有較大的波動(dòng)。
表1 10次試驗(yàn)數(shù)據(jù)統(tǒng)計(jì)
在實(shí)際的室內(nèi)農(nóng)業(yè)環(huán)境中,為保證蔬菜等農(nóng)產(chǎn)品的精準(zhǔn)培育,智能監(jiān)測(cè)設(shè)備的數(shù)目會(huì)多于室外農(nóng)業(yè)環(huán)境。因此其不可預(yù)測(cè)事件發(fā)生的概率也較高。例如,為了改善室內(nèi)農(nóng)業(yè)的監(jiān)測(cè)系統(tǒng),會(huì)將技術(shù)更加先進(jìn)的傳感器設(shè)備添加到室內(nèi)農(nóng)業(yè)場(chǎng)景中,而這個(gè)設(shè)備相對(duì)于系統(tǒng)之前建模的空間來(lái)說(shuō),是未知的,對(duì)于室內(nèi)農(nóng)業(yè)機(jī)器人而言,新添加的傳感器設(shè)備則視為一個(gè)未知的動(dòng)態(tài)障礙物。因此,為了提高農(nóng)業(yè)機(jī)器人的有效運(yùn)作,未知物體的存在因素是必須考慮的。假設(shè)未知物體的運(yùn)動(dòng)狀態(tài)是不可預(yù)測(cè)的,此時(shí),需要借助機(jī)器人的傳感器設(shè)備完成對(duì)動(dòng)態(tài)障礙物的檢測(cè),必要時(shí)采取預(yù)先設(shè)定的避障策略進(jìn)行避障處理。本文采用的是基于滾動(dòng)窗口策略對(duì)動(dòng)態(tài)障礙物進(jìn)行檢測(cè)[17,18]。機(jī)器人每到達(dá)一個(gè)柵格位置,進(jìn)行一次窗口檢測(cè)。如果檢測(cè)到動(dòng)態(tài)障礙物在滾動(dòng)窗口范圍內(nèi),則以動(dòng)態(tài)障礙物當(dāng)前位置為中心做膨脹處理,即將其附近的柵格設(shè)為灰色障礙物(不包括機(jī)器人所在柵格,如圖9)。如果膨脹區(qū)域占據(jù)了機(jī)器人的原路徑,則在原路徑的基礎(chǔ)上查找機(jī)器人當(dāng)前所在柵格之后的第一個(gè)未被占據(jù)的柵格,并以該節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn),當(dāng)前節(jié)點(diǎn)為源節(jié)點(diǎn),做局部路徑規(guī)劃,將該局部路徑添加到原路徑中,形成機(jī)器人的實(shí)際行走路徑。
圖9 動(dòng)態(tài)未知障礙物膨脹處理
本試驗(yàn)在環(huán)境地圖及各項(xiàng)參數(shù)依舊不變的情況下,在柵格地圖空間中設(shè)置了兩個(gè)動(dòng)態(tài)障礙物,這兩個(gè)動(dòng)態(tài)障礙物相對(duì)機(jī)器人而言其運(yùn)動(dòng)狀態(tài)是未知的。如圖10(a)所示,兩個(gè)星號(hào)分別代表兩個(gè)動(dòng)態(tài)障礙物,紅色質(zhì)點(diǎn)代表機(jī)器人,紅色虛線表示機(jī)器人初始規(guī)劃的路徑。如圖10(b)所示,藍(lán)色實(shí)線代表機(jī)器人實(shí)際的行走路線。圖10(c)表示當(dāng)機(jī)器人遇到第一個(gè)動(dòng)態(tài)障礙物時(shí),且該動(dòng)態(tài)障礙物在滾動(dòng)窗口范圍內(nèi),對(duì)動(dòng)態(tài)障礙物進(jìn)行膨脹處理。圖10(d)表示機(jī)器人觸發(fā)了避障策略,進(jìn)行局部路徑規(guī)劃動(dòng)作。圖10(e)表示機(jī)器人遇到第二個(gè)動(dòng)態(tài)障礙物,且該動(dòng)態(tài)障礙物與機(jī)器人相鄰,在對(duì)其作膨脹處理時(shí),機(jī)器人所在的柵格不作處理,并進(jìn)行局部路徑規(guī)劃。圖10(f)、圖10(g)表示機(jī)器人成功避開第二個(gè)動(dòng)態(tài)障礙物后,繼續(xù)按原路徑前進(jìn)。圖10(h)表示機(jī)器人到達(dá)目的地,并給出了實(shí)際路線(藍(lán)色實(shí)線)和初始路線(紅色虛線)的對(duì)照。
圖10 改進(jìn)算法的動(dòng)態(tài)避障仿真試驗(yàn)圖
從試驗(yàn)結(jié)果可以看出,依賴本研究改進(jìn)的蟻群算法,農(nóng)業(yè)機(jī)器人可以順利避開靜態(tài)和動(dòng)態(tài)障礙物,順利的到達(dá)目標(biāo)位置。并且對(duì)比默認(rèn)路徑與動(dòng)態(tài)修改后的路徑,其運(yùn)動(dòng)軌跡較為接近。因此表示局部規(guī)劃的路徑較為有效和穩(wěn)定。
一般來(lái)說(shuō),單個(gè)移動(dòng)機(jī)器人的工作能力是有限的,而多個(gè)移動(dòng)機(jī)器人的協(xié)調(diào)工作能使得工作效率得到大幅度的提升。在室內(nèi)農(nóng)業(yè)的應(yīng)用場(chǎng)景下,多個(gè)機(jī)器人各自規(guī)劃的路線難免重合產(chǎn)生碰撞的風(fēng)險(xiǎn),從而影響有序的正常工作狀態(tài)。假設(shè)在各個(gè)機(jī)器人之間具備一定的通信能力的情況下,機(jī)器人彼此之間能夠知道對(duì)方的運(yùn)動(dòng)狀態(tài)(位置)。如果能夠?qū)?dòng)態(tài)窗口掃描到的機(jī)器人障礙物確定為已知運(yùn)動(dòng)狀態(tài)的機(jī)器人,即可以采用更合理的避碰策略。因此在有限的空間范圍內(nèi),如何讓機(jī)器人相互之間避免碰撞是提高工作效率的關(guān)鍵所在。在本研究中,把機(jī)器人之間可以看作是已知運(yùn)動(dòng)狀態(tài)的動(dòng)態(tài)障礙物。但是與未知運(yùn)動(dòng)狀態(tài)的動(dòng)態(tài)障礙物的避碰策略不同,將不再采用膨脹的方法進(jìn)行處理,而是根據(jù)運(yùn)動(dòng)方向判定兩個(gè)機(jī)器人是否存在碰撞的可能性。根據(jù)實(shí)際應(yīng)用調(diào)研發(fā)現(xiàn),碰撞大致可以分為兩大類:正碰和側(cè)碰。
本文采用的一種判定是否碰撞的思想是:將機(jī)器人的當(dāng)前節(jié)點(diǎn)和下一節(jié)點(diǎn)兩點(diǎn)之間看作是一條線段,兩個(gè)機(jī)器人則有兩條線段,通過判定這兩條線段是否相交,則可判定兩個(gè)機(jī)器人下一步是否產(chǎn)生碰撞。實(shí)現(xiàn)這種思想的一種常用的方法是通過向量叉積來(lái)判斷,這種方法判斷線段是否相交需要完成兩個(gè)關(guān)鍵步驟:快速排斥試驗(yàn)和跨立試驗(yàn)。
1)快速排斥試驗(yàn)。判斷兩條線段在坐標(biāo)軸x 以及在坐標(biāo)軸y 上的投影是否有重合。即判斷一條線段中x 軸坐標(biāo)較大的端點(diǎn)是否小于另一條線段中x 軸坐標(biāo)較小的端點(diǎn),若是,則說(shuō)明兩條線段必然沒有交點(diǎn)。否則,同理判斷y 軸坐標(biāo)。
2)跨立試驗(yàn)。如果兩線段相交那么就意味著它們互相跨立。如圖11 所示,點(diǎn)A 和點(diǎn)B 分別在線段CD 兩側(cè),點(diǎn)C 和點(diǎn)D 分別在線段AB 兩側(cè)。判斷A點(diǎn)與B 點(diǎn)是否在線段CD 的兩側(cè),即向量AD 與向量BD 分別在向量CD 的兩端,也就是其叉積是異號(hào)的。同時(shí)證明C 點(diǎn)與D 點(diǎn)在線段AB 的兩端,兩個(gè)條件同時(shí)滿足,則表示線段相交。
圖11 兩線段相交
當(dāng)經(jīng)過快速排斥試驗(yàn)和跨立試驗(yàn)判定兩條線段是否相交后,如果不相交,則兩個(gè)機(jī)器人按原路徑繼續(xù)前進(jìn)。如果相交,則將機(jī)器人的當(dāng)前節(jié)點(diǎn)和下一節(jié)點(diǎn)當(dāng)作向量計(jì)算,通過比較兩個(gè)向量是否方向相反,如果是則為正碰,如果不是則為側(cè)碰。若為正碰,根據(jù)機(jī)器人的優(yōu)先級(jí)決定優(yōu)先級(jí)低的機(jī)器人重新規(guī)劃路徑,優(yōu)先級(jí)高的機(jī)器人按原路徑前進(jìn)。若為側(cè)碰,根據(jù)機(jī)器人的優(yōu)先級(jí)決定優(yōu)先級(jí)低的機(jī)器人等待一個(gè)步長(zhǎng),讓優(yōu)先級(jí)高的機(jī)器人優(yōu)先通過。正碰時(shí)的局部路徑規(guī)劃:將下一個(gè)節(jié)點(diǎn)設(shè)為臨時(shí)的灰色障礙物,以下個(gè)節(jié)點(diǎn)為目標(biāo)節(jié)點(diǎn),當(dāng)前節(jié)點(diǎn)為源節(jié)點(diǎn),進(jìn)行局部路徑規(guī)劃。圖12 給出了基于本研究算法的一次多個(gè)農(nóng)業(yè)機(jī)器正碰試驗(yàn)演示。在本試驗(yàn)中,算法的各項(xiàng)參數(shù)分別是:α=1.5,β=7,ρ=0.3,Q=5,螞蟻數(shù)量為50 只,最大迭代次數(shù)為100,紅色機(jī)器人的優(yōu)先級(jí)低于藍(lán)色機(jī)器人。
如圖12(a)所示,兩個(gè)機(jī)器人各自從起點(diǎn)出發(fā),且其初始路徑正好反向重疊。圖12(b)、圖12(c)、圖12(d)表示低優(yōu)先級(jí)的機(jī)器人做出了臨時(shí)的局部路徑規(guī)劃以避免碰撞。圖12(e)表示兩個(gè)機(jī)器人避開碰撞后順利到達(dá)終點(diǎn)。
本文在基礎(chǔ)蟻群算法的基礎(chǔ)上,提出了死鎖問題的解決方案,并對(duì)啟發(fā)信息函數(shù)進(jìn)行了改進(jìn),在Matlab-R2018b 平臺(tái)上進(jìn)行仿真試驗(yàn)。針對(duì)室內(nèi)農(nóng)業(yè)復(fù)雜多變的場(chǎng)景環(huán)境,本文考慮了動(dòng)態(tài)障礙物的存在和多農(nóng)業(yè)機(jī)器人作業(yè)兩個(gè)重要方面,提出相應(yīng)的避碰策略,分別為機(jī)器人與障礙物之間的動(dòng)態(tài)窗口掃描搭配區(qū)域膨脹和機(jī)器人與機(jī)器人之間的正碰、側(cè)碰做出了針對(duì)性的處理。仿真試驗(yàn)結(jié)果證明,研究的改進(jìn)蟻群算法在多農(nóng)業(yè)機(jī)器人運(yùn)作場(chǎng)景中能取得較好的運(yùn)行效果,在有靜態(tài)和動(dòng)態(tài)障礙物的環(huán)境下,具備較好的穩(wěn)定性與實(shí)時(shí)性。因此認(rèn)為該研究可以推廣應(yīng)用在室內(nèi)農(nóng)業(yè)多機(jī)器人作業(yè)的復(fù)雜場(chǎng)景中。