基于机器视觉引导使机械臂完成自主抓取的系统方案

2022-12-14  

摘要:为了减少机械臂在产品分类、抓取过程中的执行时间,降低定位误差,以提高生产效率。针对传统机器人仅能执行预定义轨迹任务的局限性,本文提出一种结合视觉识别系统的机械臂抓取方案。该方案中的视觉识别系统可同时检测待抓取目标的颜色和形状属性,并采用模板匹配法对目标物体进行轮廓匹配;而执行抓取任务的执行装置采用六轴机械臂xArm;最后,使用眼在手上(Eye-in-Hand)视觉-机械臂方案实现对多个物体的识别与抓取,并根据设定规则进行码垛,测试结果验证了所提方案的有效性和鲁棒性。


01

引言
近年来,随着人类对工业现代化生产、深海探险、太空探索、环境监测、远程医疗、智能家居等领域的深入研究,以及应用需求的多样化。


高速、灵活的多自由度机械臂如同人类手臂,在生产、生活中逐渐扮演重要角色,机械臂控制技术向智能化发展也已经成为必然趋势。


此外,视觉是人类观察与感知周围环境的重要手段。据统计,在人类接受的信息中,通过肉眼观测获取信息的占比高达75%,这充分表明人体视觉功能的重要性。 将机器视觉技术与机械臂控制相结合,可解决机械臂需要自动判别和在一定自主性的工作任务时显得捉襟见肘的问题,以及机械臂在复杂工作环境和工作任务中灵活性不足的问题,从本质上提高机械臂的自主能力和智能程度,增强了机械臂的适应性和实用性。 为此,本文提出了一种基于机器视觉的机械臂智能抓取系统:采用视觉传感器代替人眼来做测量与判别的技术,利用计算机模拟人的识别标准,去分析理解图像,并寻找目标物体和目标地点,在明确工作目标后向机械臂发出相应分析结果,并控制机械臂完成自主抓取任务。


02

智能抓取系统构成

2.1   硬件系统

如图2.1所示,智能抓取系统硬件设备主要是由计算机、机械臂系统,以及固定于机械臂末端的视觉系统(眼在手上[Eye-in-Hand])和末端执行器四部分组成。 相对于眼在手外(Eye-to-Hand)的安装方式,采用眼在手上(Eye-in-Hand)安装方式,智能抓取系统的视场可以随着机械臂的运动而发生变化,可增加视觉识别的范围。 智能抓取系统在执行抓取任务过程中,视觉系统识别到抓取目标的位姿后,将数据传递给计算机进行处理(坐标变换等),最后由机械臂系统实现对目标物体的抓取、摆放。                             

f4474c02-7a84-11ed-8abf-dac502259ad0.png

图 2.1 智能抓取系统组成

机械臂系统由控制器、六轴机械臂和末端执行器(吸盘)组成。机械臂所能完成的任务随自身结构差异而有较大区别,故本次实验采用xArm 6轴机械臂(工作空间足够大),可满足本次抓取任务要求。此外,机械臂可识别控制器指令,实现机械臂的运动规划以及末端执行器(吸盘)的开关。 视觉系统采用Intel RealSense D415视觉传感器,以实现图像采集和识别定位功能。Realsense D415是Intel在2018年推出的一款深度相机,其拥有大约70度的视场和200万像素成像器,相比于其他拥有同样特质的摄像头,D415具有重量轻、精度高、易校准、成本低的优点。


2.2   软件框架

智能抓取系统软件框架主要基于机器人操作系统ROS。

ROS是一个适用于机器人开发的开源元操作系统,主要在Linux环境下工作。它集成了大量的工具、库、协议,提供了操作系统应有的服务,包括硬件抽象,底层设备控制,进程间消息传递,以及包管理,极大降低了机器人的开发门槛。本文使用ROS作为操作智能抓取系统的基础软件平台,并将操作过程中所有的步骤串起来,如图2.2所示。

f4645a68-7a84-11ed-8abf-dac502259ad0.png

图 2.2 智能抓取系统软件框架

视觉系统部分:目标识别与定位功能采用计算机视觉库OpenCV开发(OpenCV是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux等多操作系统上,具有轻量、高效等优点。)本项目在Linux系统下基于ROS平台采用OpenCV进行目标物体识别、定位(下一章节展开介绍)。


机械臂控制系统:机械臂运动规划过程中,所有节点之间的通信通过专用的ROS话题完成。要控制机械臂对目标的抓取,需要运行逆运动学算法节点,读取到末端执行器应到达的位姿,并计算所需关节角度位置,上述控制信息在单独的话题中发布,由控制器读取后实现机械臂的运动。(有关机械臂正、逆运动学的相关理论知识具体详情可见Zippen-Huang/RobotTechCooker github仓库RobotTechBook分支的《机器人学导论》第三章、第四章,后续也会安排机械臂的运动学模型分析)。


综上,视觉系统在识别、定位到目标物体后通过发布话题服务实现机械臂的抓取、摆放等运动规划任务。


03

图像识别与定位分析

对于基于机器视觉的机械臂抓取系统而言,其首要任务是能够准确的识别与定位目标物块,这是影响最终抓取成功率的重要因素。 为了精确获取目标在三维空间中的坐标,目标物体识别与定位的主要过程如图 3.1所示,接下来做详细分析。

f4aebe00-7a84-11ed-8abf-dac502259ad0.png

图 3.1 识别定位流程

3.1   图像预处理

因为环境背景复杂性,采集到的图像中会存在较多的无关干扰信息,这会对图像的处理和识别造成一定程度的影响,图像预处理可以有效地滤除图像中的干扰信息,突显出识别所需的图像特征信息。


故,设计图像预处理算法对Intel RealSense D415采集到的图像进行预处理,能够有效地突出环境背景下目标物体待检测特征参数、降低目标识别算法复杂度,以提高识别检测效率。


3.1.1 图像灰度化

图像灰度化简单描述就是将彩色的图像转化为灰度图像,减少通道带来的非必要特征,数据降维,处理更高效,因此图像灰度化有益于提取目标物体特征和分割目标图像,而被广泛用于机器视觉领域。


3.1.2 图像滤波

滤波的主要目的是尽可能保证图像原始细节的前提下抑制图中的干扰噪声,其效果将对接下来的图像处理产生直接的影响,因此选择一个合适的滤波方法至关重要。

常用的图像滤波方法有:中值滤波、高斯滤波、KNN滤波、最大均匀性平滑滤波等。在目标检测应用中对图像进行降噪处理的方法被广泛使用的有中值滤波、均值滤波以及高斯滤波三种方法: 其中,中值滤波是一种非线性的滤波方法,该方法的中心思想就是通过某像素点特定领域内的中值去代替该像素的原始点,从而使图像的处理效果更加平滑。 均值滤波是经典线性滤波方法的代表,该方法的中心思想就是将图像中某一个点的像素值用这个点的灰度值和与其相邻像素点灰度值的平均值来代替。均值滤波往往带来图像质量变差的问题,图像选取的邻域越大,噪声消除的效果也就越差。高斯滤波通俗点说就是像素点的值通过其自身及周围的点加权平均所得到新的像素点。该方法在消除高斯噪声方面有很好的表现。 通过比较发现均值滤波后的图像尽管能很好的保留物体信息特征,但是边缘信息被弱化,不利于后续的目标物体轮廓检测;而高斯滤波方法虽然能够抑制高斯噪声,但是过于平滑,导致滤波后的图像信息缺失严重,图片较为模糊;在实验环境椒盐噪声浓度较大的条件下,使用中值滤波后的图像效果最好,有效地抑制了图像的噪声干扰,同时避免了图像边缘信息的缺失。


3.1.3 阈值分割

图像分割是依据某种准则将图像分割成不同区域再选取目标区域的过程。常用的图像分割方法有三种:基于区域的分割、基于阈值的分割和基于特定理论的分割。

基于实验室环境环境噪音、灯光亮度等影响因素下,经过灰度化和图像滤波等处理之后,目标物体与背景图像灰度值有较大差异,因此可以选用阈值法进行分割图像,能更简单有效地分割出物体。图像预处理中常见的阈值分割算法有以下几种: OTSU分割法:OTSU分割法又称为最大类间方差法,实现思想是利用目标图像与背景的二值化特性差异将两者区别开。OSTU法通过自适应方法计算目标与背景间的最大类间方差,从而确定最佳阈值。 最小误差法:最小误差法属于一种基于贝叶斯最小误差分类算法的自适应阈值分割法。其核心思想是根据背景和目标对象的像素占图像总像素比例,计算其混合概率密度并确定分割阈值,然后再计算出目标对象与背景之间像素点的错误分类概率,当概率结果最小时,即可得到此时的阈值就是最佳阈值。 迭代阈值法:迭代阈值法是根据原始图像的灰度直方图寻找一个近似最佳阈值T,将图像分成两个部分,分别求取两个部分的平均灰度值Ta和Tb,把两个值的平均值作为新的阈值T1,继续重复以上步骤,直到Ta和Tb稳定位置,此时的T1即为最佳分割阈值。


本项目分别采用了迭代阈值法、最小误差法和OTSU分割法,发现使用OTSU分割法的效果更好,与背景成功分离并且轮廓干净清晰没有噪点,实验结果如 图 3.2所示。

f4d44026-7a84-11ed-8abf-dac502259ad0.jpg

图 3.2 样本分析结果图

3.2   特征提取

通过图像预处理只能获取所有目标物体的二值化图像,要实现目标物体的识别和定位,还需要进一步获取每一个目标物体的颜色特征以及几何中心像素坐标。因此还需要进行HSV阈值分割、轮廓提取、模板匹配等算法来完成特征提取操作。


3.2.1 HSV颜色分割

在本次项目中,通过颜色特征就可以对目标物体进行初步识别分类。相较于常见的RGB颜色空间反映出物体具体颜色信息的不直观性,HSV (Hue:色调, SaturaTIon:饱和度, Value:亮度)颜色空间是一种面向视觉感知的视觉颜色模型,具有更好的辨识度,故本次实验采用HSV颜色分割算法对目标物体的颜色进行分割。


3.2.2 轮廓提取

为了获取每一个目标物体的几何中心像素坐标,加之在本次任务中,由于二值化后目标物体的形状特征都是规则的几何形状,故利用OpenCV视觉开发库自带的轮廓检测函数(cv2.findContours()函数)即可实现对图像预处理后的目标图像进行轮廓和像素坐标提取。为了看到更直观的效果,将其显示在原始图像上,如图 3.3所示,图像显示的是在HSV颜色分割操作得到红色目标物体后对图像内的所有红色目标物体进行了轮廓提取。                                   

f4e22786-7a84-11ed-8abf-dac502259ad0.png

图3.3 轮廓提取

3.2.3模板匹配

通过上述操作后,视觉系统虽然得到了每一个目标物体的中心像素坐标,但抓取系统依旧无法区别开每一个目标物体之间的特征。因此,利用OpenCV视觉库的轮廓识别函数找到轮廓后,还需要采用模板匹配算法对预处理后的目标进一步进行匹配。


模板匹配算法的基本原理是提供一个基本模板进行比较,在源图像中找到相似的模板。匹配的过程是将数据集中源图像通过索引与库中模板(预先对不同形状的目标物体进行拍照,经过二值化处理后作为模板库。)依次进行比较,在匹配过程中将模板与图像比较计算结果存储在矩阵中,通过评分模型给出模板在数据集中估计的最佳位置。


本项目要抓取目标的形状特征明显,采用模板匹配法具有较好的识别效果。基于轮廓特征的模板匹配效果如图3.4所示。

f50ccf40-7a84-11ed-8abf-dac502259ad0.jpg

图 3.4 模板匹配效果


3.3  

目标定位

基于前面步骤的处理结果,要得到目标在世界坐标下的位姿,需要进行坐标转换。该过程中会涉及到以下四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。世界坐标系和相机坐标的转换属于刚体变换(旋转、平移);相机坐标系和图像坐标系利用相似三角原理实现坐标变换;图像坐标系和像素坐标系利用一组线性变换公式即可得到,故通过上述一系列操作就可以得到像素坐标系到世界坐标系的转换。 然而,一个物体与相机的相对位置关系和这个物体与机械臂之间的关系是不一样的,所以在相机确定了物体的位置之后,还要把此时的位置转换成相对于机械臂的位置。这个位置就是由手眼标定得出。故手眼标定的实质就是建立相机坐标系与机械臂坐标系的映射关系。 同时,为确定三维空间中物体表面某点的几何位置与其在二维平面图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数(内参、畸变参数)。在大多数条件下,这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。 上述通过相机标定得到了三维空间中物体表面某点的几何位置与其在二维平面图像中对应点之间的相互关系,同时前文借助OpenCV视觉库的cv2.findContours()函数不但能找到目标物体的轮廓,还能得到二维图像上目标轮廓的中心像素坐标,再结合手眼标定得到相机坐标系与机械臂坐标系的映射关系,此时我们就可以通过矩阵变换实现依次将目标物体从像素坐标系到图像坐标,再到相机坐标,最后到世界坐标(机械臂坐标)的转换,从而得到目标物体在机械臂坐标系下的空间位置。实现目标定位后,利用运动控制节点即可实现机械臂对目标物体的抓取(一气呵成~)。


04

识别抓取实验

4.1   环境搭建

本项目采用ROS2GO作为开发平台,内置Ubuntu 18.04,ROS Melodic环境,即插即用。

f54bf792-7a84-11ed-8abf-dac502259ad0.png

图 4.1 128G内存ROS2GO开箱图片

(1)创建工作空间并配置机械臂环境(xArm六轴机械臂)

f5712a9e-7a84-11ed-8abf-dac502259ad0.jpg

图 4.2 创建工作空间 

f58f8516-7a84-11ed-8abf-dac502259ad0.jpg

f5ae3164-7a84-11ed-8abf-dac502259ad0.jpg

图 4.3 配置机械臂的工作环境

(2)配置摄像头环境(D415)

f5cf0dee-7a84-11ed-8abf-dac502259ad0.jpg

图 4.4 配置深度相机的工作环境

4.2   抓取测试

1)启动机械臂xArm6 service server节点,输入:

$    roslaunch xarm_bringup xarm6_server.launch robot_ip:= IP地址

将机器臂与我们的电脑进行连接。 2)机械臂使能,输入:

$    rosservice call / xarm / moTIon_ctrl 8 1

当每个关节使能时,就会听到伺服电机启动的声音。

3)依次设置正确的机械臂模式(0:POSE)和状态(0:READY),输入:

$ rosservice call / xarm / set_state 0
$ rosservice call / xarm / set_mode 0

4)将机械臂运动到指定位置做好抓取准备。输入:

$ rosservice call / xarm / move_line [x,x,x,3.14,0,0] x x 0 0

5)启动深度相机。输入:

$   roslaunch realsense2_camera rs_camera.launch

打开深度相机。 6)用Python调用抓取代码,实现机械臂的自动识别和目标抓取。
系统抓取测试启动脚本如图 4.5所示。

f5dd3874-7a84-11ed-8abf-dac502259ad0.jpg

图4.5启动抓取脚本

利用上述方法搭建实验平台并进行验证:对桌面上三种形状(长方体、圆柱体、正方体),三种颜色(红、绿、蓝)共9个物体进行抓取,并按照相同形状进行码垛。

图 4.6是机械臂完成第一次抓取任务的过程。图 4.6(a)为机械臂抓取初始状态示意图,此时机械臂只是使能但未运动;图 4.6(b)是机械臂运动到抓取姿态,方便深度相机拍到清晰的画面;图 4.6(c)是机械臂识别红色长方体后进行抓取操作;图 4.6(d)是机械臂完成抓取并放到预设的码垛区。

f5ebc6aa-7a84-11ed-8abf-dac502259ad0.jpg

图 4.6 抓取流程(实际视频如下)

05结论及展望

本项目基于实验室环境设计了一种采用视觉引导使机械臂完成自主抓取的系统,对智能抓取系统的软硬件、目标识别与定位等相关技术进行了分析、研究以及实验测试,给出了一套较为完整的解决方案,可有效解决传统的机械臂抓取系统所存在的适应环境能力差、开发及使用难度较大等问题。


尤其是,在算法处理方面采用了模板匹配法,实验结果表明基于机器视觉的机械臂抓取系统能够满足在实验室环境下自主抓取的要求。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。