李秋潔,徐 波,束義平,陶 冉
(1.南京林業(yè)大學(xué) 機(jī)械電子工程學(xué)院,南京 210037;2.華東理工大學(xué) 信息科學(xué)與工程學(xué)院,上海 200237)
對靶施藥技術(shù)采用實(shí)時傳感器在線探測樹木信息,控制噴頭進(jìn)行有樹噴藥、樹間隙不噴的對靶噴霧,且可根據(jù)樹木大小、形狀、體積調(diào)整施藥劑量的變量施藥。
國外對對靶噴霧技術(shù)研究及應(yīng)用較多,采用的探測技術(shù)包括紅外、超聲波、激光及圖像等,主要用于蘋果園、梨園、橙園、柑橘園等果園的病蟲害防治,與連續(xù)噴霧施藥方式相比,可節(jié)省20%~75%的藥液,并可有效提高藥液在樹木上的沉積率,降低農(nóng)藥殘留[1-4]。在國內(nèi),諸多學(xué)者對自動對靶噴霧技術(shù)開展了一系列研究。何雄奎等[5]將紅外探測技術(shù)用于對靶施藥,將噴霧范圍分為上、中、下3段分別進(jìn)行紅外探測,根據(jù)靶標(biāo)有無控制相應(yīng)噴頭動作。陳志剛等[6]以實(shí)體植株為試驗(yàn)對象研究紅外探測影響因子,結(jié)果表明植株外形、光照強(qiáng)度、探測器行走速度和植株間距對探測效果有較為顯著的影響。甘英俊等[7]建立樹葉相對顏色指數(shù)模型,在FPGA上實(shí)現(xiàn)基于圖像處理的對靶噴霧控制系統(tǒng)。葛玉峰等[8]提出基于相對色彩因子的樹木圖像分割算法,建立基于機(jī)器視覺的室內(nèi)農(nóng)藥自動精確噴霧系統(tǒng)。鄭加強(qiáng)等[9]提出基于雙目視覺的樹木深度信息測量方法。針對低矮密植果園,許林云等[10]研制高度集成的精確對靶風(fēng)送噴霧機(jī),以 GY8 履帶自走式果園噴霧機(jī)為載體,比較超聲波、紅外和激光 3 種傳感器的性能,最終選定工作穩(wěn)定、響應(yīng)快速、方向性好的激光傳感器作為自動對靶噴霧機(jī)的探測裝置;但為探測不同噴霧區(qū)域的靶標(biāo)信息,需布置多個測距傳感器,裝置過于復(fù)雜。LiDAR(light detection and ranging,激光雷達(dá))技術(shù)能快速獲取靶標(biāo)完整形貌,提高測量效率[11-14],基于LiDAR的對靶噴霧機(jī)已在美國10個多州的果園和苗圃中應(yīng)用示范推廣[15-16]。
本文在許林云等[10]研制的激光探測對靶噴霧機(jī)基礎(chǔ)上,進(jìn)行了LiDAR探測對靶噴霧控制系統(tǒng)的設(shè)計(jì)。控制系統(tǒng)采用上下位機(jī)結(jié)構(gòu),將人機(jī)交互、靶標(biāo)探測與噴頭控制功能分離,并通過MatLab仿真及上下位機(jī)聯(lián)合調(diào)試等實(shí)驗(yàn)檢測系統(tǒng)性能。
以許林云等[10]研制的環(huán)形多噴頭噴霧機(jī)為控制對象,設(shè)計(jì)激光探測自動對靶噴霧控制系統(tǒng),如圖1所示。噴頭組件包括8個環(huán)形放置的噴頭,二維激光雷達(dá)安裝在噴頭組件前方中軸線上L處。
圖1 噴霧機(jī)示意圖
系統(tǒng)硬件原理圖如圖2所示。工作時,通過二維激光雷達(dá)獲取點(diǎn)云數(shù)據(jù),上位機(jī)進(jìn)行數(shù)據(jù)處理和分析,發(fā)送噴霧指令給下位機(jī),下位機(jī)根據(jù)噴霧指令驅(qū)動電磁閥進(jìn)行噴霧作業(yè)。選用日本Hokuyo公司生產(chǎn)的二維激光掃描儀UTM-30LX,掃描范圍270°,角度分辨率0.25°,掃描周期25ms,最大測量距離30m。上位機(jī)選用64位CPU工控機(jī),下位機(jī)選用STC89C52RC單片機(jī),外接12MHz晶振,通過發(fā)光二極管亮滅模擬電磁閥啟閉。二維激光雷達(dá)與上位機(jī)采用USB接口通信,上、下位機(jī)采用串口通信。鍵盤、顯示器等外部設(shè)備用于控制噴霧啟停、設(shè)置噴霧模式及噴霧參數(shù),顯示噴頭工作狀態(tài)。
圖2 自動對靶噴霧控制系統(tǒng)硬件原理圖
系統(tǒng)軟件架構(gòu)如圖3所示。上位機(jī)控制軟件采用MFC(Microsoft Foundation Classes,微軟基礎(chǔ)類庫)多線程編程,界面主線程實(shí)現(xiàn)噴霧啟停操作、作業(yè)參數(shù)設(shè)置及噴頭啟閉狀態(tài)顯示;工作線程實(shí)現(xiàn)二維激光雷達(dá)數(shù)據(jù)采集、靶標(biāo)檢測及噴頭啟閉指令發(fā)送,采用全局變量方式在線程間傳遞參數(shù)。下位機(jī)控制軟件采用C51編程,實(shí)現(xiàn)噴霧指令接收與噴頭啟閉控制。
圖3 自動對靶噴霧控制系統(tǒng)軟件架構(gòu)
系統(tǒng)軟件工作流程如圖4所示。其中,數(shù)字代表工作步驟。界面主線程與工作線程通過消息傳遞實(shí)現(xiàn)相互通信:界面主線程采用PostThreadMessage函數(shù)向工作線程發(fā)送消息,工作線程采用PostMessage函數(shù)向界面主線程的對話框窗口發(fā)送消息。OnWork、OnDisplay是自定義消息響應(yīng)函數(shù),OnBnClickedRun是噴霧啟停按鈕單擊消息響應(yīng)函數(shù),OnBnClickedExit是系統(tǒng)退出按鈕單擊消息響應(yīng)函數(shù),InitInstance、ExitInstance是線程實(shí)例初始化與退出重載函數(shù)。
圖4 自動對靶噴霧控制系統(tǒng)軟件工作流程
點(diǎn)云數(shù)據(jù)采集模塊層次結(jié)構(gòu)如圖5所示。安裝Hokuyo公司提供的Windows操作系統(tǒng)驅(qū)動,將USB接口轉(zhuǎn)化為虛擬串口操作,包括3個步驟:①打開設(shè)備,設(shè)置波特率(115 200bps);②設(shè)置掃描間隔(25ms),啟動采集;③采集結(jié)束,關(guān)閉設(shè)備。每次采集獲取1幀數(shù)據(jù),包含1 081個不同掃描方向的距離值,用4字節(jié)長整型表示,單位為mm。
圖5 二維激光雷達(dá)數(shù)據(jù)采集模塊層次結(jié)構(gòu)
對采集得到的數(shù)據(jù)幀進(jìn)行處理。若掃描點(diǎn)距離小于等于設(shè)定的距離閾值D,判斷為靶標(biāo)點(diǎn),計(jì)算各扇形噴霧區(qū)域靶標(biāo)點(diǎn)個數(shù)與掃描點(diǎn)總數(shù)的比率。若大于等于設(shè)定閾值T,認(rèn)為當(dāng)前幀存在靶標(biāo),則
(1)
式中i—掃描點(diǎn)幀內(nèi)索引號,范圍[0, 1080];
n—噴頭索引號,范圍[1, 8];
start(n)—第n個噴頭噴霧區(qū)起始索引號;
end(n)—第n個噴頭噴霧區(qū)結(jié)束索引號;
d(i)—第i個掃描點(diǎn)的測量距離;
T—靶標(biāo)檢測閾值;
D—靶標(biāo)距離閾值。
建立FIFO(First In First Out,先進(jìn)先出)緩沖區(qū),保存N幀數(shù)據(jù)的靶標(biāo)檢測結(jié)果,將最新幀寫入緩沖區(qū)末尾。
采用二值圖像膨脹腐蝕形態(tài)學(xué)操作,結(jié)合前后幀信息對靶標(biāo)檢測結(jié)果進(jìn)行濾波處理,如圖6所示。若無靶標(biāo)連續(xù)幀數(shù)過少,則用靶標(biāo)幀替換[見圖6(a)],避免將樹冠空洞、枝間間隙誤判為樹間空隙而出現(xiàn)的電磁閥頻繁啟閉;若靶標(biāo)連續(xù)幀數(shù)過少,則用無靶標(biāo)幀替換[見圖6(b)],避免將非樹木桿狀物誤判為靶標(biāo)。
圖6 靶標(biāo)檢測結(jié)果濾波
為保證噴霧完全覆蓋整個樹冠,需進(jìn)行提前噴霧與延時停噴,對FIFO中的噴霧起始點(diǎn)與結(jié)束點(diǎn)進(jìn)行前/后填充處理,如圖7所示。示例中,補(bǔ)償時間為2個掃描周期。
圖7 噴霧時間補(bǔ)償
為保證靶標(biāo)檢測與噴霧的一致性,計(jì)算噴霧軟件延時,即
(2)
式中tinherent_delay—系統(tǒng)固有延時,即激光探測靶標(biāo)至噴頭噴出農(nóng)藥的時間,包括激光探測、控制信號傳遞、電磁閥響應(yīng)及液壓運(yùn)輸時間等;
L—激光雷達(dá)提前于噴頭的安裝距離;
v—噴霧車輛行駛速度。
FIFO緩沖區(qū)大小N應(yīng)保證噴霧補(bǔ)償與軟件延時能有效運(yùn)行,則
(3)
式中tcompensation—噴霧補(bǔ)償時間,為提前噴霧與延時停噴時間總和;
Δt—二維激光雷達(dá)數(shù)據(jù)幀采集周期。
上位機(jī)控制軟件MFC類層次結(jié)構(gòu)如圖8所示。自定義的界面主線程CSprayApp類與工作線程CWorkThread類派生自CWinThread類,均采用UI(User Interface,用戶界面)線程類型,自定義CSprayDlg對話框類派生自CDialogEx類。CSprayApp類中包含CSprayDlg類成員變量,CSprayDlg類中又包含CWorkThread類成員變量。
圖8 上位機(jī)控制軟件MFC類層次結(jié)構(gòu)
采用基于對話框的MFC應(yīng)用程序項(xiàng)目框架設(shè)計(jì)界面主線程CSprayApp,步驟為:①創(chuàng)建對話框資源,添加各種控件;②創(chuàng)建對話框類CSprayDlg,添加控件變量和消息響應(yīng)函數(shù)等。
3.2.1 界面資源
控制系統(tǒng)界面設(shè)計(jì)如圖9所示??丶猛尽㈩愋图瓣P(guān)聯(lián)全局變量如表1所示。此外,為噴頭狀態(tài)指示燈、噴霧啟停按鈕、系統(tǒng)退出按鈕添加CBitmapButton類型變量,通過LoadBitmaps成員函數(shù)為按鈕加載位圖資源,使按鈕在不同狀態(tài)下呈現(xiàn)不同外觀。
圖9 自動對靶噴霧控制系統(tǒng)界面設(shè)計(jì)
表1 上位機(jī)界面主要控件及對應(yīng)全局變量
Table 1 Main controls and corresponding global variables of upper computer interface
控件用途控件類型關(guān)聯(lián)全局變噴頭狀態(tài)指示燈ButtonBOOL NOZZLE[8]車速Editfloat V靶標(biāo)距離閾值Editfloat D自動/手動選擇Radio-buttonBOOL AUTO左側(cè)噴霧選擇Check-boxBOOL L右側(cè)噴霧選擇Check-boxBOOL R噴霧啟停按鈕ButtonBOOL RUN系統(tǒng)退出按鈕Button/
控制系統(tǒng)界面實(shí)現(xiàn)以下人機(jī)交互功能:
1)手動/自動噴霧模式。手動噴霧模式下,通過“噴霧啟?!卑粹o控制噴頭全開或全閉;自動噴霧模式下,通過“噴霧啟?!卑粹o進(jìn)行激光探測自動對靶噴霧或全閉。
2)單側(cè)/雙側(cè)噴霧模式。通過勾選“左側(cè)噴霧”“右側(cè)噴霧”復(fù)選框?qū)崿F(xiàn)單側(cè)/雙側(cè)噴霧。
3)對靶噴霧作業(yè)參數(shù)設(shè)置??稍O(shè)置車速、靶標(biāo)距離閾值兩個對靶噴霧作業(yè)參數(shù)。
4)噴頭狀態(tài)顯示。噴頭打開指示燈亮,否則指示燈滅。
3.2.2 界面消息響應(yīng)函數(shù)
1)噴霧啟停消息響應(yīng)函數(shù)OnBnClickedRun。為噴霧啟停按鈕添加按鈕單擊消息響應(yīng)函數(shù)OnBnClickedRun,流程圖如圖10所示。按鈕每次按下,噴霧狀態(tài)在啟動(RUN=TRUE)與停止(RUN=FALSE)間切換,為噴霧啟停按鈕加載不同位圖資源;噴霧啟動時,根據(jù)控件狀態(tài)更新噴霧參數(shù)全局變量(V、T、AUTO、L、R)。按鈕初次按下時,采用AfxBeginThread函數(shù)創(chuàng)建工作線程,初始化實(shí)例,接著向其發(fā)送WM_WORK消息,觸發(fā)自定義消息響應(yīng)函數(shù)CWorkThread::OnWork,進(jìn)行噴霧作業(yè)。
圖10 噴霧啟停按鈕單擊消息響應(yīng)函數(shù)CDlg::OnBnClickedRun
2)系統(tǒng)退出消息響應(yīng)函數(shù)OnBnClickedExit。為系統(tǒng)退出按鈕添加按鈕單擊消息響應(yīng)函數(shù)OnBnClickedExit,向工作線程發(fā)送WM_QUIT消息,退出實(shí)例,結(jié)束工作線程,最后退出界面主線程。
3)噴頭狀態(tài)刷新消息響應(yīng)函數(shù)OnDisplay。為自定義消息WM_DISPLAY添加消息響應(yīng)函數(shù)OnDisplay,根據(jù)NOZZLE[8]取值為噴頭狀態(tài)指示燈加載不同位圖資源,取值為TRUE時燈亮,取值為FALSE時燈滅。
設(shè)計(jì)工作線程CWorkThread類,實(shí)現(xiàn)激光雷達(dá)數(shù)據(jù)采集、靶標(biāo)檢測及噴頭啟閉指令發(fā)送。
1)初始化實(shí)例函數(shù)InitInstance。重載初始化實(shí)例InitInstance函數(shù),為FIFO緩沖區(qū)分配空間,打開二維激光雷達(dá)與下位機(jī)通信串口。
2)退出實(shí)例函數(shù)ExitInstance。重載退出實(shí)例 ExitInstance函數(shù),釋放FIFO緩沖區(qū),關(guān)閉二維激光雷達(dá)與下位機(jī)通信串口。
3)啟動噴霧消息響應(yīng)函數(shù)OnWork。為自定義消息WM_WORK添加消息響應(yīng)函數(shù)OnWork,流程圖如圖11所示。首先判斷噴霧狀態(tài),噴霧停止(RUN=FALSE)則關(guān)閉全部噴頭,噴霧啟動(RUN=TRUE)需判斷噴霧模式。手動模式(AUTO=FALSE)下開啟全部噴頭;自動模式(AUTO=TRUE)下,進(jìn)行數(shù)據(jù)采集與靶標(biāo)檢測,生成噴頭啟閉指令,根據(jù)左側(cè)、右側(cè)噴霧選擇(L、R)關(guān)閉相應(yīng)噴頭,將噴頭啟閉指令寫入FIFO緩沖區(qū)尾部,進(jìn)行膨脹腐蝕濾波及時間補(bǔ)償處理。若延時時間到,從FIFO緩沖區(qū)頭部讀取指令通過串口發(fā)送給下位機(jī),更新噴頭狀態(tài)指示燈數(shù)組(NOZZLE[8])的值,向界面主線程發(fā)送噴頭狀態(tài)顯示更新消息WM_DISPLAY。
圖11 啟動噴霧消息響應(yīng)函數(shù)CWorkThread::OnWork
下位機(jī)硬件包含STC89C52RC單片機(jī)最小系統(tǒng)、L298N電機(jī)驅(qū)動模塊、電磁閥和噴嘴,如圖12所示。電磁閥采用AirTAC公司生產(chǎn)的2V025-08流體控制閥,壓力范圍為0~1.0MPa,頻率為10Hz,噴嘴采用延長范圍扇形噴嘴XR8006VS。
圖12 下位機(jī)硬件原理圖
上、下位機(jī)采用11位異步串口通信,包含1位起始位、8位數(shù)據(jù)位、1位奇校驗(yàn)位、1位停止位,波特率設(shè)置為9 600。
下位機(jī)采用C51編程,采用定時器1作為波特率發(fā)生器,在主程序中初始化定時器1(工作方式2,初值FDH)及串口(工作方式3)。串口中斷子程序流程圖如圖13所示。工作時,對接收數(shù)據(jù)進(jìn)行奇校驗(yàn)。若數(shù)據(jù)正確,則控制電磁閥啟閉;否則,丟棄數(shù)據(jù)。
圖13 下位機(jī)串口中斷子程序流程圖
二維激光雷達(dá)安裝高度為0.3m,移動速度v=1m/s。噴霧場景包含兩棵桂花樹,如圖14所示。為便于查看靶標(biāo)探測結(jié)果,將點(diǎn)云數(shù)據(jù)保存為文件,通過MatLab仿真靶標(biāo)探測算法。
圖14 噴霧場景
各噴頭分區(qū)示意圖如圖15所示。其中,每個噴頭噴灑區(qū)域范圍為25°。
圖15 噴頭分區(qū)示意圖
式(1)中,靶標(biāo)距離閾值D=3m,閾值T取0.01、0.1、0.3、0.5時,各扇區(qū)靶標(biāo)檢測結(jié)果如圖16所示。其中,黑點(diǎn)代表該噴霧扇區(qū)存在靶標(biāo),扇區(qū)5、6、7對應(yīng)樹冠下部、中部和上部,T值過大(0.5)或過小(0.01)易導(dǎo)致過噴或漏噴。
圖16 不同閾值下的靶標(biāo)檢測結(jié)果
膨脹腐蝕濾波結(jié)果如圖17所示。對比圖16,濾除了樹冠邊緣稀疏枝葉產(chǎn)生的離散點(diǎn),避免過量噴霧。
圖17 膨脹腐蝕濾波結(jié)果
經(jīng)測試,激光探測自動對靶噴霧控制系統(tǒng)在手動/自動噴霧模式、單側(cè)/雙側(cè)噴霧模式下均能正常工作。自動噴霧模式下,通過計(jì)時函數(shù)測量靶標(biāo)檢測時間<1ms,遠(yuǎn)小于二維激光雷達(dá)掃描周期25ms,滿足噴霧實(shí)時性需求。圖18給出了自動、雙側(cè)噴霧模式下系統(tǒng)上位機(jī)界面及下位機(jī)運(yùn)行結(jié)果。圖18中,下位機(jī)采用發(fā)光二極管亮滅模擬電磁閥啟閉。
圖18 自動噴霧模式運(yùn)行結(jié)果
1)以環(huán)形多噴頭噴霧機(jī)為控制對象,設(shè)計(jì)了LiDAR靶標(biāo)探測算法。采用膨脹腐蝕形態(tài)學(xué)操作對靶標(biāo)檢測結(jié)果進(jìn)行濾波處理,引入噴霧時間補(bǔ)償,保證噴霧覆蓋整個樹冠。引入軟件延時,保證靶標(biāo)檢測與噴霧的一致性,并通過MatLab離線測試驗(yàn)證了算法的有效性。
2)設(shè)計(jì)了上位機(jī)對靶噴霧控制系統(tǒng)。采用MFC多線程編程,界面主線程實(shí)現(xiàn)噴霧啟停操作、作業(yè)參數(shù)設(shè)置及噴頭啟閉狀態(tài)顯示;工作線程實(shí)現(xiàn)二維激光雷達(dá)數(shù)據(jù)采集、靶標(biāo)檢測及噴頭啟閉指令發(fā)送,線程間通過消息傳遞實(shí)現(xiàn)相互通信。測試表明:系統(tǒng)在手動/自動噴霧模式、單側(cè)/雙側(cè)噴霧模式下均能夠正常工作。
3)設(shè)計(jì)了下位機(jī)對靶噴霧控制系統(tǒng)。采用C51編程,實(shí)現(xiàn)噴霧指令接收與噴頭啟閉控制。測試表明:上下位機(jī)能正確通信,采用發(fā)光二極管模擬電磁閥啟閉,系統(tǒng)能正確工作。
后續(xù)工作包括:①將控制系統(tǒng)搭載到果園噴霧機(jī)上進(jìn)行應(yīng)用試驗(yàn),確定靶標(biāo)探測、噴霧補(bǔ)償?shù)葏?shù);②將上位機(jī)控制系統(tǒng)移植到嵌入式平臺,減小系統(tǒng)尺寸,降低成本。