李 慧,胡文婷,谢淑芬,袁绍秋
(新疆农业大学 计算机与信息工程学院,新疆 乌鲁木齐 830052)
由于社会和经济的发展,现代人对保健生活有了更高的需求,枸杞子不仅是名贵的中医药品和保健滋补品,还是中国主要功能型特色资源之一。枸杞子广泛分布于中国宁夏和新疆等地,错综复杂的藤枝注定了枸杞子采摘的不易,而且受“无序花序、连续花果”等特性的影响[1],枸杞子采集过程需要多次完成,这不仅降低了枸杞子采集效率,也增加了枸杞子的生产成本,不利于枸杞子的生产开发。因此,研发一款能够提高效率的全自动枸杞采摘机器人,对于中国枸杞子生产开发有着重要意义。
枸杞作为十分具有经济和药用价值的产物,在全世界享有盛誉,因此国内外对枸杞采摘机均有相关研究。
国外,枸杞种植地十分广阔,土地平坦,适合宽距离种植枸杞作物。以美国为例,主要是以大型自走式枸杞采摘机为主[2],采摘的核心使用的是振动方式,每当枸杞适季时,会用两辆枸杞采摘车同时开入相邻的枸杞地路中,以相同速度缓慢前进,然后安装多层振动网,将振动网套入枸杞作物中,开启振动采摘。虽然这种采摘方式快速,但是需要枸杞作物具有宽距离种植的特点。
国内枸杞地受地理环境影响,栽培地面积多为330棵/667m2,属密植式栽培,目前主要的枸杞采摘机多为小型采摘机械,大致分为手持式力学振动型枸杞采摘机、手持式机械梳刷式枸杞采摘机和气吸式枸杞采摘机3种[3]。手持式机械振动型枸杞采摘机,原理是通过高频发生器和电机完成枸杞采集,包括偏心轮、连杆机构以及抓枝器等部分,以中国宁夏4ZGB-30型为例,当启动机器并将枸杞树枝放在抓枝器上时,高频电压就会推动偏心轮高速运动,继而利用机器的连杆推动抓枝器实现高频振荡,从而使枸杞被震落[4],但是这种方式会将同一枝条上未成熟的枸杞一起摘下,影响下一波落果率。手持式机械梳刷型枸杞采摘机的核心采摘部件为电动机、齿轮箱和刷头,纯机械式设计,对人工依赖十分强烈,当打开电源,电动机驱动齿轮箱运动,从而带动刷头逆向运动,利用适当的刷力将枸杞刷下,但这种采摘方式对枸杞枝条损伤较大。气吸型枸杞采摘机采摘的核心为气吸模块,但质量小的枸杞或者叶子较易偏离枝条,同样容易导致未成熟枸杞、叶片被采摘的概率增大[5]。
通过对目前4类枸杞采摘机器的研究,发现不能完全解放双手以及错误采摘未成熟果子仍是主要问题。综合各类枸杞采摘机的优缺点,能够最大程度地解放双手,可以对枸杞进行识别的小型自走式机器人可能成为主流。因此,本文设计了一种新的全自动枸杞采摘机器人,主要采用OpenMV进行开发,由L298N电机驱动模块、PCA9685舵机驱动模块和采摘刷头组成,系统结构如图1所示。OpenMV利用自带的摄像头对枸杞进行颜色识别[6],之后控制L298N驱动直流电机实现小车运动,再利用PCA9685通信控制舵机运行角度实现机械臂运动,采摘刷头则同样由OpenMV控制,实现采摘。
图1 控制系统结构
OpenMV是一款功耗低、体积小的机器视觉模块,采用C语言高效地实现了核心机器视觉算法,配有MicroPython解释器,通过Python语言实现对OpenMV物理层的访问与控制[7],OpenMV具有UART,I2C,SPI,PWM,ADC,DAC,GPIO等通信接口。本设计利用USB接口实现电脑与OpenMV的连接,在电脑中安装OpenMV的集成开发环境IDE完成编程以及之后的调试和更新工作,以OpenMV为核心控制器,识别枸杞,输出信号,对各个电机、舵机进行控制,达到小车运动、机械臂运行的目的。
图像识别总体分3步:图像的采集、处理和识别,其过程如图2所示,利用摄像头识别物体,通过算法进行目标的比较,对目标定位及跟踪。
图2 图像识别过程
图像处理是必不可少的一步,通过摄像头采集光学信号,转换为电信号,导入感光元件,令其初始化后,设置像素模式及分辨率。通过传感器模块从摄像头获取一帧图像,用于设置感光元件的参数,可以进行图片的预处理,然后通过使用Image模块提供的办法,获取/设置像素点、获取图像的宽度和高度。将图片转换为二维数组,之后使用ROI选择需要处理的图像区域,然后根据相应的函数返回所要研究区域的对应值[8]。
图像处理前需要对图片进行压缩,通过色域识别,可以利用LAB实现灰度图以及二值化,把THRESHOLDS中阈值的图像部分全部像素设置为1(白),阈值外的部分设为0(黑)。OpenMV里的阈值选择工具就可以获取准确的LAB,快速地进行颜色阈值的调试。利用Find_blobs函数获取需要查找的颜色,返回多个Blob列表。OpenMV拥有许多基本函数用于图像处理,包括Image size、Sensor、噪声去除、阈值分割函数等,能完全满足枸杞识别的相关功能设计。
OpenMV识别到枸条后,计算出具体位置信息,结合L298N芯片、I2C总线通信等驱动直流电机带动小车移动,实现自走式功能。小车自走式底盘采用直流电机控制,驱动板由L298N为主提供稳定的5 V电压。L298N也是常用的实验小车电源驱动模组,主要用于车辆底盘运动的开发,含有4个逻辑电平通道的驱动控制电路,可以顺利驱动46 V,2 A以下的电机,其主要原理如图3所示。
图3 L298N电机驱动模块
L298N分逻辑供应电压和驱动供应电压,一般情况下,驱动供应电压都要大于逻辑供应电压,其中驱动供应电压的最大电压可以达到36 V,而逻辑供应电压则在4.5~36 V。本设计将2,3,13,14号引脚作为输出脚,带动两个直流电机,将5,7,10,12作为输入引脚,连接OpenMV控制器的I/O引脚,同时根据L298N的真值表使模块作用,即高电平有效,6,11号引脚使能,从而带动小车运动。
在确定2路电机转动方向时,需要先设置L298N的IN1和IN2[9],当使能端作用时,IN1为1,IN2为0,实现电机逆时针旋转;IN1为0,IN2为1,实现电机顺时针旋转;使能EN端(PWM输入端)还能利用PWM控制调速。PWM系统是在适当的通信频率下,通过周期变化实现占空比的方法,来变化输出的最大有效电流。在电动机控制系统中,占空比和直流电机的速度成正比,测试时通过改变PWM的电压,可以让电机输出不同的转速。
枸杞采摘机械臂,其使用舵机供电电压在5~7 V,也可以接受稍高的电压。机械臂的每个动作都是舵机顺序运行,4个舵机依次运行,为了防止出现机械臂运行故障,采用相对大功率的电源供电。OpenMV中自带的3个引脚可以控制舵机,但是OpenMV引脚输出的电压较低,考虑到直接用OpenMV引脚供电,会出现舵机无法运行的问题,选择了以PCA9685芯片为主的舵机驱动板。
PCA9685是一款输出可调节、控制的芯片,使用I2C总线实现通信。本设计中取4路输出端,均可自由调节PWM的频率(40~1 000 Hz)和占空比(0%~100%)。编程实现对各个舵机角度的控制,舵机转动角度通过输出同周期内高电平占周期时间的比例来实现。一般舵机需要的频率为50 Hz,其计算公式为[10]:
其中频率设定寄存器(地址为0XFEH)中写入的值为Prescal,主控芯片的时钟信号为EXTCLK,refresh_rate为期望得到的PWM脉冲频率[10],本设计中的舵机为50。
本设计中只使用了4个通道,在未来的设计中可以再加入多个舵机,增加自由度。机械臂需要的4个舵机的控制信号的周期为20 ms,0.5~2.5 ms的逻辑高电平在20 ms中的占比宽度,对应舵机的旋转角度0o~180o,并表现为线性变化。
I2C总线实现OpenMV与PCA9685芯片的通信。I2C总线具有操作简单、方便有效的优点,可以使电路设计更加简单,减少线路的复杂性。I2C的写操作如图4所示,读操作如图5所示。
图4 发送数据
图5 接收数据
SCL与SDA两根线上可以连接多个外部设备器件,每个外部设备都有自己的地址,I2C总线通过地址区分辨认外部设备器件。
通过I2C总线协议与OpenMV控制舵机,以PCA9685控制芯片为基础,实现对机械臂运动的控制。机械臂的运动主要模仿手持式枸杞采摘器采摘枸杞的过程,在机械臂头部安装了枸杞采摘刷头,当全自动枸杞采摘机器人识别并运动到枸杞前时,机械臂开始运动,同时采摘刷头进行工作。
常见的枸杞采摘头有气吸式、梳刷式和振动式,本设计采用的是旋转振动式刷头,既弥补了气吸式强依赖电源的特点,又减缓了梳刷式对手动的高要求。刷头主要部署在一个电机上,随着电机的旋转,刷头利用惯性不断振动,达到采摘枸杞的效果,如图 6所示。刷头采用硅胶材料,随着转速的不同,硅胶质感也有所不同。枸杞因生长习性的影响,常见的金属条振动容易将未成熟的枸杞震落,影响枸杞出果率,而气吸式容易对叶子枝条造成一定损害,影响来年结果率[11],因此介于中间的硅胶材质是最好的选择。针对不同生成状况的枸杞林,可以综合测试出一个适当的转速,以达到最符合枸杞生态的采摘。
图6 采摘结构
本文通过对各类枸杞采摘机的结构和原理研究,综合设计了一种全自动枸杞采摘机器人,弥补了以前不能完全解放双手,采摘效率低下,错误采摘未成熟果子的缺点。该全自动枸杞采摘机器人主要使用视觉识别方案,基于OpenMV进行开发,利用自带的摄像头对枸杞进行颜色识别,结合L298N和PWM对各电机和舵机进行控制,实现对小车的运动控制。机械臂驱动选择了以PCA9685芯片为主的舵机驱动板,I2C总线进行OpenMV和舵机的通信,采摘刷头选用旋转电机的振动方式。经测试,该全自动枸杞采摘机器人各类功能初步完成。