徐 波,李秋潔,束義平,周宏平,孫 靚
(1.南京林業(yè)大學(xué) 機(jī)械電子工程學(xué)院,南京 210037;2.華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
目前,我國的農(nóng)藥生產(chǎn)技術(shù)雖已處于世界先進(jìn)水平,但施藥設(shè)備和技術(shù)卻嚴(yán)重滯后,病蟲害防治過程中不僅農(nóng)藥利用率低、施藥效果差,而且還造成了農(nóng)產(chǎn)品中農(nóng)藥殘留超標(biāo)、環(huán)境污染、作物藥害和操作者中毒等一系列問題[1-3]。據(jù)統(tǒng)計(jì),2015年我國農(nóng)藥利用率為36.6%,農(nóng)藥流失量達(dá)60%~70%[4]。對靶施藥技術(shù)是降低農(nóng)藥殘留的有效手段,現(xiàn)有對靶噴霧控制系統(tǒng)多采用超聲波、紅外、攝像頭等來獲取靶標(biāo)信息[5-6]。劉雪美等利用安放于噴桿上超聲波測距傳感器來采集噴桿到作物冠層的距離和噴桿到地面的距離[7]。翟長遠(yuǎn)等人采用紅外光電傳感器探測幼樹樹干,同時結(jié)合速度傳感器來計(jì)算靶標(biāo)的位置[8]。陳勇等采用基于機(jī)器視覺和模糊控制的方法來實(shí)現(xiàn)精確噴霧[9]。上述對靶噴霧控制系統(tǒng)有著各自的不足:①靶標(biāo)檢測傳感器精度不高。超聲波傳感器測量精度較低,紅外光電開關(guān)探測效果易受樹株外形、光照強(qiáng)度、探測器行走速度和樹株間距等因素影響[10-11],圖像探測器件的鏡面容易沾上灰塵、水珠和藥滴等,不利于樹木靶標(biāo)識別;②人機(jī)交互效果一般,無遙控方式。而隨著無線通信技術(shù)的快速發(fā)展,無線通信在農(nóng)機(jī)上已有較為廣泛的應(yīng)用,據(jù)新華社報(bào)道,早在2004年,美國就已經(jīng)實(shí)現(xiàn)通過無線互聯(lián)網(wǎng)遙控拖拉機(jī)的操縱桿[12],使拖拉機(jī)自動工作。屈川等設(shè)計(jì)的農(nóng)機(jī)工作狀態(tài)實(shí)時無線監(jiān)測系統(tǒng)通過無線網(wǎng)絡(luò)對農(nóng)機(jī)的工作狀態(tài)進(jìn)行實(shí)時監(jiān)測[13]。薛金林等設(shè)計(jì)的基于無線網(wǎng)絡(luò)的大田農(nóng)業(yè)機(jī)械遙控操作控制平臺通過無線網(wǎng)絡(luò)與農(nóng)業(yè)機(jī)械進(jìn)行通信[14]。因此,在農(nóng)業(yè)上引入無線網(wǎng)絡(luò)通信已經(jīng)逐漸成為一種趨勢。
為此,本文設(shè)計(jì)了WiFi遙控精確對靶噴霧控制系統(tǒng)。因激光傳感器具有測量精度高、分辨率高、測量距離遠(yuǎn)及掃描范圍大[15]的優(yōu)點(diǎn),采用二維激光傳感器采集靶標(biāo)信息。遙控裝置為基于Android平臺的平板電腦,能在WiFi環(huán)境下實(shí)現(xiàn)對噴霧機(jī)的遠(yuǎn)程控制,實(shí)現(xiàn)噴霧啟??刂?、參數(shù)設(shè)置及噴頭狀態(tài)顯示等功能。
現(xiàn)在市場上有各種類型的噴霧機(jī),本研究以南京林業(yè)大學(xué)許林云等設(shè)計(jì)的環(huán)形多噴頭噴霧機(jī)[16]為控制對象,如圖1所示。噴頭組件包括8個環(huán)形放置可獨(dú)立控制的噴頭,二維激光傳感器將安裝在噴頭組件前方中軸線上。
WiFi遙控精確對靶噴霧控制系統(tǒng)硬件原理圖如圖2所示。系統(tǒng)通過二維激光傳感器測量靶標(biāo)距離,噴霧控制器對采集信號進(jìn)行處理和判斷,發(fā)送電磁閥啟閉信號給下位機(jī),下位機(jī)驅(qū)動電磁閥進(jìn)行噴霧作業(yè)。二維激光傳感器與噴霧控制器通過USB接口連接,噴霧控制器與下位機(jī)通過串口連接;通過Android遙控器界面可控制系統(tǒng)啟/停,設(shè)置噴霧系統(tǒng)的工作模式及車速、靶標(biāo)距離閾值等參數(shù),并能夠顯示噴頭工作狀態(tài)。
圖1 噴霧機(jī)示意圖Fig.1 Schematic diagram of sprayer
圖2 WiFi遙控精確對靶噴霧控制系統(tǒng)硬件原理圖Fig.2 Hardware schematic diagram of WiFi remote control target spray control system
WiFi遙控精確對靶噴霧控制系統(tǒng)軟件架構(gòu)如圖3所示。遙控器為基于Android平臺的平板電腦,采用Android Studio 2.2.3開發(fā),采用Java語言編程;噴霧系統(tǒng)控制器采用Visual Studio 2015開發(fā),采用C編程;下位機(jī)采用C51編程。首先,通過遙控器設(shè)置噴霧模式、噴霧參數(shù),按下噴霧啟停按鈕后,通過WiFi將噴霧模式、噴霧參數(shù)、啟停發(fā)送給噴霧系統(tǒng)控制器;控制器根據(jù)發(fā)來的參數(shù)進(jìn)行數(shù)據(jù)處理,生成噴霧策略,一方面將噴頭啟閉狀態(tài)通過WiFi發(fā)送給遙控器,在界面顯示出來,另一方面將噴頭狀態(tài)通過串口發(fā)送給下位機(jī),控制電磁閥,以此控制噴頭的開閉。
圖3 WiFi遙控精確對靶噴霧控制系統(tǒng)軟件架構(gòu)Fig.3 Software architecture of WiFi remote control target spray control system
Android遙控器整體結(jié)構(gòu)如圖4所示。其采用了3個線程:界面主線程主要負(fù)責(zé)界面的加載、刷新;發(fā)送線程sendThread主要負(fù)責(zé)建立socket連接、向噴霧控制器發(fā)送數(shù)據(jù);接收線程recvThread接收來自噴霧控制器的數(shù)據(jù)。
圖4 Android遙控器整體結(jié)構(gòu)Fig.4 Overall structure of Android remote controller
Android遙控器界面設(shè)計(jì)如圖5所示。
(a) 界面控件
(b) 界面外觀圖5 Android遙控器界面設(shè)計(jì)Fig.5 Interface design of Android remote controller
采用相對布局(Relative Layout)方式,添加控件實(shí)現(xiàn)噴頭狀態(tài)指示、車速及靶標(biāo)距離閾值設(shè)置、自動/手動噴霧選擇、左側(cè)/右側(cè)噴霧選擇、IP地址端口號的輸入、連接噴霧啟停及系統(tǒng)退出,如圖5所示??丶愋图皩?yīng)變量如表1所示。
表1 遙控器界面主要控件及對應(yīng)變量Table 1 Main controls and corresponding variables of remote controller
連接按鈕按下,獲取EditText控件中的IP地址和端口號,向sendThread發(fā)出連接標(biāo)識,連接成功后啟動recvThread線程,界面主線程顯示“連接成功”字樣,并設(shè)置噴霧啟停按鈕使能。噴霧啟停按鈕每次按下,噴霧狀態(tài)在啟動(RUN=TRUE)與停止(RUN=FALSE)間切換,為噴霧啟停按鈕加載不同資源圖標(biāo),同時向recvThread線程發(fā)送標(biāo)識,使其進(jìn)入消息循環(huán)。噴霧按鈕按下,使噴霧參數(shù)設(shè)置失效,加載停止圖標(biāo),獲取當(dāng)前速度、距離輸入值,向sendThread發(fā)送噴霧標(biāo)識;停止按鈕按下,使噴霧參數(shù)設(shè)置使能,加載噴霧圖標(biāo),向sendThread發(fā)出停止標(biāo)識;退出按鈕按下,向sendThread發(fā)出退出標(biāo)識,調(diào)用onDestroy()進(jìn)行釋放空間。
本設(shè)計(jì)中的界面線程與非界面線程間的通信利用消息處理機(jī)制來實(shí)現(xiàn)[17]。Android部分共有3個線程,每個線程都有一個Looper對象和一個Handler,連接、噴霧、停止等標(biāo)識利用Handler.sendEmptyMessage(msg.what)發(fā)送一個整型數(shù)即可。噴頭狀態(tài)用了一個,8位數(shù)組NOZZLE[8]存放,利用Bundle作為中間載體來傳遞噴頭狀態(tài)。
遙控式噴霧控制器部分用C語言開發(fā),開發(fā)軟件為Visual Studio 2015。該部分由3個線程構(gòu)成主函數(shù)部分、數(shù)據(jù)接收線程及數(shù)據(jù)處理發(fā)送線程,控制器整體工作流程如圖6所示。
圖6 噴霧控制器工作流程圖Fig.6 Work flow chart of spray controller
第1步,主函數(shù)初始化socket后創(chuàng)建數(shù)據(jù)接收、發(fā)送線程。第2步,作為socket服務(wù)器端,接收來自客戶端發(fā)來的噴霧參數(shù),將接收的噴霧參數(shù)分離并輸出到控制臺上,若未進(jìn)行初始化操作,則執(zhí)行第3步操作,否則跳過第3步執(zhí)行第4步操作。第3步,進(jìn)行初始化工作,即分配空間、打開激光傳感器、打開串口。第4步,初始化之后,使發(fā)送線程數(shù)據(jù)處理標(biāo)識DEAL置true,進(jìn)入數(shù)據(jù)處理循環(huán),即進(jìn)行激光數(shù)據(jù)采集、靶標(biāo)檢測;若為停止噴霧,生成關(guān)閉全部噴頭指令;若為退出,則調(diào)用自定義函數(shù)ExitInstance,進(jìn)行釋放空間等操作。第5步,將噴頭開閉指令發(fā)送給下位機(jī)。第6步,通過socket發(fā)送給平板遙控器,進(jìn)行界面刷新。
3.2.1 二維激光傳感器數(shù)據(jù)采集
二維激光傳感器選用日本Hokuyo公司生產(chǎn)的二維激光掃描儀UTM-30LX,掃描范圍270°,角度分辨率0.25°,掃描周期25ms,最大測量距離為30m。激光傳感器實(shí)物圖如圖7(a)所示。激光范圍掃描圖如圖7(b)所示,掃描方向由綠色指示燈所在的一側(cè)掃向紅色指示燈所在的一側(cè)。
安裝Hokuyo公司提供的Windows操作系統(tǒng)驅(qū)動,將其轉(zhuǎn)化為虛擬串口操作。首先打開設(shè)備,設(shè)置波特率為115 200 bit/s,然后啟動采集過程,設(shè)置掃描次數(shù)及掃描間隔,采集結(jié)束后關(guān)閉設(shè)備。每次采集獲取1 081個掃描方向的距離值,用4字節(jié)表示,單位為mm,幀率25ms。
(a) 激光傳感器 (b) 激光掃描范圍圖圖7 激光傳感器示意圖Fig.7 Schematic diagram of Laser sensor
3.2.2 靶標(biāo)檢測
靶標(biāo)檢測算法針對環(huán)形多噴頭噴霧機(jī)而設(shè)計(jì),共有8個噴頭,各噴頭分區(qū)示意圖如圖8所示。噴霧范圍為[-12.5°,192.5°],每個噴頭噴灑區(qū)域范圍為25°。
圖8 環(huán)形噴頭分區(qū)示意圖Fig.8 Schematic diagram of annular nozzles’ areas
若二維激光雷達(dá)掃描點(diǎn)的測量距離不大于設(shè)定的距離閾值,判斷為靶標(biāo)點(diǎn)。對當(dāng)前采集數(shù)據(jù)幀,計(jì)算各噴頭扇形噴霧區(qū)域內(nèi)靶標(biāo)點(diǎn)個數(shù)與掃描點(diǎn)總數(shù)的比率,若不小于設(shè)定閾值T,認(rèn)為存在靶標(biāo),開啟噴頭進(jìn)行噴霧。
建立FIFO(First In First Out,先進(jìn)先出)緩沖區(qū),保存n幀數(shù)據(jù)的靶標(biāo)檢測結(jié)果(即噴頭啟閉指令),最新幀寫入緩沖區(qū)末尾。
3.2.3 噴霧延時
為保證靶標(biāo)檢測與噴霧的一致性,計(jì)算噴霧軟件延時,則
(1)
式中tinherent_delay—系統(tǒng)固有延時,即激光探測靶標(biāo)至噴頭噴出農(nóng)藥的時間;
L—激光雷達(dá)提前于噴頭的安裝距離;
v—噴霧車輛行駛速度。
Android遙控器與噴霧控制器間的WiFi通信采用基于TCP協(xié)議的通信方式[18-20],通過套接字Socket網(wǎng)絡(luò)來進(jìn)行通信[21-22],Android遙控器作為客戶端,噴霧控制器作為服務(wù)器端,具體通信示意圖如圖9所示。
圖9 WiFi通信示意圖Fig.9 Schematic diagram of WiFi communication
第1步,服務(wù)器端調(diào)用函數(shù)listen將socket設(shè)為監(jiān)聽模式;第2步,客戶端向服務(wù)器端發(fā)送連接請求;第3步,服務(wù)器端不斷調(diào)用函數(shù)accept接收連接請求,并創(chuàng)建線程接收來自客戶端傳來的數(shù)據(jù),同時創(chuàng)建數(shù)據(jù)發(fā)送線程準(zhǔn)備進(jìn)行數(shù)據(jù)處理;第4步,客戶端向socket網(wǎng)絡(luò)發(fā)送噴霧參數(shù),并新建線程用來接收服務(wù)器端傳來的噴頭狀態(tài);第5步,服務(wù)器端調(diào)用函數(shù)recv不斷從socket網(wǎng)絡(luò)接收來自客戶端發(fā)來的數(shù)據(jù),接受完后數(shù)據(jù)發(fā)送線程,線程根據(jù)客戶端傳來的噴霧參數(shù)進(jìn)行激光數(shù)據(jù)采集、靶標(biāo)檢測,并將噴頭開閉指令通過串口通信發(fā)送給下位機(jī);第6步,調(diào)用函數(shù)send將噴頭狀態(tài)發(fā)送給客戶端遙控器;第7步,客戶端從socket網(wǎng)絡(luò)接收服務(wù)器端發(fā)送的噴頭開閉狀態(tài),并發(fā)送給遙控器界面進(jìn)行刷新顯示。在退出按鈕按下后,兩端都關(guān)閉socket,并清理緩存。
由于噴霧控制器處于不同的局域網(wǎng)下IP地址會發(fā)生變化,如果IP地址在程序中寫死會不利于用戶更改,所以將此系統(tǒng)設(shè)計(jì)為用戶在控制臺輸入IP地址,按Enter鍵后才能建立socket,調(diào)用函數(shù)bind為socket綁定一開始用戶輸入的IP地址和指定的端口號。其中,IP地址的查看方法:控制面板—>查看網(wǎng)絡(luò)狀態(tài)和任務(wù)—>WLAN—>詳細(xì)信息—>IPv4地址,IPv4地址即我們所需要的IP地址。
由于在調(diào)用函數(shù)recv接收遙控器端傳來的噴霧參數(shù)是字符串,所以需要將噴霧模式、速度、距離閾值等參數(shù)分離開來才能進(jìn)行后續(xù)的數(shù)據(jù)處理操作??蛻舳税l(fā)送數(shù)據(jù)時,為接收后方便分離各參數(shù),每個參數(shù)后面會連同一個“,”一起發(fā)送,最后一個字符會以“ ”結(jié)尾。這里定義了一個二維數(shù)組q[6][50],以“,”為分隔符將第j個參數(shù)依次放入q[j-1]個數(shù)組中。同時調(diào)用函數(shù)strtof將速度、距離值轉(zhuǎn)化為float型。
為了更直觀地看到所開發(fā)的噴霧系統(tǒng)的對靶噴霧效果,利用庫函數(shù)離線采集樹木靶標(biāo),將采集點(diǎn)云數(shù)據(jù)保存為data.dat文件,用MatLab讀取data.dat的數(shù)據(jù)并進(jìn)行處理,獲得處理后靶標(biāo)的圖像并與實(shí)際樹木進(jìn)行對比比較。
試驗(yàn)采用日本Hokuyo公司生產(chǎn)的二維激光掃描儀UTM-30LX,載運(yùn)車輛速度為0.5m/s。試驗(yàn)測量的實(shí)際場景如圖10(a)所示,包含了兩棵低矮葉片密集的桂花樹,符合精確對靶果園噴霧機(jī)的適用要求。其中,試驗(yàn)裝置二維激光傳感器距離樹干中心3m,采集時采用單側(cè)采集,角度的范圍為[92.5°,192.5°],對應(yīng)為右側(cè)4個噴嘴區(qū)域,設(shè)置距離閾值為6m,則距離閾值內(nèi)車載二維激光掃描儀獲取的點(diǎn)云數(shù)據(jù)投影到xz平面顯示樹木檢測結(jié)果如圖10(b)所示。試驗(yàn)中,樹木樹冠及樹干均被檢測出來,在x方向上樹冠在0到4m范圍內(nèi),樹冠高度即z方向上在0~2.7m范圍內(nèi)。
(a) 測試用樹
(b) 樹木激光點(diǎn)云圖10 樹木靶標(biāo)點(diǎn)云采集Fig.10 Acquisition of tree targets’ point clouds
對應(yīng)噴頭區(qū)域的噴霧靶標(biāo)的有無如圖11所示。其中,黑色線表示對應(yīng)的噴頭噴霧區(qū)域內(nèi)存在靶標(biāo),白色部分表示不存在靶標(biāo)。
(a) T為1%
(b) T為10%
(c) T為30%
(d) T為50%圖11 不同靶標(biāo)檢測閾值下對應(yīng)噴頭區(qū)域噴霧結(jié)果Fig.11 Spray results of corresponding nozzles’ areas under different target threshold values
算法中每個噴霧區(qū)域內(nèi)檢測點(diǎn)數(shù)為100,T為設(shè)定的靶標(biāo)檢測閾值。對比圖11中(a)、(b)、(c)、(d)可以看出:設(shè)置的T不同,對應(yīng)的噴頭區(qū)域靶標(biāo)檢測結(jié)果也不同;圖11(a)為噴霧區(qū)域內(nèi)存在1%的點(diǎn)在距離閾值范圍內(nèi)即為有靶標(biāo),可以看出靶標(biāo)檢測過于密集,無法篩選出有效靶標(biāo),使得在噴霧時導(dǎo)致農(nóng)藥浪費(fèi);圖11(b)為噴霧區(qū)域內(nèi)存在10%的點(diǎn)在距離閾值范圍內(nèi)即為有靶標(biāo),檢測較密集,結(jié)合圖10(b)可以看出噴頭5和噴頭7對應(yīng)噴霧區(qū)域在x=4m處時檢測到非靶標(biāo)點(diǎn)進(jìn)行噴霧;圖11(d)為噴霧區(qū)域內(nèi)存在50%的點(diǎn)在距離閾值范圍內(nèi)即為有靶標(biāo),檢測靶標(biāo)過于粗糙,對比圖10(b)可知,噴頭5和噴頭7對應(yīng)噴霧區(qū)域噴霧減少過多,無法進(jìn)行有效噴霧;圖11(c)為噴霧區(qū)域內(nèi)存在30%的點(diǎn)在距離閾值范圍內(nèi)即為有靶標(biāo),相對于1%、10%、50%更加合理。綜上可得出下面結(jié)論:
1)試驗(yàn)采用單側(cè)采集靶標(biāo),即圖11(c)中噴頭1、2、3、4對應(yīng)區(qū)域不存在靶標(biāo),而圖10(b)中激光樹木點(diǎn)云對應(yīng)噴頭5、6、7、8的噴霧區(qū)域。
2)圖11(c)中在噴頭對應(yīng)的5、6、7、8的噴霧區(qū)域中,噴頭8對應(yīng)區(qū)域不存在靶標(biāo)即在角度范圍[167.5°,192.5°]內(nèi)不存在靶標(biāo)。
3)噴頭7對應(yīng)區(qū)域?qū)?yīng)于圖10(b)中樹木高度大約0.5m左右的部分,其中第一段黑色區(qū)域?yàn)閤軸0.7~1m范圍內(nèi)桂花樹的樹冠垂落的部分。由于靶標(biāo)樹木樹干的支干較多,因此噴頭7中后面兩段黑色區(qū)域?yàn)闃涓刹糠值臋z測。
4)噴頭6和噴頭7噴霧區(qū)域?qū)?yīng)圖10(b)中樹冠中部和上部,樹冠密集,因此圖11(c)中噴霧6、7部分黑色近乎連續(xù),而7部分的黑色出現(xiàn)斷點(diǎn)表示樹冠上部的枝葉不平整和不夠密集所導(dǎo)致的。
Android 平板遙控器自動模式下調(diào)試結(jié)果如圖12所示。圖12(a)是自動噴霧模式下Android遙控器界面,圖12(b)是對應(yīng)的下位機(jī)的LED的亮滅情況。
(a) 自動模式下界面
(b) 下位機(jī)圖12 Android 遙控器調(diào)試結(jié)果Fig.12 Debugging results of Android remote controller
1)設(shè)計(jì)了基于Android平臺的遙控器,能夠在WiFi條件下遠(yuǎn)程控制噴霧機(jī)并在遙控器界面實(shí)時顯示噴頭啟閉狀態(tài)。
2)設(shè)計(jì)了噴霧控制器,能夠根據(jù)遙控器界面發(fā)來的指令以及二維激光傳感器掃描數(shù)據(jù)生成噴霧指令。一方面將噴頭啟閉狀態(tài)通過WiFi發(fā)送給遙控器,在界面顯示出來,另一方面將噴頭狀態(tài)通過串口發(fā)送給下位機(jī),控制電磁閥,以此控制噴頭的開閉。
3)設(shè)計(jì)基于二維激光雷達(dá)的靶標(biāo)探測算法,引入軟件延時,保證靶標(biāo)檢測與噴霧的一致性。