基于YOLO_v3 的工件抓取机械臂研究
2023-12-11刘正超
朱 花, 陈 璐, 阳 明, 刘正超
(江西理工大学机电工程学院,江西赣州 341000)
0 引 言
机器人领域随着科学技术的不断发展,其中的识别和抓取技术逐渐成为了现代工业生产的一项重要技术。在新科技、产业革命的背景下,高校学生对于“新工科”的硬件基础即实践教学仪器与课程、应用环境协调性不足[1-2]。
自Shirai和Inoue首先提出将机械手臂控制技术与视觉技术相融合后,王朋强等[3]就已经根据人类双目视觉的基本原理,完成了对机器人手臂的定位与抓取工作。张弛等[4]则设计了一个基于单目视觉的智能抓取机器人。对于机械臂的控制,上述大多采用嵌入式、DSP 等方式,对于教学实验和较小、较轻的工件类抓取,成本较高。近年来,目标检测算法更新换代,大致分为两大类:一阶段算法(One-Stage)和两阶段算法(Two-Stage)。其中One-Stage 包含了YOLO(You only look once)系列和SSD系列。整体而言,双阶段算法在精度上要高一些,在速度上,双阶段算法比单阶段要差一些。对于SSD 算法,它的基础网络模型为VGG16,其结构为标准卷积层、池化层和全连接层3 部分的轮替。基于VGG16 的SSD算法在识别图片时,遍历整张图片使得其权重数目扩大,虽然拟合的能力加强了,但是训练的时间也大幅度增加[5-7]。
本文提出基于Arduino 单片机的分拣机械臂,在实际应用中更加轻巧便利。针对YOLO算法检测速度慢且目标工件种类少等特征,将算法的网络结构由Darknet 53 轻量化改为Moblie Net-v3 的结构,删去其中部分标准化卷积,变更为深度可分离卷积,使得模型的计算量和尺寸都大大降低。在此基础上,自制了工件类数据集训练,并且进行各维度的数据增强,对于识别准确度也有较为理想的结果。
1 总体设计方案
抓取技术是智能机器人常用的技术手段。本文的研究对象为开源的三自由度机械臂如图1 所示,可模拟工业生产人员在工作中实现对各类标准工件的分类和抓取。机械臂实物如图2 所示。
图1 三自由度机械臂模型
图2 三自由度机械臂实拍
该系统由Arduino Mega2560 控制板、电动机驱动模块、42 步进电动机、摄像头以及机械臂组成。计算机控制机械臂前端的摄像头采集放置区的工件图像,利用OpenCV函数库捕获图像当前帧,通过运行目标检测算法得到目标工件的分类和位置,计算成功后将信息传输给Arduino 主控开发板,由主控板按照程序驱动42 步进电动机转动进而控制机械臂抓取指定工件并配送到相应的位置。总体系统框图如图3 所示。
图3 总体系统框图
1.1 系统硬件方案
(1)控制系统。系统采用Arduino Mega2560 单片机为主控板。该主控芯片具有54 路数字输出、输入口,足够用来驱动系统的4 个电动机[8-11]。
(2)电源模块。电源采用不同的供给方式,单片机的工作电压为5 V,但是在实际应用中,当外接电源为输入5 V时,工作极不稳定,Arduino Mega2560 采用的是220 V交流电通过AC/DC ADAPTER转变得来的12 V 4 A供电,电动机驱动模块的电压为12 V,由12 V的18650 电池供电。
(3)驱动模块。3 个42 步进电动机和相应的DRV8825驱动器控制机械臂的各个角度,其中1 个控制横向旋转,2 个控制纵向摆动。28BYJ48 电动机和ULN2003 驱动板控制机械臂夹手的抓取动作。在实际操作中,选择将RAMPS 1.4 插在mega 板上,作为mega2560 的拓展版使用。RAMPS1.4 有x、y、z三轴电动机接口和挤出机1、2 电动机接口。将DRV8825 的x轴电动机接口的STEP 引脚与Arduino 的PF0 引脚相连接,DIR 引脚与Arduino 的PF1 引脚相连接,ENABLE引脚与Arduino 的PD7 引脚相连接,其余主控板与驱动器、电动机间的连线如图4 所示。
图4 部分硬件连接图
1.2 系统总体流程
整个系统由Arduino Mega 2560 主控板控制,当视觉相机在物料间采集到图片时,传输给计算机进行目标检测,经过图像预处理,包括模糊增强、去除噪声等操作进行逐步数据增强,最终返回目标工件的分类信息和位置信息,得到机械臂各关节需要转动的角度,将角度值转换成步进电动机的电流信号,驱动电动机转动,继而驱动机械臂完成抓取操作,至此完成一类工件的分拣,继续下一轮的识别定位。工作流程如图5所示。
图5 系统工作流程
图6 先验框与预测框图
2 机械臂抓取控制
2.1 目标检测
相机采集到的图片利用YOLO_v3 算法进行目标检测。YOLO算法通过单独的CNN模型来实现,将输入图片调整为608 ×608 的大小,进入Mobile Net-v3 网络后得到3 个分支,再经过卷积、上采样、合并等多次反复操作后最终得到3 个不同尺寸的预测结果。不同尺寸的结果用于对大、中、小对象的预测。每一个尺寸的预测框有25 个参数,分别是由4 个位置坐标信息、1个类别置信度、20 个类别预测值组成。这些参数最终就可预测到原图中是否有目标工件并且可以预测出工件的位置信息。
网格中蓝色小框为图像预测框,黑色虚线框为先验框,bx、by、bw、bh分别为蓝色框的中心和宽高,pw、ph分别为黑色框的宽高,cx、cy为当前网格左上角到图像左上角的距离。令一个网格的宽和长为1,即大小归一化。
σ为Sigmoid函数,可得:
2.2 运动控制原理
输入目标位置的坐标,经由运动学逆解转换为角度值,将角度值转换成步进电动机的电流信号,以驱使电动机转动,让机械臂末端执行器完成从起始点到目标点的移动。
机械臂运动学逆解包含多种解法。在这些方法中,几何分析法和D-H法应用较为广泛。D-H 法将坐标系建立在机械臂的每个连杆上,并在两个连杆上通过齐次坐标变换实现坐标变换,在多连杆系统中建立起首、末坐标系的变换关系[12]。几何分析则需要将空间几何参数与平面几何参数一一对应,用几何解法解出运动学,较D-H法更为直观。本机械臂利用几何分析法求得的运动学逆解进行抓取实验的研究。
目标检测后输出的数据可得到tx,ty,tz,经过与比例值k之间的换算可以得到xd,yd,zd即3 个轴上目标物体距离镜头A的偏移量,如图7 所示。
图7 机械臂不同视角简图
通过
得3 边之长,依据余弦定理得到
根据反三角函数得到,
式中:h2和h3分别为实际大臂、小臂的臂长;h′2和h′3分别为俯视视角下大臂、小臂的臂长;rd为目标物与镜头间的直线距离。
通过以上各式得到大臂与竖直方向的夹角θ1=90° -α-β,小臂与大小臂关节处垂直线的夹角θ2=θ1+α +γ以及底盘转过的θ3夹角,即可换算成步进电动机的所要旋转的角度值。
3 目标检测算法
3.1 YOLO算法训练
YOLO全称为You Only Look Once,是计算机视觉领域中著名的模型之一,其通过一系列的卷积操作来实现端到端的目标检测。
YOLOv1 的性能是基于损失函数而展现的,损失函数没有考虑窗口的大小,在v1 的训练中检测的准确度是不够的。YOLOv2 利用召回率衡量检测到真值对象的概率,对于速度、准确性均高于v1 版本。Redmon和Farhadi利用Darknet—53 作为主干网络,增加了逻辑回归用于预测每个边界框的得分,在同等精度的标准上提升了检测速度[13-15]。
(1)数据集的准备。选取500 张不同标准工件图像数据作为模型测试,进行随机裁剪、水平翻转、颜色晃动、图像模糊、灰度化和随机噪声等数据增强,扩充到1 000 张数据集合库,共计不同工件总数约5 000个,部分样本数据集如图8 所示。对于库中的图像利用Labelme图像标注工具进行标注,标注名称见表1,标注结果如图9 所示,标注完成后将标注的信息写入xml文件,再将其转成符合YOLO 算法的VOC2012 格式数据。
表1 Labelme标注信息
图8 部分数据集样本
图9 labelme标注图
实验选择的待检测目标包括自攻和机械螺钉、垫片、普通螺母和六角扳手等。经过对数据集图片标注,得出每张图片中待检测目标的位置及类别信息即先验信息,均为编码75 维的向量形式。将网络预测结果与真实先验信息比较,得到两者间的差距,不断反向传播求梯度以降低差距。先判断真实框在图片中的具体位置,进而判断出用哪个网格点进行检测,当真实框和先验框重合度达到一定范围时,被认为是正样本。两者间的差距由预测边界框中心坐标损失、宽高损失、置信度和类别损失组成。其中对于置信度的损失在正样本中与1 对比,在负样本中与0 对比。
3 个不同维度的loss函数
式中:lbox为中心坐标和宽高损失;lcls 为类别损失;lobj为置信度损失;s为网格的尺寸;BCE 为二值交叉熵损失函数;ci为预测框内含有目标物体的概率得分;pi为预测框属于某类别的概率得分;均为真实值。若(i,j)处的网格有目标,的值为1的值为0;若(i,j)处的网格无待测目标的值为0j的值为1。
当loss的值足够小的时候,就可认为该模型训练效果较好,具有一定的可行性,可用于后阶段对于某类物品的目标检测[16-18]。
(2)实验环境。YOLO_v3 算法的网络框架为Mobile Net-v3。该算法的硬件实验条件为:显卡MX450,CPU 为Inter Corn i5-1135G7,操作系统为Windows 11,软件插件包含Cuda、Pycharm、Visual studio2015 等,Pycharm 库包含tensorflow-gpu2.1.0、keras2.2.4、Pillow5.1.0、matplotlib2.2.2、ffmpeg1.4、opencv-contrib-python。
(3)模型训练。按照9∶1的比例分配训练集和测试集,即训练集为4 500 张图片,测试集为500 张图片。其中验证集占训练集的10%,为450 张图片。所有的输入图片像素均为608 ×608。在配置训练参数中,通道数(channel)设置为3,锚框(anchor)设置为[45,52]、[61,49]、[102,37]、[47,101]、[99,66]、[67,99]、[132,131]、[343,80]和[81,341],共9 种,学习率设置为0.000 1 ~0.005 间,epoch 设置为100。所有参数均在cfg文件中修改并保存。
图10 为学习率(learning rate)=0.000 25,衰减(gamma)=0.004 时的损失曲线图,由图可得总损失逐渐收敛至1.94 以下,类别损失则收敛效果不好,在10 ~0.194 内持续震荡。图11 为learning rate =0.001,gamma =0.004 时的损失曲线,在epoch 为0 ~79 范围内,学习率由0 逐渐上升至0.001,在epoch 为79 ~100 范围内,学习率逐渐下降至0。在epoch为79时,训练得到最优模型,由图11 可见,总损失收敛至0.694 1 以下,类别损失收敛大约至0.001 749。两次图像相比较,可以看出后者损失函数逐渐收敛并且趋于一个比较小的数值。
图10 lr为0.000 25时的损失图
图11 lr为0.001时的损失图
3.2 训练实验结果
(1)目标识别结果。实验过程中,采用基于Mobile Net-v3 的YOLO 算法完成对待检测目标的识别,检测效果如图12 所示,在学习率为0.000 25 时,模型预测精度mAP只达到71.10%,未检测到的工件包含大、小尺寸工件,且大尺寸工件占据一定比例,检测效率不佳,而当学习率调为0.001 时,模型预测精度mAP提升了15.66%,达到86.76%,大尺寸工件均可被检测到,只有部分小尺寸工件由于边缘模糊等原因容易漏检误检。
图12 不同学习率的实验效果
(2)抓取实验结果。实验性能指标分为预测准确度和抓取准确度两类。准确度指标通常用准确率来评价。
该工业标准件抓取实验的实验场景为散乱、不堆叠,分布在工作平台。每次将8 个以上不同类别的工业标准件无规则置放在平面工作区,视觉相机拍下工作区的图像传输至计算机,经目标检测算法,得出标准件的类别和位置信息,经逆运动学几何运算计算出机械臂各关节变化的取值,由单片机控制各电动机转动到指定的角度,使机械臂识别到的工件抓取到相对应的物料框,再返回工作区抓取下一个工件。重复上述步骤,将机械臂抓取结果做多次实验并记录(见表2)。自攻螺钉、机械螺钉类较大尺寸工件的类别预测效果较好,达到92%和94%的预测准确率,而垫片这类轻薄的工件在抓取过程中受到其摆放姿态的影响,只达到64%的抓取准确率。分析各类工件的预测和抓取结果,发现小尺寸工件类别预测准确率较低,考虑是由于图片拍摄角度、训练样本容量不够充足的原因导致。
表2 机械臂抓取实验结果
4 结 语
研究结果表明,利用轻量化YOLO_v3 算法能保证机械臂对标准工件的可靠抓取。在不同学习率下,能训练出不同精度的模型,当学习率为0.001,衰减为0.004,且训练epoch 达到79 时,损失函数值趋于平稳,其类别预测准确率达到86.76%,能够准确抓取大尺寸工件,具有一定的应用价值。市面上的工业机械臂多采用PLC、嵌入式等控制系统,这类仪器都存在体积大,不易操作等缺点,本机械臂的主控芯片为单片机,具备易于操作,成本不高等优点,可提供教学仪器的一种新尝试,能更好地为实验学习研究而用。
后续研究可对工件抓取姿态算法进行进一步的完善,逐步提高对于机械臂准确抓取并识别工件的性能,以满足实际应用要求。