李秋潔,徐 波,束義平,陶 冉
(1.南京林業大學 機械電子工程學院,南京 210037;2.華東理工大學 信息科學與工程學院,上海 200237)
對靶施藥技術采用實時傳感器在線探測樹木信息,控制噴頭進行有樹噴藥、樹間隙不噴的對靶噴霧,且可根據樹木大小、形狀、體積調整施藥劑量的變量施藥。
國外對對靶噴霧技術研究及應用較多,采用的探測技術包括紅外、超聲波、激光及圖像等,主要用于蘋果園、梨園、橙園、柑橘園等果園的病蟲害防治,與連續噴霧施藥方式相比,可節省20%~75%的藥液,并可有效提高藥液在樹木上的沉積率,降低農藥殘留[1-4]。在國內,諸多學者對自動對靶噴霧技術開展了一系列研究。何雄奎等[5]將紅外探測技術用于對靶施藥,將噴霧范圍分為上、中、下3段分別進行紅外探測,根據靶標有無控制相應噴頭動作。陳志剛等[6]以實體植株為試驗對象研究紅外探測影響因子,結果表明植株外形、光照強度、探測器行走速度和植株間距對探測效果有較為顯著的影響。甘英俊等[7]建立樹葉相對顏色指數模型,在FPGA上實現基于圖像處理的對靶噴霧控制系統。葛玉峰等[8]提出基于相對色彩因子的樹木圖像分割算法,建立基于機器視覺的室內農藥自動精確噴霧系統。鄭加強等[9]提出基于雙目視覺的樹木深度信息測量方法。針對低矮密植果園,許林云等[10]研制高度集成的精確對靶風送噴霧機,以 GY8 履帶自走式果園噴霧機為載體,比較超聲波、紅外和激光 3 種傳感器的性能,最終選定工作穩定、響應快速、方向性好的激光傳感器作為自動對靶噴霧機的探測裝置;但為探測不同噴霧區域的靶標信息,需布置多個測距傳感器,裝置過于復雜。LiDAR(light detection and ranging,激光雷達)技術能快速獲取靶標完整形貌,提高測量效率[11-14],基于LiDAR的對靶噴霧機已在美國10個多州的果園和苗圃中應用示范推廣[15-16]。
本文在許林云等[10]研制的激光探測對靶噴霧機基礎上,進行了LiDAR探測對靶噴霧控制系統的設計。控制系統采用上下位機結構,將人機交互、靶標探測與噴頭控制功能分離,并通過MatLab仿真及上下位機聯合調試等實驗檢測系統性能。
以許林云等[10]研制的環形多噴頭噴霧機為控制對象,設計激光探測自動對靶噴霧控制系統,如圖1所示。噴頭組件包括8個環形放置的噴頭,二維激光雷達安裝在噴頭組件前方中軸線上L處。

圖1 噴霧機示意圖
系統硬件原理圖如圖2所示。工作時,通過二維激光雷達獲取點云數據,上位機進行數據處理和分析,發送噴霧指令給下位機,下位機根據噴霧指令驅動電磁閥進行噴霧作業。選用日本Hokuyo公司生產的二維激光掃描儀UTM-30LX,掃描范圍270°,角度分辨率0.25°,掃描周期25ms,最大測量距離30m。上位機選用64位CPU工控機,下位機選用STC89C52RC單片機,外接12MHz晶振,通過發光二極管亮滅模擬電磁閥啟閉。二維激光雷達與上位機采用USB接口通信,上、下位機采用串口通信。鍵盤、顯示器等外部設備用于控制噴霧啟停、設置噴霧模式及噴霧參數,顯示噴頭工作狀態。

圖2 自動對靶噴霧控制系統硬件原理圖
系統軟件架構如圖3所示。上位機控制軟件采用MFC(Microsoft Foundation Classes,微軟基礎類庫)多線程編程,界面主線程實現噴霧啟停操作、作業參數設置及噴頭啟閉狀態顯示;工作線程實現二維激光雷達數據采集、靶標檢測及噴頭啟閉指令發送,采用全局變量方式在線程間傳遞參數。下位機控制軟件采用C51編程,實現噴霧指令接收與噴頭啟閉控制。

圖3 自動對靶噴霧控制系統軟件架構
系統軟件工作流程如圖4所示。其中,數字代表工作步驟。界面主線程與工作線程通過消息傳遞實現相互通信:界面主線程采用PostThreadMessage函數向工作線程發送消息,工作線程采用PostMessage函數向界面主線程的對話框窗口發送消息。OnWork、OnDisplay是自定義消息響應函數,OnBnClickedRun是噴霧啟停按鈕單擊消息響應函數,OnBnClickedExit是系統退出按鈕單擊消息響應函數,InitInstance、ExitInstance是線程實例初始化與退出重載函數。

圖4 自動對靶噴霧控制系統軟件工作流程
點云數據采集模塊層次結構如圖5所示。安裝Hokuyo公司提供的Windows操作系統驅動,將USB接口轉化為虛擬串口操作,包括3個步驟:①打開設備,設置波特率(115 200bps);②設置掃描間隔(25ms),啟動采集;③采集結束,關閉設備。每次采集獲取1幀數據,包含1 081個不同掃描方向的距離值,用4字節長整型表示,單位為mm。

圖5 二維激光雷達數據采集模塊層次結構
對采集得到的數據幀進行處理。若掃描點距離小于等于設定的距離閾值D,判斷為靶標點,計算各扇形噴霧區域靶標點個數與掃描點總數的比率。若大于等于設定閾值T,認為當前幀存在靶標,則
(1)
式中i—掃描點幀內索引號,范圍[0, 1080];
n—噴頭索引號,范圍[1, 8];
start(n)—第n個噴頭噴霧區起始索引號;
end(n)—第n個噴頭噴霧區結束索引號;
d(i)—第i個掃描點的測量距離;
T—靶標檢測閾值;
D—靶標距離閾值。
建立FIFO(First In First Out,先進先出)緩沖區,保存N幀數據的靶標檢測結果,將最新幀寫入緩沖區末尾。
采用二值圖像膨脹腐蝕形態學操作,結合前后幀信息對靶標檢測結果進行濾波處理,如圖6所示。若無靶標連續幀數過少,則用靶標幀替換[見圖6(a)],避免將樹冠空洞、枝間間隙誤判為樹間空隙而出現的電磁閥頻繁啟閉;若靶標連續幀數過少,則用無靶標幀替換[見圖6(b)],避免將非樹木桿狀物誤判為靶標。

圖6 靶標檢測結果濾波
為保證噴霧完全覆蓋整個樹冠,需進行提前噴霧與延時停噴,對FIFO中的噴霧起始點與結束點進行前/后填充處理,如圖7所示。示例中,補償時間為2個掃描周期。

圖7 噴霧時間補償
為保證靶標檢測與噴霧的一致性,計算噴霧軟件延時,即
(2)
式中tinherent_delay—系統固有延時,即激光探測靶標至噴頭噴出農藥的時間,包括激光探測、控制信號傳遞、電磁閥響應及液壓運輸時間等;
L—激光雷達提前于噴頭的安裝距離;
v—噴霧車輛行駛速度。
FIFO緩沖區大小N應保證噴霧補償與軟件延時能有效運行,則
(3)
式中tcompensation—噴霧補償時間,為提前噴霧與延時停噴時間總和;
Δt—二維激光雷達數據幀采集周期。
上位機控制軟件MFC類層次結構如圖8所示。自定義的界面主線程CSprayApp類與工作線程CWorkThread類派生自CWinThread類,均采用UI(User Interface,用戶界面)線程類型,自定義CSprayDlg對話框類派生自CDialogEx類。CSprayApp類中包含CSprayDlg類成員變量,CSprayDlg類中又包含CWorkThread類成員變量。

圖8 上位機控制軟件MFC類層次結構
采用基于對話框的MFC應用程序項目框架設計界面主線程CSprayApp,步驟為:①創建對話框資源,添加各種控件;②創建對話框類CSprayDlg,添加控件變量和消息響應函數等。
3.2.1 界面資源
控制系統界面設計如圖9所示。控件用途、類型及關聯全局變量如表1所示。此外,為噴頭狀態指示燈、噴霧啟停按鈕、系統退出按鈕添加CBitmapButton類型變量,通過LoadBitmaps成員函數為按鈕加載位圖資源,使按鈕在不同狀態下呈現不同外觀。

圖9 自動對靶噴霧控制系統界面設計
表1 上位機界面主要控件及對應全局變量
Table 1 Main controls and corresponding global variables of upper computer interface

控件用途控件類型關聯全局變噴頭狀態指示燈ButtonBOOL NOZZLE[8]車速Editfloat V靶標距離閾值Editfloat D自動/手動選擇Radio-buttonBOOL AUTO左側噴霧選擇Check-boxBOOL L右側噴霧選擇Check-boxBOOL R噴霧啟停按鈕ButtonBOOL RUN系統退出按鈕Button/
控制系統界面實現以下人機交互功能:
1)手動/自動噴霧模式。手動噴霧模式下,通過“噴霧啟停”按鈕控制噴頭全開或全閉;自動噴霧模式下,通過“噴霧啟停”按鈕進行激光探測自動對靶噴霧或全閉。
2)單側/雙側噴霧模式。通過勾選“左側噴霧”“右側噴霧”復選框實現單側/雙側噴霧。
3)對靶噴霧作業參數設置。可設置車速、靶標距離閾值兩個對靶噴霧作業參數。
4)噴頭狀態顯示。噴頭打開指示燈亮,否則指示燈滅。
3.2.2 界面消息響應函數
1)噴霧啟停消息響應函數OnBnClickedRun。為噴霧啟停按鈕添加按鈕單擊消息響應函數OnBnClickedRun,流程圖如圖10所示。按鈕每次按下,噴霧狀態在啟動(RUN=TRUE)與停止(RUN=FALSE)間切換,為噴霧啟停按鈕加載不同位圖資源;噴霧啟動時,根據控件狀態更新噴霧參數全局變量(V、T、AUTO、L、R)。按鈕初次按下時,采用AfxBeginThread函數創建工作線程,初始化實例,接著向其發送WM_WORK消息,觸發自定義消息響應函數CWorkThread::OnWork,進行噴霧作業。

圖10 噴霧啟停按鈕單擊消息響應函數CDlg::OnBnClickedRun
2)系統退出消息響應函數OnBnClickedExit。為系統退出按鈕添加按鈕單擊消息響應函數OnBnClickedExit,向工作線程發送WM_QUIT消息,退出實例,結束工作線程,最后退出界面主線程。
3)噴頭狀態刷新消息響應函數OnDisplay。為自定義消息WM_DISPLAY添加消息響應函數OnDisplay,根據NOZZLE[8]取值為噴頭狀態指示燈加載不同位圖資源,取值為TRUE時燈亮,取值為FALSE時燈滅。
設計工作線程CWorkThread類,實現激光雷達數據采集、靶標檢測及噴頭啟閉指令發送。
1)初始化實例函數InitInstance。重載初始化實例InitInstance函數,為FIFO緩沖區分配空間,打開二維激光雷達與下位機通信串口。
2)退出實例函數ExitInstance。重載退出實例 ExitInstance函數,釋放FIFO緩沖區,關閉二維激光雷達與下位機通信串口。
3)啟動噴霧消息響應函數OnWork。為自定義消息WM_WORK添加消息響應函數OnWork,流程圖如圖11所示。首先判斷噴霧狀態,噴霧停止(RUN=FALSE)則關閉全部噴頭,噴霧啟動(RUN=TRUE)需判斷噴霧模式。手動模式(AUTO=FALSE)下開啟全部噴頭;自動模式(AUTO=TRUE)下,進行數據采集與靶標檢測,生成噴頭啟閉指令,根據左側、右側噴霧選擇(L、R)關閉相應噴頭,將噴頭啟閉指令寫入FIFO緩沖區尾部,進行膨脹腐蝕濾波及時間補償處理。若延時時間到,從FIFO緩沖區頭部讀取指令通過串口發送給下位機,更新噴頭狀態指示燈數組(NOZZLE[8])的值,向界面主線程發送噴頭狀態顯示更新消息WM_DISPLAY。

圖11 啟動噴霧消息響應函數CWorkThread::OnWork
下位機硬件包含STC89C52RC單片機最小系統、L298N電機驅動模塊、電磁閥和噴嘴,如圖12所示。電磁閥采用AirTAC公司生產的2V025-08流體控制閥,壓力范圍為0~1.0MPa,頻率為10Hz,噴嘴采用延長范圍扇形噴嘴XR8006VS。

圖12 下位機硬件原理圖
上、下位機采用11位異步串口通信,包含1位起始位、8位數據位、1位奇校驗位、1位停止位,波特率設置為9 600。
下位機采用C51編程,采用定時器1作為波特率發生器,在主程序中初始化定時器1(工作方式2,初值FDH)及串口(工作方式3)。串口中斷子程序流程圖如圖13所示。工作時,對接收數據進行奇校驗。若數據正確,則控制電磁閥啟閉;否則,丟棄數據。

圖13 下位機串口中斷子程序流程圖
二維激光雷達安裝高度為0.3m,移動速度v=1m/s。噴霧場景包含兩棵桂花樹,如圖14所示。為便于查看靶標探測結果,將點云數據保存為文件,通過MatLab仿真靶標探測算法。

圖14 噴霧場景
各噴頭分區示意圖如圖15所示。其中,每個噴頭噴灑區域范圍為25°。

圖15 噴頭分區示意圖
式(1)中,靶標距離閾值D=3m,閾值T取0.01、0.1、0.3、0.5時,各扇區靶標檢測結果如圖16所示。其中,黑點代表該噴霧扇區存在靶標,扇區5、6、7對應樹冠下部、中部和上部,T值過大(0.5)或過小(0.01)易導致過噴或漏噴。

圖16 不同閾值下的靶標檢測結果
膨脹腐蝕濾波結果如圖17所示。對比圖16,濾除了樹冠邊緣稀疏枝葉產生的離散點,避免過量噴霧。

圖17 膨脹腐蝕濾波結果
經測試,激光探測自動對靶噴霧控制系統在手動/自動噴霧模式、單側/雙側噴霧模式下均能正常工作。自動噴霧模式下,通過計時函數測量靶標檢測時間<1ms,遠小于二維激光雷達掃描周期25ms,滿足噴霧實時性需求。圖18給出了自動、雙側噴霧模式下系統上位機界面及下位機運行結果。圖18中,下位機采用發光二極管亮滅模擬電磁閥啟閉。

圖18 自動噴霧模式運行結果
1)以環形多噴頭噴霧機為控制對象,設計了LiDAR靶標探測算法。采用膨脹腐蝕形態學操作對靶標檢測結果進行濾波處理,引入噴霧時間補償,保證噴霧覆蓋整個樹冠。引入軟件延時,保證靶標檢測與噴霧的一致性,并通過MatLab離線測試驗證了算法的有效性。
2)設計了上位機對靶噴霧控制系統。采用MFC多線程編程,界面主線程實現噴霧啟停操作、作業參數設置及噴頭啟閉狀態顯示;工作線程實現二維激光雷達數據采集、靶標檢測及噴頭啟閉指令發送,線程間通過消息傳遞實現相互通信。測試表明:系統在手動/自動噴霧模式、單側/雙側噴霧模式下均能夠正常工作。
3)設計了下位機對靶噴霧控制系統。采用C51編程,實現噴霧指令接收與噴頭啟閉控制。測試表明:上下位機能正確通信,采用發光二極管模擬電磁閥啟閉,系統能正確工作。
后續工作包括:①將控制系統搭載到果園噴霧機上進行應用試驗,確定靶標探測、噴霧補償等參數;②將上位機控制系統移植到嵌入式平臺,減小系統尺寸,降低成本。