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