APP下载

LiDAR探测自动对靶喷雾控制系统设计

2019-05-27李秋洁束义平

农机化研究 2019年8期
关键词:下位靶标线程

李秋洁,徐 波,束义平,陶 冉

(1.南京林业大学 机械电子工程学院,南京 210037;2.华东理工大学 信息科学与工程学院,上海 200237)

0 引言

对靶施药技术采用实时传感器在线探测树木信息,控制喷头进行有树喷药、树间隙不喷的对靶喷雾,且可根据树木大小、形状、体积调整施药剂量的变量施药。

国外对对靶喷雾技术研究及应用较多,采用的探测技术包括红外、超声波、激光及图像等,主要用于苹果园、梨园、橙园、柑橘园等果园的病虫害防治,与连续喷雾施药方式相比,可节省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仿真及上下位机联合调试等实验检测系统性能。

1 系统结构

以许林云等[10]研制的环形多喷头喷雾机为控制对象,设计激光探测自动对靶喷雾控制系统,如图1所示。喷头组件包括8个环形放置的喷头,二维激光雷达安装在喷头组件前方中轴线上L处。

图1 喷雾机示意图

1.1 硬件系统结构

系统硬件原理图如图2所示。工作时,通过二维激光雷达获取点云数据,上位机进行数据处理和分析,发送喷雾指令给下位机,下位机根据喷雾指令驱动电磁阀进行喷雾作业。选用日本Hokuyo公司生产的二维激光扫描仪UTM-30LX,扫描范围270°,角度分辨率0.25°,扫描周期25ms,最大测量距离30m。上位机选用64位CPU工控机,下位机选用STC89C52RC单片机,外接12MHz晶振,通过发光二极管亮灭模拟电磁阀启闭。二维激光雷达与上位机采用USB接口通信,上、下位机采用串口通信。键盘、显示器等外部设备用于控制喷雾启停、设置喷雾模式及喷雾参数,显示喷头工作状态。

图2 自动对靶喷雾控制系统硬件原理图

1.2 软件系统结构

系统软件架构如图3所示。上位机控制软件采用MFC(Microsoft Foundation Classes,微软基础类库)多线程编程,界面主线程实现喷雾启停操作、作业参数设置及喷头启闭状态显示;工作线程实现二维激光雷达数据采集、靶标检测及喷头启闭指令发送,采用全局变量方式在线程间传递参数。下位机控制软件采用C51编程,实现喷雾指令接收与喷头启闭控制。

图3 自动对靶喷雾控制系统软件架构

系统软件工作流程如图4所示。其中,数字代表工作步骤。界面主线程与工作线程通过消息传递实现相互通信:界面主线程采用PostThreadMessage函数向工作线程发送消息,工作线程采用PostMessage函数向界面主线程的对话框窗口发送消息。OnWork、OnDisplay是自定义消息响应函数,OnBnClickedRun是喷雾启停按钮单击消息响应函数,OnBnClickedExit是系统退出按钮单击消息响应函数,InitInstance、ExitInstance是线程实例初始化与退出重载函数。

图4 自动对靶喷雾控制系统软件工作流程

2 激光雷达靶标探测算法设计

2.1 点云数据采集

点云数据采集模块层次结构如图5所示。安装Hokuyo公司提供的Windows操作系统驱动,将USB接口转化为虚拟串口操作,包括3个步骤:①打开设备,设置波特率(115 200bps);②设置扫描间隔(25ms),启动采集;③采集结束,关闭设备。每次采集获取1帧数据,包含1 081个不同扫描方向的距离值,用4字节长整型表示,单位为mm。

图5 二维激光雷达数据采集模块层次结构

2.2 靶标检测

对采集得到的数据帧进行处理。若扫描点距离小于等于设定的距离阈值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 靶标检测结果滤波

2.3 喷雾时间补偿

为保证喷雾完全覆盖整个树冠,需进行提前喷雾与延时停喷,对FIFO中的喷雾起始点与结束点进行前/后填充处理,如图7所示。示例中,补偿时间为2个扫描周期。

图7 喷雾时间补偿

为保证靶标检测与喷雾的一致性,计算喷雾软件延时,即

(2)

式中tinherent_delay—系统固有延时,即激光探测靶标至喷头喷出农药的时间,包括激光探测、控制信号传递、电磁阀响应及液压运输时间等;

L—激光雷达提前于喷头的安装距离;

v—喷雾车辆行驶速度。

FIFO缓冲区大小N应保证喷雾补偿与软件延时能有效运行,则

(3)

式中tcompensation—喷雾补偿时间,为提前喷雾与延时停喷时间总和;

Δt—二维激光雷达数据帧采集周期。

3 对靶喷雾控制系统上位机设计

3.1 MFC类层次结构

上位机控制软件MFC类层次结构如图8所示。自定义的界面主线程CSprayApp类与工作线程CWorkThread类派生自CWinThread类,均采用UI(User Interface,用户界面)线程类型,自定义CSprayDlg对话框类派生自CDialogEx类。CSprayApp类中包含CSprayDlg类成员变量,CSprayDlg类中又包含CWorkThread类成员变量。

图8 上位机控制软件MFC类层次结构

3.2 界面主线程设计

采用基于对话框的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时灯灭。

3.3 工作线程设计

设计工作线程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

4 对靶喷雾控制系统下位机设计

4.1 硬件结构

下位机硬件包含STC89C52RC单片机最小系统、L298N电机驱动模块、电磁阀和喷嘴,如图12所示。电磁阀采用AirTAC公司生产的2V025-08流体控制阀,压力范围为0~1.0MPa,频率为10Hz,喷嘴采用延长范围扇形喷嘴XR8006VS。

图12 下位机硬件原理图

4.2 控制软件

上、下位机采用11位异步串口通信,包含1位起始位、8位数据位、1位奇校验位、1位停止位,波特率设置为9 600。

下位机采用C51编程,采用定时器1作为波特率发生器,在主程序中初始化定时器1(工作方式2,初值FDH)及串口(工作方式3)。串口中断子程序流程图如图13所示。工作时,对接收数据进行奇校验。若数据正确,则控制电磁阀启闭;否则,丢弃数据。

图13 下位机串口中断子程序流程图

5 试验及结果分析

5.1 靶标探测结果

二维激光雷达安装高度为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 膨胀腐蚀滤波结果

5.2 系统运行结果

经测试,激光探测自动对靶喷雾控制系统在手动/自动喷雾模式、单侧/双侧喷雾模式下均能正常工作。自动喷雾模式下,通过计时函数测量靶标检测时间<1ms,远小于二维激光雷达扫描周期25ms,满足喷雾实时性需求。图18给出了自动、双侧喷雾模式下系统上位机界面及下位机运行结果。图18中,下位机采用发光二极管亮灭模拟电磁阀启闭。

图18 自动喷雾模式运行结果

6 结论

1)以环形多喷头喷雾机为控制对象,设计了LiDAR靶标探测算法。采用膨胀腐蚀形态学操作对靶标检测结果进行滤波处理,引入喷雾时间补偿,保证喷雾覆盖整个树冠。引入软件延时,保证靶标检测与喷雾的一致性,并通过MatLab离线测试验证了算法的有效性。

2)设计了上位机对靶喷雾控制系统。采用MFC多线程编程,界面主线程实现喷雾启停操作、作业参数设置及喷头启闭状态显示;工作线程实现二维激光雷达数据采集、靶标检测及喷头启闭指令发送,线程间通过消息传递实现相互通信。测试表明:系统在手动/自动喷雾模式、单侧/双侧喷雾模式下均能够正常工作。

3)设计了下位机对靶喷雾控制系统。采用C51编程,实现喷雾指令接收与喷头启闭控制。测试表明:上下位机能正确通信,采用发光二极管模拟电磁阀启闭,系统能正确工作。

后续工作包括:①将控制系统搭载到果园喷雾机上进行应用试验,确定靶标探测、喷雾补偿等参数;②将上位机控制系统移植到嵌入式平台,减小系统尺寸,降低成本。

猜你喜欢

下位靶标线程
纳米载体可缓解农药对靶标作物的负作用
实时操作系统mbedOS 互斥量调度机制剖析
“百灵”一号超音速大机动靶标
基于UDS协议的CAN BootLoader的开发与验证
基于一致性学习预测药物-靶标相互作用
基于国产化环境的线程池模型研究与实现
纳米除草剂和靶标生物的相互作用
发射机房监控系统之下位机
围观党“下位”,吐槽帝“登基”
计算机中的多线程问题