謝仕爍,黃偉鋒,2,朱立學(xué),楊塵宇,張世昂,付根平,2
(1.仲愷農(nóng)業(yè)工程學(xué)院自動化學(xué)院,廣州市,510225;2.仲愷農(nóng)業(yè)工程學(xué)院現(xiàn)代農(nóng)業(yè)工程創(chuàng)新研究院,廣州市,510225;3.廣東省現(xiàn)代精準(zhǔn)農(nóng)業(yè)智能化裝備技術(shù)研發(fā)中心,廣州市,510225;4.仲愷農(nóng)業(yè)工程學(xué)院機(jī)電工程學(xué)院,廣州市,510225)
近年來,我國大部分農(nóng)作物產(chǎn)量保持增長狀態(tài)[1-2],但生產(chǎn)成本增加過快等因素仍然制約著我國農(nóng)戶的利潤增長[3]。研究指出,農(nóng)業(yè)自動化對提高農(nóng)產(chǎn)品的產(chǎn)量和減少勞動力的制約具有一定的積極作用[4],且機(jī)器人自主導(dǎo)航技術(shù)已有一定成果[5-8],因此,農(nóng)業(yè)機(jī)器人具備一定的發(fā)展前景和意義。
視覺處理技術(shù)和衛(wèi)星定位技術(shù)為農(nóng)業(yè)機(jī)器人自主作業(yè)能力提供了可能[9-12]。導(dǎo)航技術(shù)中,衛(wèi)星定位導(dǎo)航可以提供一定的導(dǎo)航指引,但難以根據(jù)實(shí)際道路情況等因素進(jìn)行導(dǎo)航,難以對實(shí)際環(huán)境做出反應(yīng);視覺導(dǎo)航易受光照等環(huán)境干擾影響,但其外部信息感知量豐富,因此該方法受到了許多研究者的青睞。
在圖像分割方面,高國琴等[13]提出基于K-means算法的溫室路徑分割方法;田巍等[14]提出基于HSV閾值法的皮膚對象分割方法;Bakker等[15]提出基于2G-R-B方法的作物圖像分割方法;Long等[16]使用FCN網(wǎng)絡(luò)實(shí)現(xiàn)了多個(gè)對象的分割方法。以上方法均具備一定的分割能力,但在計(jì)算負(fù)擔(dān)與分割結(jié)果的綜合表現(xiàn)上效果欠佳,難以兼顧強(qiáng)分割性和算法簡易性。
在對導(dǎo)航計(jì)算上,吳剛等[17]提出基于hough法的路徑擬合方法,實(shí)現(xiàn)了小麥田間的路徑計(jì)算;李亭等[18]使用掃描法進(jìn)行路徑計(jì)算實(shí)現(xiàn)了智能車的自主導(dǎo)航;王新忠等[19]使用最小二乘法實(shí)現(xiàn)番茄壟間的導(dǎo)航;hough擬合法和掃描法均能產(chǎn)生一定效果,但并無法區(qū)分道路類型,其導(dǎo)航效果易受道路筆直程度影響,且機(jī)器人無法單獨(dú)依靠視覺系統(tǒng)針對特定路況執(zhí)行相應(yīng)任務(wù)。
綜上所述,許多學(xué)者對圖像分割及路徑導(dǎo)航計(jì)算進(jìn)行一定的研究試驗(yàn),取得了一些成果,但機(jī)器人導(dǎo)航領(lǐng)域仍然存在一定問題。本文針對Floodfill算法進(jìn)行路徑分割改良,通過對十字法和掃描法進(jìn)行結(jié)合改良,對不同路況使用相應(yīng)方法進(jìn)行計(jì)算,構(gòu)建了基于改進(jìn)Floodfill算法的田壟視覺導(dǎo)航系統(tǒng),實(shí)現(xiàn)機(jī)器人視覺導(dǎo)航功能。
算法流程如圖1所示,流程分為三個(gè)部分:第一部分,從攝像頭獲取壟間圖像并對圖像進(jìn)行預(yù)處理操作;第二部分,使用Floodfill算法分割路徑圖像,將路徑圖像輸入十字法進(jìn)行路徑情況分類;第三部分,在已知路徑情況的基礎(chǔ)上應(yīng)用相應(yīng)算法進(jìn)行導(dǎo)航信息計(jì)算。
圖1 導(dǎo)航算法流程圖
在圖像處理領(lǐng)域中,常用的顏色空間有RGB顏色空間(Red紅色,Green綠色,Blue藍(lán)色)、HSV顏色空間(Hue色相,Satuation飽和度,Value明度)。其中,RGB顏色空間采用R(紅)、G(綠)、B(藍(lán))三個(gè)通道來表達(dá)顏色,HSV顏色空間采用H(色相)、S(飽和度)、V(明度)來表達(dá)顏色,兩種顏色空間之間可相互轉(zhuǎn)換。
Floodfill算法需要進(jìn)行顏色相似程度判斷,具有尋找相似顏色的需求。在HSV色彩空間中,若兩種顏色相似,其色相也會相近。因此,通過H(色相)參數(shù)尋找相似顏色的方法較為簡單且無需大量運(yùn)算,受光照等外部干擾的影響相對較小,本方法使用HSV顏色空間進(jìn)行計(jì)算。
為了獲得更加精確的計(jì)算結(jié)果,在計(jì)算前對圖像進(jìn)行高斯模糊處理,對圖像進(jìn)行濾波。
1.3.1 改進(jìn)Floodfill算法
本文使用Floodfill算法分割道路信息,為后續(xù)導(dǎo)航計(jì)算算法提供數(shù)據(jù)。Floodfill算法又稱漫水填充算法,該算法的計(jì)算方法與水流動的規(guī)律相似。首先輸入種子點(diǎn)(Seed Point)的坐標(biāo),將種子點(diǎn)作為“水源”,向四周符合漫延條件的位置漫延。漫延條件為:該位置與本位置的數(shù)值的相似程度符合要求。漫延方式有4方向漫延法和8方向漫延法兩種,4方向漫延法規(guī)定水流只能向當(dāng)前位置的“上、下、左、右”4個(gè)方向流動,而8方向漫延法則在4方向漫延法的基礎(chǔ)上增加了“左上、右上、左下、右下”四個(gè)方向。圖2為同一種子點(diǎn)下,不同漫延規(guī)則的計(jì)算結(jié)果。圖中,黑格為不符合漫延條件的像素,灰格為被漫延區(qū)域,白格為未漫延區(qū)域。經(jīng)測試,8方向漫延法具有較好的效果,故采用8方向漫延法。
(a)4方向漫延法
機(jī)器人正常行駛過程中,路徑圖像的中下區(qū)域包含道路信息的可能性較高?;谠撓闰?yàn)知識,可以使用固定點(diǎn)法進(jìn)行道路分割:選取圖像底部中點(diǎn)作為種子點(diǎn)進(jìn)行Floodfill算法的計(jì)算,分割結(jié)果如圖3(b)所示。
(a)路徑圖像
試驗(yàn)發(fā)現(xiàn),固定點(diǎn)法選取種子點(diǎn)的分割效果尚好,但若固定點(diǎn)處存在塑料袋等干擾物體,路徑信息將被錯(cuò)誤分割,如圖4(b)所示。針對該問題,本文使用點(diǎn)迭代法進(jìn)行改進(jìn)。
(a)測試圖片
點(diǎn)迭代法通過評價(jià)的方式選取合適的種子點(diǎn),運(yùn)行流程如圖5所示。
圖5 點(diǎn)迭代法運(yùn)行流程
第一步,選取圖像底部中點(diǎn)為準(zhǔn)種子點(diǎn)的起始點(diǎn)。
第二步,使用準(zhǔn)種子點(diǎn)進(jìn)行Floodfill算法運(yùn)算。
第三步,對本次計(jì)算結(jié)果進(jìn)行評價(jià),評價(jià)合格則進(jìn)入輸出分割結(jié)果,不合格則向上偏移準(zhǔn)種子點(diǎn)并回到第二步進(jìn)行下一次迭代。
圖4(c)為使用點(diǎn)迭代法的分割結(jié)果。試驗(yàn)驗(yàn)證,點(diǎn)迭代法具備更好的魯棒性,更適合在實(shí)際路況中使用。
1.3.2 濾波處理
道路信息雖然已經(jīng)被計(jì)算出來,但仍包含一定噪聲,噪聲干擾將對后續(xù)的導(dǎo)航信息計(jì)算造成一定負(fù)面影響。針對該問題,本文引入腐蝕算法與膨脹算法對路徑分割結(jié)果進(jìn)行進(jìn)一步濾波。
腐蝕算法與膨脹算法采用矩陣對圖像進(jìn)行運(yùn)算,對圖像進(jìn)行形態(tài)學(xué)運(yùn)算。腐蝕算法作用為收縮圖像,其效果如圖6(b)所示;膨脹算法作用為擴(kuò)大圖像,其效果如圖6(c)所示。若使用相同矩陣在膨脹運(yùn)算后進(jìn)行腐蝕運(yùn)算,可以在不影響原圖像大小的情況下濾去原圖像的“空洞”,濾波結(jié)果如圖7(b)所示。
(a)原圖像
(a)原圖像
機(jī)器人在田壟中將遇到三種情況:方向大致準(zhǔn)確、嚴(yán)重偏向和駛出田壟,使用同一算法對多種路況進(jìn)行計(jì)算較為困難。針對該問題,本文使用十字法對3種路況進(jìn)行分類,針對不同路況采用不同算法。十字法用于嚴(yán)重偏向及駛出田壟2種情況的分類和方向矯正,掃描法用于方向大致準(zhǔn)確時(shí)的方向微矯正。
1.4.1 十字法路徑分類
十字法示意圖如圖8(a)所示,其算法計(jì)算過程如下。
1)以點(diǎn)Sp為起點(diǎn)向上尋找跳變點(diǎn)。若存在跳變點(diǎn)則將該點(diǎn)設(shè)為A點(diǎn),否則將頂端設(shè)為A點(diǎn)。
2)設(shè)A點(diǎn)下方一定距離的點(diǎn)為B點(diǎn)。
3)尋找B點(diǎn)兩側(cè)的跳變點(diǎn),將出現(xiàn)以下情況。
① 若本步驟無跳變點(diǎn)或跳變點(diǎn)均處于圖像邊界附近:判定當(dāng)前路況為“駛出田壟”,如圖8(b)所示。
(a)算法示意圖
② 若本步驟存在跳變點(diǎn):a)若第1步存在跳變點(diǎn):將距離B點(diǎn)較近的跳變點(diǎn)設(shè)為C點(diǎn),判定當(dāng)前路況為“嚴(yán)重偏向”,進(jìn)入下一步的導(dǎo)航計(jì)算。b)若第1步?jīng)]有跳變點(diǎn):判定當(dāng)前路況為“方向大致準(zhǔn)確”,使用掃描法進(jìn)行導(dǎo)航計(jì)算。
十字法分類后,若路況不為“駛出田壟”,則進(jìn)入下一步進(jìn)行導(dǎo)航計(jì)算。
1.4.2 十字法導(dǎo)航計(jì)算
十字法對“嚴(yán)重偏向”的路況進(jìn)行導(dǎo)航計(jì)算。以點(diǎn)Sp作為原點(diǎn)、點(diǎn)Sp向上為x軸的方向、點(diǎn)Sp向左為y軸方向,構(gòu)建新的坐標(biāo)軸空間,為使效果更加直觀,將原示意圖順時(shí)針旋轉(zhuǎn)90°,如圖9所示,其偏移幅度
圖9 新坐標(biāo)空間示意圖
(1)
其中,Kp>0表示道路向左,Kp<0表示道路向右。
圖8(a)與圖10中,A點(diǎn)B點(diǎn)和C點(diǎn)均處在同一位置,但道路邊緣彎曲度不同。道路偏移程度Kp相同的情況下,彎曲程度更高的路徑需要機(jī)器人更快地調(diào)整方向,避免駛出道路損壞農(nóng)作物。基于以上分析,加入對彎曲邊緣的判斷對于增強(qiáng)機(jī)器人導(dǎo)航的可靠性具有一定意義。針對該問題,本文在彎曲邊緣的道路處引入曲率計(jì)算和權(quán)值參數(shù)參與計(jì)算。取曲線起始點(diǎn)E,若點(diǎn)A、C、E不在同一直線上,使用兩點(diǎn)間距離公式分別計(jì)算線段a,c,e的長度。
圖10 十字法曲率計(jì)算示意圖
平均曲率
(2)
(3)
小車與彎道的距離影響因子
(4)
由式(1)~式(4)可計(jì)算出道路偏移值
K=W1×Kp+W2×Kcir+W3×Kd
(5)
其中,W1,W2,W3為作用系數(shù)。
1.4.3 掃描法導(dǎo)航計(jì)算
掃描法對“嚴(yán)重偏向”的路況進(jìn)行導(dǎo)航計(jì)算。掃描法使用逐行遍歷的方式,尋找每一行位于中點(diǎn)兩側(cè)的跳變點(diǎn),記錄兩個(gè)跳變點(diǎn)之間的中點(diǎn)。本方法在與十字法相同的坐標(biāo)空間內(nèi)采用一元線性回歸計(jì)算的方法進(jìn)行計(jì)算,設(shè)中點(diǎn)坐標(biāo)為(xi,xi),可得
(6)
道路信息的回歸方程只表示道路走向,因此機(jī)器人處于非道路中央位置時(shí)需要使機(jī)器人向道路中心靠近,因此引入矯正權(quán)值Ke控制矯正強(qiáng)度,偏移值K的計(jì)算公式
K=Lb+Ke×La
(7)
當(dāng)Lb≠0,即機(jī)器人處于非道路中央位置時(shí),算法通過Lb對偏移值K的計(jì)算結(jié)果進(jìn)行干涉,實(shí)現(xiàn)機(jī)器人向道路中心靠攏的效果。
硬件平臺為香蕉采摘履帶機(jī)器人,計(jì)算平臺為搭載1.4 GHz主頻的Cortex-A53處理器以及1 GB運(yùn)行內(nèi)存的Raspberry Pi 3B+,計(jì)算平臺搭載操作系統(tǒng)為基于Linux的Raspbian。計(jì)算平臺使用單目攝像頭獲取實(shí)時(shí)道路圖像,通過STM32F103RC單片機(jī)對Safari-880T加強(qiáng)版履帶機(jī)器人進(jìn)行移動控制。部分功能借助OpenCV[20](Intel?開源計(jì)算機(jī)視覺庫)輔助實(shí)現(xiàn)。
路徑分割性能測試:取50張多個(gè)時(shí)段的果林田壟照片,將照片轉(zhuǎn)換為640像素×480像素的分辨率,使用改良Floodfill法、K-means法、點(diǎn)閾值法三種方法分別進(jìn)行道路分割,統(tǒng)計(jì)計(jì)算時(shí)間和正確提取路徑信息的圖片數(shù)量。統(tǒng)計(jì)三種方法的準(zhǔn)確率及計(jì)算時(shí)間,測試改良Floodfill法在田壟圖像路徑分割方面的可行性及優(yōu)缺點(diǎn)。
導(dǎo)航算法測試:搭建“U”形路段作為測試路段,如圖11所示,機(jī)器人以與道路中線成40°夾角的初始姿態(tài)進(jìn)入路段并使用本方法進(jìn)行自主導(dǎo)航,并在駛出測試路段時(shí)停止導(dǎo)航。機(jī)器人履帶底盤寬0.735 m,測試路段寬約1 m,其中直道總長度約6.3 m,彎道長度約4.7 m,直道用于測試田壟中的微矯正功能;彎道用于模擬“嚴(yán)重偏向”的情況,測試大偏移矯正能力;采用路段出口模擬駛出田壟的情況,測試分類狀況。在測試路段中設(shè)置6個(gè)檢查點(diǎn),在圖中分別標(biāo)記為點(diǎn)1、點(diǎn)2、點(diǎn)3、點(diǎn)4、點(diǎn)5和點(diǎn)6,同一側(cè)的檢查點(diǎn)之間的間隔為1 m,其中檢查點(diǎn)1用于測量人為制造的偏移量。本試驗(yàn)通過偏移值變化情況測試導(dǎo)航算法的穩(wěn)定性及導(dǎo)航性能。
圖11 測試環(huán)境示意圖
本試驗(yàn)正確分割的判斷標(biāo)準(zhǔn)為:算法分割區(qū)域與實(shí)際道路區(qū)域的相交面積達(dá)到實(shí)際道路區(qū)域面積的70%以上且包含較少非道路信息。為保證試驗(yàn)的準(zhǔn)確性,本試驗(yàn)的測試數(shù)據(jù)集選取不同光照情況下不同位置的田壟道路圖片,使用樹莓派3B+進(jìn)行計(jì)算,試驗(yàn)結(jié)果如表1所示。測試數(shù)據(jù)集中部分圖像含有較嚴(yán)重的光照干擾,測試環(huán)境較為嚴(yán)格,因此會出現(xiàn)整體準(zhǔn)確率偏低的情況。
表1 路徑分割算法測試結(jié)果
試驗(yàn)結(jié)果中,K-means算法的準(zhǔn)確率達(dá)到了58%,但計(jì)算時(shí)間長;HSV閾值算法的計(jì)算耗時(shí)最短,但僅有26%的準(zhǔn)確率;改進(jìn)Floodfill算法平均計(jì)算時(shí)間為120.18 ms,達(dá)到了76%的準(zhǔn)確率。相對于K-means算法,本算法節(jié)約了92.2%的計(jì)算時(shí)間;相對于HSV算法,本算法增加了166.1%的計(jì)算時(shí)間,但準(zhǔn)確率提高較大。試驗(yàn)結(jié)果表明,改進(jìn)Floodfill算法具備一定優(yōu)點(diǎn),其計(jì)算時(shí)間與準(zhǔn)確率符合需求。
圖12為部分分割結(jié)果,其中K-means算法可分離出道路圖像,但包含較多干擾信息;HSV閾值法可大致將道路分割出來,但分割結(jié)果包含了與道路顏色相近的植物;改良Floodfill算法的分割結(jié)果包含干擾信息較少,對后續(xù)導(dǎo)航計(jì)算的精度保證具有重要的意義。本文使用的改進(jìn)Floodfill算法具備一定的優(yōu)點(diǎn)。
(a)測試圖片
在機(jī)器人履帶底盤頭部的中央處安裝一個(gè)沾濕的刷子,利用刷子記錄下移動路徑。導(dǎo)航結(jié)束后,在檢查點(diǎn)處測量小車的偏移程度。開始測試時(shí),機(jī)器人以與道路中心線成40°夾角的初始姿態(tài)進(jìn)入測試場地,試驗(yàn)中的導(dǎo)航情況如圖13所示。
(a)直道微矯正
試驗(yàn)結(jié)果如圖14所示,本方法在僅使用比例控制的情況下仍具備一定的收斂能力,誤差變化趨勢相對穩(wěn)定。在加入起始干擾的情況下可迅速調(diào)整姿態(tài),矯正后的偏移值保持在6 cm以內(nèi)。檢查點(diǎn)3、檢查點(diǎn)4分布在彎道出入口附近,由于機(jī)器人對入彎姿態(tài)的調(diào)整會導(dǎo)致行駛路線出現(xiàn)一定偏移,因此偏移值波動為正?,F(xiàn)象。多次試驗(yàn)中,均無出現(xiàn)與物體碰撞的情況,機(jī)器人駛出測試路段時(shí)均可正確判斷“駛出田壟”,驗(yàn)證了算法的可行性。
圖14 自主導(dǎo)航試驗(yàn)結(jié)果
針對果林環(huán)境下的自主導(dǎo)航機(jī)器人,為解決的田壟視覺導(dǎo)航計(jì)算復(fù)雜導(dǎo)致實(shí)時(shí)性弱的問題,本文提出了改進(jìn)Floodfill算法結(jié)合分類導(dǎo)航的方法進(jìn)行導(dǎo)航計(jì)算。該方法先對圖像進(jìn)行預(yù)處理,然后使用改進(jìn)Floodfill算法進(jìn)行道路分割并對分割結(jié)果進(jìn)行濾波處理。得到路徑分割結(jié)果后,使用十字法對路徑情況進(jìn)行分類,再根據(jù)路徑情況使用十字法或掃描法進(jìn)行導(dǎo)航計(jì)算。
對路徑分割性能和導(dǎo)航算法的試驗(yàn)及分析表明:
1)改進(jìn)Floodfill算法具有計(jì)算速度快且準(zhǔn)確率良好的特點(diǎn)。在小型低算力平臺中,單次分割耗時(shí)約120 ms(不包含導(dǎo)航計(jì)算)且達(dá)到了76%的準(zhǔn)確率,具有良好的計(jì)算實(shí)時(shí)性和準(zhǔn)確率,相比其他方法具有一定優(yōu)勢,改善了視覺導(dǎo)航計(jì)算量大以及室外機(jī)器人計(jì)算平臺體積大且成本高昂的問題。
2)分類導(dǎo)航的方法具有一定的可行性,且具備一定的導(dǎo)航質(zhì)量。
3)道路偏移值保持在6 cm內(nèi),改善了低算力平臺在田壟視覺導(dǎo)航中實(shí)時(shí)性差及導(dǎo)航效果弱的問題。
本方法是對農(nóng)業(yè)機(jī)器人視覺導(dǎo)航方法的一種探索和嘗試。此外,分類導(dǎo)航的方法可搭配于其他路徑分割算法上,具備一定可移植性,有利于提升開發(fā)效率,對視覺導(dǎo)航方法的研究探索和農(nóng)業(yè)機(jī)器人自主作業(yè)相關(guān)技術(shù)的發(fā)展具有一定的意義。
中國農(nóng)機(jī)化學(xué)報(bào)2021年3期