艾永平,唐巧興,王澤杰,莫慶林
(上海工程技術(shù)大學(xué) a.材料工程學(xué)院;b.電子電氣工程學(xué)院;c.機(jī)械與汽車工程學(xué)院,上海 201620)
對(duì)很多學(xué)校和大公司來(lái)說(shuō),草坪修理是需定時(shí)進(jìn)行的一項(xiàng)工作,馬振峰[1]介紹了一種用智能視覺(jué)和硬件控制的智能割草機(jī),但其研究主要突出其系統(tǒng)的硬件組成,對(duì)于機(jī)器視覺(jué)方面的實(shí)現(xiàn)介紹得并不多.徐偉峰等[2]介紹了一種智能割草機(jī)器人,但其研究的割草機(jī)主要通過(guò)GPS 定位控制割草機(jī)運(yùn)動(dòng),割草機(jī)的智能程度仍有提高空間.機(jī)器視覺(jué)近年來(lái)在目標(biāo)檢測(cè)、自動(dòng)駕駛領(lǐng)域大量使用,其技術(shù)較為成熟,國(guó)內(nèi)研究者也已經(jīng)進(jìn)行了相關(guān)技術(shù)研究[3?5].
現(xiàn)有割草機(jī)存在過(guò)于依賴人工、噪聲大等缺點(diǎn),為盡量減少人工操作割草機(jī),使割草機(jī)能自動(dòng)、智能地識(shí)別工作區(qū)域的青草位置,自動(dòng)規(guī)劃路徑并進(jìn)行割草工作,本研究將人工智能和傳統(tǒng)機(jī)械、電氣相結(jié)合,基于單步多框檢測(cè)器(Single Shot MultiBox Detector,SSD)、卷積神經(jīng)網(wǎng)絡(luò)框架(Convolutional Architecture for Fast Feature Embedding,Caffe)算法和單片機(jī)控制系統(tǒng),研發(fā)一種完全自動(dòng)化的割草機(jī)器人.
割草機(jī)系統(tǒng)由青草識(shí)別、局域網(wǎng)、單片機(jī)電路、機(jī)械組成、數(shù)據(jù)展示等5 個(gè)子系統(tǒng)組成,主要零件組成如圖1 所示.割草機(jī)的工作原理為:1)建立一個(gè)局域網(wǎng)絡(luò),將割草機(jī)搭載的樹莓派(RPi)以及搭載青草識(shí)別模型的Ubuntu16.04 工作機(jī)(下文簡(jiǎn)稱工作機(jī))接入此局域網(wǎng);2)通過(guò)樹莓派控制安裝在割草機(jī)上的攝像頭拍攝照片,工作機(jī)通過(guò)局域網(wǎng)下載樹莓派拍攝的照片;3)工作機(jī)上的青草識(shí)別系統(tǒng)用此前訓(xùn)練好的青草識(shí)別模型(模型基于SSD算法)識(shí)別圖片中出現(xiàn)青草位置的坐標(biāo)信息,并更新工作機(jī)上青草識(shí)別信息數(shù)據(jù)庫(kù)(基于MySQL5.7)里的相關(guān)數(shù)據(jù)信息;4)樹莓派通過(guò)局域網(wǎng)讀取工作機(jī)數(shù)據(jù)庫(kù)中的相關(guān)信息并將這些信息發(fā)送至Arduino;5)Arduino 將樹莓派發(fā)送來(lái)的信息作為參數(shù)傳入內(nèi)部運(yùn)動(dòng)函數(shù),控制割草機(jī)運(yùn)動(dòng)并割草.當(dāng)所在區(qū)域割草任務(wù)完成后,割草機(jī)將割草函數(shù)返回的數(shù)據(jù)發(fā)送給樹莓派,樹莓派控制攝像頭旋轉(zhuǎn)一定角度拍照,割草機(jī)開(kāi)始重復(fù)下一輪識(shí)別、割草工作.
圖1 割草機(jī)零件組成Fig.1 Components of mower
本研究的割草機(jī)實(shí)物首先運(yùn)用SolidWorks 進(jìn)行三維建模,之后再組裝各零件,各零件具體名稱及組成關(guān)系如圖1 所示.割草機(jī)軟件系統(tǒng)組成包括:青草識(shí)別系統(tǒng)、局域網(wǎng)樹莓派與工作機(jī)數(shù)據(jù)交換系統(tǒng)、單片機(jī)運(yùn)動(dòng)工作控制系統(tǒng)、網(wǎng)絡(luò)服務(wù)器、數(shù)據(jù)庫(kù)網(wǎng)頁(yè)展示系統(tǒng).
1)選擇SSD 識(shí)別模型
割草機(jī)器人采用目標(biāo)檢測(cè)[6?8]方式識(shí)別青草.主流識(shí)別模型算法有快速區(qū)域卷積神經(jīng)網(wǎng)絡(luò)(Faster Region-based Convolutional Neural Networks,Faster R-CNN)、SSD[9?11]和一次檢測(cè)(You Only Look Once,YOLO).各檢測(cè)模型的性能見(jiàn)表1.
表1 檢測(cè)模型性能對(duì)比Table 1 Performance comparison of detection models
表中,Map為檢測(cè)精確度,數(shù)值越高,檢測(cè)越精確;FPS為檢測(cè)速度,數(shù)值越高,檢測(cè)越快;Boxes為檢測(cè)適合物體大小.由表1 可以看出,基于Caffe框架的SSD 模型系列算法比R-CNN 檢測(cè)模型速度更快,比YOLO 模型更準(zhǔn)確,因此本研究綜合采用Caffe-SSD 模型訓(xùn)練目標(biāo)檢測(cè)模型.其中,SSD損失函數(shù)表達(dá)式為
式中:L為SSD 算法的損失函數(shù);c為置信度;l為預(yù)測(cè)框;Lconf為置信損失;Lloc為定位損失;α為損失函數(shù)分類和回歸的權(quán)重;N為匹配到的default box 的數(shù)量;x為預(yù)測(cè)框與有效數(shù)據(jù)之間的差異;g為真框.其中,
2)訓(xùn)練青草識(shí)別系統(tǒng)
首先,在不同角度、不同光照條件下拍攝一定量青草照片并在網(wǎng)上用爬蟲下載一定量青草照片;其次,篩選出可用的青草照片,并用圖片標(biāo)注工具標(biāo)注出圖中青草位置;再次,在Ubuntu 上下載配置Caffe-SSD;最后,設(shè)置labelmap_voc.prototxt的item 參數(shù)為grass 和background 兩個(gè)類別,改變base_lr、batch_size 等參數(shù)的值使loss 參數(shù)逐漸降低并收斂(即調(diào)參),獲得收斂且可正常識(shí)別青草的模型,訓(xùn)練流程如圖2 所示.最終獲得的青草識(shí)別模型的識(shí)別準(zhǔn)確率為93.73%.
3)使用識(shí)別模型并計(jì)算出現(xiàn)實(shí)長(zhǎng)度
目前,路徑規(guī)劃被廣泛應(yīng)用于導(dǎo)航、機(jī)器人運(yùn)動(dòng)、車輛自動(dòng)控制等方面[12?13].用ssd_detect.py識(shí)別照片中的青草區(qū)域,識(shí)別示例如圖3 所示.在ssd_detect.py 腳本里加入計(jì)算距離函數(shù),計(jì)算青草區(qū)域偏離割草機(jī)的角度函數(shù),向MySQL 數(shù)據(jù)庫(kù)中插入數(shù)據(jù)函數(shù),用ssd_detect.py 識(shí)別出青草所在區(qū)域的坐標(biāo).在攝像頭豎直方向角度固定的情況下,圖片中距離與實(shí)際距離呈一定的比例關(guān)系,可通過(guò)多次測(cè)量取期望得出圖片與實(shí)際距離的比例關(guān)系.最后,將圖片中的目標(biāo)區(qū)域坐標(biāo)轉(zhuǎn)換成實(shí)際割草機(jī)需要運(yùn)動(dòng)的角度和距離,角度計(jì)算示意圖如圖4 所示.
圖2 訓(xùn)練青草識(shí)別模型流程Fig.2 Training grass identification model flow
圖3 青草檢測(cè)樣本圖Fig.3 Sample graph of grass detection
圖4 青草檢測(cè)示意圖Fig.4 Sketch map of grass detection
圖4 中,W為青草照片的橫向長(zhǎng)度(1 280 pixel);H為青草照片的豎直長(zhǎng)度(960 pixel);(x0,y0)為拍攝照片的左下角坐標(biāo);(x2;y2)為割草機(jī)在照片中的理想位置(水平中點(diǎn));(x3;y3)為青草區(qū)域右下角的坐標(biāo);α為青草區(qū)域偏離割草機(jī)的角度;L為青草照片中割草機(jī)到青草區(qū)域右下角的長(zhǎng)度,計(jì)算式為
青草區(qū)域偏離割草機(jī)角度α的計(jì)算式為
將青草照片的橫向長(zhǎng)度進(jìn)行分割,分割公式為
式中:m1、m2、m3、m4、W分別為將拍攝的青草圖片平均分割為5 段,距離圖片原點(diǎn)邊的各段長(zhǎng)度.
圖片中相關(guān)距離、角度通過(guò)一定的轉(zhuǎn)換比例可轉(zhuǎn)換為現(xiàn)實(shí)中的距離、角度,轉(zhuǎn)換比例公式為
式中:RL為各圖片中用青草識(shí)別模型識(shí)別出的青草長(zhǎng)度對(duì)應(yīng)現(xiàn)實(shí)中的距離.在將圖片中的相關(guān)參數(shù)轉(zhuǎn)換成現(xiàn)實(shí)世界中的參數(shù)時(shí),最大只能轉(zhuǎn)換整個(gè)圖片長(zhǎng)度的數(shù)據(jù).
將計(jì)算得到的數(shù)據(jù)與其他相關(guān)數(shù)據(jù)插入到Ubuntu 軟件上MySQL 數(shù)據(jù)庫(kù)的grass 表中,并更新表中的字段is_update 值為1,表示圖片位置數(shù)據(jù)信息已更新.
4)數(shù)據(jù)傳輸與拍照系統(tǒng)
如圖1 所示,樹莓派安裝了raspberry pi(32 位)系統(tǒng),其主要功能包括作為服務(wù)器存放拍攝的青草照片、從工作機(jī)的MySQL 中獲取青草識(shí)別數(shù)據(jù)、將從數(shù)據(jù)庫(kù)中下載的數(shù)據(jù)發(fā)送至Arduino、通過(guò)連接到樹莓派上的攝像頭進(jìn)行拍照.
具體步驟為:在樹莓派上安裝Apache 服務(wù)器和MySQL 數(shù)據(jù)庫(kù),并通過(guò)局域網(wǎng)系統(tǒng)用Python腳本下載青草數(shù)據(jù)信息,同時(shí)將工作機(jī)grass 表中is_update 字段的值設(shè)置為0,將獲取的信息通過(guò)Python 腳本的serial 端口發(fā)送至Arduino;用Python腳本調(diào)用終端的fswebcam 命令,通過(guò)攝像頭拍攝1280 × 720(pixel)的青草照片,并將照片存儲(chǔ)在樹莓派搭建的服務(wù)器目錄下,以供局域網(wǎng)中識(shí)別青草的工作機(jī)獲取青草圖片;樹莓派檢測(cè)工作機(jī)grass 表中is_update 字段的值是否為1,若為1,便獲取目標(biāo)區(qū)域4 個(gè)實(shí)際坐標(biāo)值與距離、角度等參數(shù),并將這些參數(shù)通過(guò)字符串函數(shù)轉(zhuǎn)換成各數(shù)據(jù)相連接的字符串,再通過(guò)Python 腳本里面的serial庫(kù)函數(shù)傳輸?shù)紸rduino.
1)Arduino 通過(guò)get_prameter 函數(shù)處理傳過(guò)來(lái)的數(shù)據(jù)字符串,將其解析為實(shí)際距離、實(shí)際角度、再通過(guò)其他函數(shù)將距離轉(zhuǎn)換成電動(dòng)機(jī)運(yùn)動(dòng)的時(shí)間和舵機(jī)運(yùn)動(dòng)的角度等.Arduino 通過(guò)調(diào)節(jié)電壓大小和方向控制機(jī)器人的前進(jìn)、后退、速度.通過(guò)轉(zhuǎn)向舵機(jī)轉(zhuǎn)動(dòng)一定角度帶動(dòng)前輪車橋運(yùn)動(dòng),實(shí)現(xiàn)機(jī)器人的轉(zhuǎn)向功能.當(dāng)割草機(jī)一次割草動(dòng)作完成后向樹莓派發(fā)送信號(hào),樹莓派再通過(guò)腳本控制攝像頭水平旋轉(zhuǎn)180 度拍攝6 張照片,Ubuntu 通過(guò)wget得到圖片并進(jìn)行訓(xùn)練青草識(shí)別.
2)割草機(jī)主要由2 個(gè)后輪電機(jī)提供動(dòng)力,由于電機(jī)功率較大,所以2 個(gè)后輪電機(jī)都連接了大功率電機(jī)驅(qū)動(dòng)模塊.用前輪的車橋系統(tǒng)作為割草機(jī)轉(zhuǎn)向系統(tǒng),割草機(jī)通過(guò)割草電機(jī)和割草刀片組成割草系統(tǒng).
3)通過(guò)安裝在Arduino 上的APC220 無(wú)線模塊和DFR0008 DFRobot(遙控板)可在1 000 m 的遠(yuǎn)程控制割草機(jī)的運(yùn)動(dòng)及工作開(kāi)關(guān).
此網(wǎng)站由PHP+MySQL 開(kāi)發(fā),將MySQL 和Apache 部署在Ubuntu 上,網(wǎng)站主要功能為顯示割草機(jī)的各項(xiàng)參數(shù),操作人員也可通過(guò)網(wǎng)頁(yè)改變割草機(jī)的各項(xiàng)參數(shù).割草機(jī)的總體系統(tǒng)組成和工作原理如圖5 所示.
圖5 割草機(jī)總體原理圖Fig.5 Schematic diagram of mower
1)訓(xùn)練模型
硬件環(huán)境:聯(lián)想小新潮7000,Genforce 940MX,GPU 一個(gè);軟件環(huán)境:Ubuntu 16.04,cuda-10.1,cudnn 7.4.2.24,nvidia-418.56,Caffe-SSD,opencv-3.4.3;訓(xùn)練時(shí)間:30 h;訓(xùn)練樣本:200 張圖片;訓(xùn)練各參數(shù):base_lr=0.000 000 4,batch_size=2,max_iter=120 000.weight_decay=0.000 5,gamma=0.1;網(wǎng)絡(luò)標(biāo)簽參數(shù):1)background;2)grass.
2)展示網(wǎng)站開(kāi)發(fā)
網(wǎng)站采用Thinkphp5+MySQL+Html+JS+CSS3開(kāi)發(fā).Apache 服務(wù)器和MySQL 數(shù)據(jù)庫(kù)放置于Ubuntu機(jī)上.
3)Arduino 控制腳本編寫
腳本主要包含解析字符串函數(shù)、運(yùn)動(dòng)控制、割草機(jī)控制函數(shù)、遠(yuǎn)程遙控函數(shù)、舵機(jī)控制函數(shù)以及各參數(shù)計(jì)算函數(shù),如割草機(jī)運(yùn)行時(shí)間、速度等.Arduino 通過(guò)serial.read()函數(shù)讀取樹莓派和遙控器傳送的數(shù)據(jù),通過(guò)serial.write()函數(shù)向樹莓派輸出信號(hào)數(shù)據(jù),且需編寫能解析從樹莓派傳送過(guò)來(lái)數(shù)據(jù)的函數(shù).
4)樹莓派各腳本編寫
用Python 語(yǔ)言編寫fswebcam 軟件捕獲青草圖片的shell 腳本;配置樹莓派上的服務(wù)器,將拍攝的圖片放置于網(wǎng)站目錄下,供Ubuntu 獲?。挥肞ython 語(yǔ)言編寫操作Ubuntu 數(shù)據(jù)庫(kù)的各函數(shù),如update、select,向MySQL讀取和更新數(shù)據(jù);用Python 語(yǔ)言的serial 庫(kù)與Arduino 通信,但通信時(shí)只能傳送字符串,所以樹莓派需將從Ubuntu 數(shù)據(jù)庫(kù)中獲取的各字段數(shù)據(jù)重新組合成正確的字符串.
5)Arduino、樹莓派、Ubuntu 互相聯(lián)網(wǎng)開(kāi)發(fā)
此步驟主要是樹莓派、Arduino、Ubuntu 之間通信腳本的編寫與調(diào)試.樹莓派與Arduino 通過(guò)數(shù)據(jù)線通信,樹莓派與Ubuntu 通過(guò)無(wú)線局域網(wǎng)進(jìn)行通信.
割草機(jī)系統(tǒng)主要由割草機(jī)Arduino 硬件系統(tǒng)、Ubuntu16.04 青草識(shí)別系統(tǒng)、以及樹莓派無(wú)線通信系統(tǒng)組成,其實(shí)物如圖6 所示.其中:2 個(gè)后輪電機(jī)和割草機(jī)電機(jī)用24 V 可充電電池供電,且采用雙路直流電機(jī)驅(qū)動(dòng)板模塊,正反轉(zhuǎn)PWM 調(diào)速L298邏輯7 A/160 W 模塊,割草電機(jī)轉(zhuǎn)速為10 000 轉(zhuǎn)/min,可滿足割草刀片正常割草;割草機(jī)通過(guò)前輪車橋系統(tǒng)轉(zhuǎn)向,將機(jī)電一體化,攝像頭云臺(tái)安裝有豎直向、水平向2 個(gè)舵機(jī),具有豎直、水平2 個(gè)方向和2 個(gè)自由度;由于樹莓派、Arduino 以及各模塊運(yùn)行時(shí)會(huì)生熱,所以采用18 號(hào)零件(散熱風(fēng)扇為各電子元件散熱).
將青草識(shí)別模型訓(xùn)練完成后并組裝割草機(jī),之后對(duì)割草機(jī)進(jìn)行實(shí)地測(cè)試,割草機(jī)系統(tǒng)使用訓(xùn)練好的模型識(shí)別出的青草位置,然后使用位置轉(zhuǎn)換算法將圖片識(shí)別到的青草位置映射到以割草機(jī)的攝像頭為原點(diǎn)的現(xiàn)實(shí)坐標(biāo)中,最后割草機(jī)根據(jù)系統(tǒng)計(jì)算出割草機(jī)的轉(zhuǎn)動(dòng)角度、方向、運(yùn)行時(shí)間進(jìn)行割草工作及運(yùn)動(dòng),實(shí)際測(cè)試如圖7 所示.可以看出,割草機(jī)系統(tǒng)能正常運(yùn)轉(zhuǎn),具有一定割草效果.
圖7 割草機(jī)割草效果圖Fig.7 Effect of mower cutting grass
相較于傳統(tǒng)圍欄式或手推式割草機(jī),本研究的割草機(jī)無(wú)須架設(shè)電子圍欄,利用SSD 算法模型賦予割草機(jī)器人機(jī)器視覺(jué),割草機(jī)系統(tǒng)能自動(dòng)識(shí)別青草在圖片中的坐標(biāo),然后將青草在圖片中的位置坐標(biāo)用算法映射為現(xiàn)實(shí)青草所在位置坐標(biāo),割草機(jī)再進(jìn)行自動(dòng)除草.本研究將SSD 算法和機(jī)械電氣相結(jié)合,將機(jī)器視覺(jué)應(yīng)用于割草機(jī),使割草機(jī)更智能化.通過(guò)對(duì)割草機(jī)實(shí)地測(cè)試,證明SSD 機(jī)器視覺(jué)算法可與割草機(jī)相結(jié)合.研究結(jié)果為人工智能和機(jī)電結(jié)合提供了一種參考思路和方法,今后,研究人員還可在割草機(jī)的運(yùn)行路徑規(guī)劃方面繼續(xù)進(jìn)行研究.