APP下载

面向机器人柑橘采摘的控制系统设计与试验*

2023-10-09王焱清汤旸杨光友

中国农机化学报 2023年9期
关键词:手爪柑橘柔性

王焱清,汤旸,杨光友

(1. 湖北工业大学农机工程研究设计院,武汉市,430068; 2. 湖北省农机装备智能化工程技术研究中心,武汉市,430068)

0 引言

现阶段我国的柑橘采摘主要还是依靠人工,人工采摘耗时耗力、效率低。机器人代替人工采摘是未来柑橘采摘的发展方向,是促进采摘作业机械化、自动化和智能化水平的必由之路。在采摘机器人硬件平台的基础上,结合控制系统实现各类果蔬采摘作业。采摘机器人控制系统包括视觉模块、机械臂控制模块、末端执行器控制模块等,因此设计稳定、高效的控制系统是关键环节[1-16],如熊俊涛等[17]以多类型采摘机器人平台为基础,在Window XP开发环境下,采用Matlab等编程工具,通过对RSR232通信总线、运动控制板以及位控板等进行开发,设计了机器人控制系统,包括水果图像信息采集系统、主控制器、运动控制系统;刘静等[18]基于柑橘类水果采摘机器人平台,采用Micopython、keil5编程软件,Python、C编程语言,通过对OpenMV机器视觉模块进行二次开发,同时编写单片机控制程序,设计了包括视觉识别系统、末端执行器控制、机械臂控制、移动平台控制和升降装置控制等在内的采摘机器人控制系统。本文面向机器人柑橘采摘,基于由上位机、深度相机、机械臂和柔性手爪等硬件设备组成的采摘机器人平台,研究了该平台控制系统的设计,包括视觉识别定位程序模块、柔性手爪动作控制程序模块、机械臂运动控制程序模块以及采摘控制程序模块的程序设计。

1 采摘控制系统概述

1.1 硬件平台

采摘机器人硬件平台如图1所示。

图1 采摘机器人硬件平台Fig. 1 Picking robot hardware platform

上位机为搭载Windows10操作系统的笔记本电脑,主要负责运行控制系统主体程序,包括获取、处理平台数据和控制平台设备。深度相机为RealSense Camera系列的R200型号深度相机,主要负责提供场景物体实时的图像数据和包含在深度图像数据中的距离信息。由于相机的最小深度测量距离为0.5 m,因此采用“眼在手外”的方式,利用支架将相机固定在机械臂旁,同时面向正前方。机械臂为VS-6556型号的垂直多关节工业用机械臂,主要负责带动柔性手爪到达指定位置并配合其完成相应动作,其配备有RC7M型控制器。三指柔性手爪主要负责抓取,其具有能够弹性形变、表面粗糙、手指间距可调等特性,能够有效降低抓取柑橘造成的损伤,使抓取更加牢固,提高手爪的定位容错能力,其配备的控制器以Arduino UNO为控制核心,采用气压驱动方式控制手爪的抓取动作。

1.2 软件构成及工作原理

采摘控制系统的程序框架如图2所示。

图2 采摘控制系统程序框架Fig. 2 Picking control system program framework

工作流程如图3所示。

图3 采摘控制系统程序工作流程图Fig. 3 Workflow chart of picking control system program

工作原理是通过视觉识别定位模块控制深度相机采集柑橘图像数据,并结合算法对柑橘进行识别和定位,获取柑橘的空间位置信息,再通过机械臂运动控制模块、柔性手爪动作控制模块以及采摘控制模块,确定柑橘采摘点的位置信息,确定由机械臂和柔性手爪组成的机械手的采摘姿态,规划采摘路径,并控制机械手沿着指定轨迹运动,执行柑橘抓取和果梗分离动作,最终将柑橘放置到收集点。

2 采摘控制系统程序设计

在Windows10开发环境下,采用Visual Studio 2015、PyCharm和Arduino IDE编程工具,C++和Python编程语言,借助相应的软件开发工具包、函数库,设计控制系统程序。根据其工作原理、流程的需要,为控制系统设计了视觉识别定位模块、机械臂运动控制模块、柔性手爪动作控制模块,用于控制深度相机、机械臂、柔性手爪等硬件设备。同时设计了采摘控制模块,用于实现需要视觉、机械臂与柔性手爪之间相互配合的机器人自主采摘功能和一些特定的采摘辅助功能,使采摘机器人能够更好地完成柑橘采摘作业。

2.1 视觉识别定位模块程序设计

视觉识别定位模块的具体工作流程如图4所示。

图4 视觉识别定位模块的工作流程图Fig. 4 Workflow chart of visual identification and positioning module

根据工作流程的需要,在视觉识别定位模块中设计了图像数据采集、视觉识别、视觉定位功能模块,用于柑橘的识别定位,获取柑橘的位置信息。程序设计采用Intel librealsense软件开发工具包提供的编程接口rs命名空间中的类函数和OpenCV计算机视觉库的图像处理函数,对R200相机进行二次开发,同时采用Python中TensorFlow-GPU、Keras深度学习框架的函数库。

2.1.1 图像采集功能

上位机通过图像采集功能函数CamPicData()启动相机,获取实时的彩色RGB图像和深度图像数据,便于后续图像识别和定位。

其中CamPicData()会调用rs的类函数和OpenCV的图像处理函数,分别用于功能实现过程中的相机操作和图像处理。

2.1.2 视觉识别功能

上位机通过视觉识别功能函数PicDetect()对采集到的彩色图像进行柑橘识别,用于后续的柑橘定位。

其中柑橘识别所采用的是基于改进YOLOv3-tiny[19]轻量化深度卷积网络模型的识别方法,该模型在YOLOv3-tiny深度卷积网络模型的基础上,采用MobileNetv3-Small[20]网络替换主干特征提取网络,使模型更加轻量化,提高识别速度。

在MobileNetv3-Small中加入新的残差结构,使主干网络能够更好地保留之前提取出的特征信息,减少特征信息的损失,提升模型对特征的学习能力,提高模型的识别精度。

在加强特征提取网络中加入简化的空间金字塔池化SPP(Spatial Pyramid Pooling)[21]网络、深度可分离卷积层集、两个尺度层之间的下采样层以及替换hard-Swish激活函数,提升模型提取特征信息的能力,减少特征信息的损失,使模型能够充分学习特征信息,进一步提高模型的识别精度。

采用DIOU(Distance Intersection over Union)[22]损失函数改进损失函数,进一步提高模型的识别定位精度。

通过1 144张柑橘图像数据集的训练、测试,改进的YOLOv3-tiny网络模型平均识别精度mAP、F1值分别达到了96.52%、0.92,平均识别单幅图像所耗时间、模型权重大小仅为47 ms、16.9 MB。

由于功能实现过程中YOLOv3-tiny网络模型的搭建和运行需要借助Python中TensorFlow-GPU、Keras深度学习框架的函数,因此PicDetect()会调用Python设计编写的Detect()识别程序。

2.1.3 视觉定位功能

上位机通过视觉定位功能函数Positioning()对图像中识别到的柑橘进行定位,获取其相机坐标系下的空间位置坐标。

图像采集、视觉识别、视觉定位功能模块的实现过程如图5所示。

(a) 图像采集功能

(b) 视觉识别功能

(c) 视觉定位功能图5 视觉功能模块的实现过程Fig. 5 Implementation of visual function module

2.2 机械手控制模块程序设计

机械手控制模块的具体工作流程如图6所示。

(a) 机械臂控制模块

(b) 手爪控制模块图6 机械手控制模块的工作流程图Fig. 6 Workflow chart of robot arm control module

2.2.1 柔性手爪动作控制模块程序设计

根据工作流程的需要,在柔性手爪动作控制模块中设计了数据通信、动作控制功能模块,用于上位机与手爪控制器之间的数据通信,包括数据传递、接收控制指令等,以及控制手爪动作,而由于控制器采用Arduino UNO,因此需要分别设计功能模块的上位机程序部分和Arduino程序部分。程序设计采用SerialPort串口通信软件开发工具包提供的SerialPort类函数和Arduino IDE函数库的串口通信Serial类函数等。

1) 数据通信功能。上位机和Arduino通过设计的通信连接功能函数RobotGripConn()和Setup()、数据传递功能函数RobotGripSendData()和RobotGripReceiveData()建立USB串口通信连接,实现数据通信,为后续的手爪动作控制传递控制指令等。

其中上位机程序RobotGripConn()和Arduino程序Setup()分别借助SerialPort类函数和Serial类函数,调用InitPort()、StartMonitoring()和Serial.begin()指定串口参数,包括串口号、波特率、检验位、数据位、停止位,建立上位机与控制器之间的连接。

2) 动作控制功能。上位机和Arduino通过设计的释放动作功能函数RobotGripRelease()、抓取动作功能函数RobotGripGrab()以及动作执行功能函数RobotGripAction()控制手爪执行各类动作。

2.2.2 机械臂运动控制模块程序设计

根据工作流程的需要,在机械臂运动控制模块中设计了数据通信、运动控制功能模块,用于上位机与机械臂控制器之间的数据通信,包括接收柑橘的位置信息、接收控制指令、传递位姿信息等,以及控制机械臂运动。程序设计采用ORIN2机械臂控制软件开发工具包,借助其提供的编程接口Cao类函数,和通信驱动组件CaoProv.DENSO.NetwoRC结合,实现对机械臂的二次开发。

1) 数据通信功能。上位机通过设计的通信连接功能函数RobotArmConn()、获取位姿变量功能函数GetRobotArmPosVar()以及发送位姿变量功能函数SaveRobotArmPosVar(),建立上位机与控制器之间的以太网通信连接,实现数据通信,为后续的机械臂运动控制传递目标位姿变量、控制指令等,目标位姿变量包括末端位姿变量和关节位姿变量,末端位姿变量由机械臂基准坐标系末端法兰中心位置(x,y,z)、末端工具坐标系各轴旋转角度(Rx,Ry,Rz)以及关节形态Fig组成,关节位姿变量由机械臂各关节旋转角度组成。其中RobotArmConn()调用Cao类函数m_pICtrls->Add()指定控制器型号、机械臂通信驱动组件名以及控制器IP地址,建立上位机与控制器之间的连接。

2) 运动控制功能。上位机通过设计的轨迹运动功能函数RobotArmMove()、关节旋转运动功能函数RobotArmRotate()、机械臂复位功能函数RobotArmGoHome()以及中止运动功能函数RobotArmStop()等控制机械臂执行各类运动。

这些运动控制功能函数的实现过程类似,分别调用不同的Cao类函数,向控制器发送相应的运动控制指令,控制器接收到控制指令后,通过RobSlave程序将其转换成PAC(DENSO机械臂专用的编程语言)控制指令,并执行该指令以实现对机械臂的运动控制。

2.3 采摘控制模块程序设计

根据采摘控制系统工作流程的需要,基于视觉识别定位模块、机械臂运动控制模块以及柔性手爪动作模块的部分功能模块,在采摘控制模块中设计机器人自主采摘功能模块和其他为了实现自主采摘功能而设计的辅助功能,包括机械手坐标转换、采摘点筛选、采摘姿态确认、采摘轨迹规划、机械手采摘控制、分离果实果梗动作控制功能模块,以及与之对应的功能函数RobotPick()、RobotArmCoordinateTrans()、FilterPoint()、RobotArmPickPos()、PickTrajectPlan()、RobotArmPick()、RobotArmPickAction(),用于实现采摘过程中的各个环节和硬件设备之间的协调控制。

分离果实果梗动作控制、机械手采摘控制以及机器人自主采摘功能模块的实现过程如图7所示。

(a) 分离果实果梗动作控制功能

(b) 机械手采摘控制功能

3 采摘控制系统测试试验

3.1 试验条件

为了验证采摘机器人平台控制系统程序的可行性,在实验室环境下准备了试验材料,包括:仿真树、若干个柑橘、采摘机器人平台、控制系统程序测试界面、测量工具等,设置了平台硬件参数,包括:柔性手爪气压值100 kPa、机械臂速度32%等。测试界面如图8所示。

图8 控制系统程序测试界面Fig. 8 Control system program test interface

3.2 试验过程

3.2.1 视觉定位功能程序测试

将柑橘随机摆放在5个位置,用测量工具测量其实际位置信息,再通过视觉识别定位模块的视觉识别功能程序和视觉定位功能程序对其进行识别定位,获取其位置信息,将实际测量的位置信息与视觉定位的位置信息进行对比,结果如表1所示。

表1 视觉定位测试结果Tab. 1 Visual location test results

由表1可知:将5组数据的定位误差求和取平均值,最终采摘控制系统视觉识别定位模块的平均定位误差为1.22 cm。

3.2.2 柑橘自主采摘功能程序测试

分批次布置总共30个柑橘在仿真树上,同时柑橘和仿真树的位置也随批次进行随机放置,避免出现柑橘位置固定的情况,机器人通过自主采摘功能程序控制模块来进行柑橘采摘,过程如图9所示。

图9(b)为采摘过程中采摘机器人进行柑橘定位,定位结果为相机坐标系下x:6.36 mm、y:237.63 mm、z:848.00 mm,机械手坐标系下x:588.27 mm、y:-236.83 mm、z:627.52 mm,图9(d)、图9(e)为采摘机器人从正前方进行柑橘抓取,图9(f)为采摘机器人执行分离动作,成功分离柑橘果实与果梗,图9(g)、9(h)为采摘机器人将采摘后的柑橘放置到收集点,完成柑橘采摘,最终测试结果如表2所示。

(a) 柑橘识别

(b) 柑橘定位

(c) 机械手初始位姿

(d) 采摘准备点

(e) 采摘点

(g) 柑橘放置点

(h) 放置完成点图9 采摘过程Fig. 9 Picking process

由表2可知,实验室环境下,采摘机器人的柑橘识别成功率为100.0%,平均识别时间为47 ms,柑橘采摘成功率达到了80.0%,平均采摘时间为15.2 s。

3.3 试验结果分析

如表1所示,柑橘的平均定位误差仅为1.22 cm,采摘控制系统视觉识别定位模块的定位精度高,而之所以还存在定位误差是由于识别、定位算法所确定的柑橘中心坐标与实际柑橘中心坐标之间存在位置误差,同时由于采摘机器人所采用的深度相机在进行深度测量时也存在着一定的系统误差,因此在柑橘坐标转换计算的过程中产生了定位误差。

如表2所示,采摘控制系统视觉识别定位模块的平均识别时间仅为47 ms,实时性好,能够满足柑橘采摘在线识别的要求;试验表明即使受到柑橘周围环境条件的影响如遮挡、光照等,识别算法对30个柑橘的识别成功率依然达到了100.0%,之所以识别成功率高,其主要原因是识别算法采用了深度卷积网络模型,既能够提取和学习浅层次特征信息,也能够提取和学习深层次特征信息,对复杂环境的适应性好。

如表2所示,采摘机器人的柑橘采摘成功率达到了80.0%,平均采摘时间为15.2 s。之所以柑橘采摘成功率高,一定程度上是由于采摘控制系统视觉识别定位模块的平均精度误差小,结合柔性手爪本身能够容许柑橘一定位置误差的特性,使柔性手爪在不受枝叶遮挡的情况下能够准确地抓取到柑橘果实;另一方面是由于采摘控制系统的采摘控制模块在控制机械手进行柑橘采摘的过程中,采摘姿态确认功能和采摘轨迹规划功能的控制算法通过预设的多个采摘轨迹点,将采摘轨迹分成多段,尽可能保持机械手与柑橘树的合理距离,同时根据柑橘周围枝叶的遮挡情况,对柑橘采取不同的采摘姿态,有效减少机械手与柑橘枝叶触碰;再是由于采摘控制模块果实果梗分离动作控制功能的控制算法发挥了作用。

试验中6个柑橘采摘失败的情况,主要是由于采摘控制系统受到了周围复杂环境的影响。其一,采摘过程中视觉识别定位模块由于采摘机器人自身的深度相机和所采用的定位算法,受到了橘枝叶遮挡和光照条件等因素的影响,出现了未能准确测量出柑橘位置信息的情况,导致柑橘未能成功采摘;其二,机械手在接近被定位柑橘的过程中,由于环境复杂,即使采用了采摘姿态确认功能和采摘轨迹规划功能的控制算法,依然发生了与柑橘周围枝叶触碰的情况,致使柑橘脱离了原来的位置,从而导致手爪未能成功抓取到柑橘,柑橘最终未能成功采摘。

4 结论

本文面向机器人柑橘采摘,构建了以上位机、RealSense Camera R200深度相机、VS-6556垂直多关节工业用机械臂、三指柔性手爪等组成的采摘机器人硬件平台,研究了采摘机器人的控制系统程序设计,包括视觉识别定位程序模块、机械臂运动控制程序模块、手爪动作控制程序模块以及采摘控制程序模块的程序设计。

1) 基于librealsense相机软件开发工具包、OpenCV计算机视觉库、TensorFlow-GPU和Keras深度学习框架,采用Visual Studio 2015、PyCharm编程工具,C++和Python编程语言,设计了视觉识别定位模块中的图像采集功能模块、基于改进YOLOv3-tiny轻量化识别方法的视觉识别功能模块以及基于识别结果的视觉定位功能模块。

2) 基于ORIN2机械臂控制软件开发工具包、Arduino IDE自带函数库以及SerialPort串口通信软件开发工具包,采用Visual Studio 2015、Arduino IDE编程工具,C++编程语言,设计了柔性手爪动作控制模块、机械臂运动控制模块中上位机与机械臂、柔性手爪的数据通信功能模块、柔性手爪的动作控制功能模块以及基于位姿变量的机械臂运动控制功能模块等。

3) 结合视觉识别定位模块、柔性手爪动作控制模块和机械臂运动控制模块,设计了采摘控制模块,包括分离果实果梗动作控制功能、机械手采摘控制功能以及机器人自主采摘功能等在内的功能模块。

4) 采摘控制系统程序测试的结果表明:视觉识别定位模块的平均定位精度误差为1.22 cm,柑橘的识别成功率达到100%,平均识别时间约为47 ms,机器人柑橘采摘成功率达到80%,平均采摘时间为15.2 s。验证了采摘机器人平台控制系统程序的可行性,为水果采摘机器人的控制系统程序设计提供参考。

猜你喜欢

手爪柑橘柔性
一种柔性抛光打磨头设计
灌注式半柔性路面研究进展(1)——半柔性混合料组成设计
吃柑橘何来黄疸——认识橘黄病
高校学生管理工作中柔性管理模式应用探索
针对旋转手爪的结构设计与分析
中科大机器人柔性手爪在机器人世界盃上获奖
柑橘大实蝇综合治理
“五及时”柑橘冻害恢复技术
柑橘实蝇防治一法
自适应4点同心手爪机构研究设计