概述
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
作者丨曾三
来源丨 混沌无形
点击进入—>3D视觉工坊学习交流群
摘要:为了减少机械臂在产品分类、抓取过程中的执行时间,降低定位误差,以提高生产效率。针对传统机器人仅能执行预定义轨迹任务的局限性,本文提出一种结合视觉识别系统的机械臂抓取方案。该方案中的视觉识别系统可同时检测待抓取目标的颜色和形状属性,并采用模板匹配法对目标物体进行轮廓匹配;而执行抓取任务的执行装置采用六轴机械臂xArm;最后,使用眼在手上(Eye-in-Hand)视觉-机械臂方案实现对多个物体的识别与抓取,并根据设定规则进行码垛,测试结果验证了所提方案的有效性和鲁棒性。
01
引言
近年来,随着人类对工业现代化生产、深海探险、太空探索、环境监测、远程医疗、智能家居等领域的深入研究,以及应用需求的多样化。
高速、灵活的多自由度机械臂如同人类手臂,在生产、生活中逐渐扮演重要角色,机械臂控制技术向智能化发展也已经成为必然趋势。
此外,视觉是人类观察与感知周围环境的重要手段。据统计,在人类接受的信息中,通过肉眼观测获取信息的占比高达75%,这充分表明人体视觉功能的重要性。
将机器视觉技术与机械臂控制相结合,可解决机械臂需要自动判别和在一定自主性的工作任务时显得捉襟见肘的问题,以及机械臂在复杂工作环境和工作任务中灵活性不足的问题,从本质上提高机械臂的自主能力和智能程度,增强了机械臂的适应性和实用性。
为此,本文提出了一种基于机器视觉的机械臂智能抓取系统:采用视觉传感器代替人眼来做测量与判别的技术,利用计算机模拟人的识别标准,去分析理解图像,并寻找目标物体和目标地点,在明确工作目标后向机械臂发出相应分析结果,并控制机械臂完成自主抓取任务。
02
智能抓取系统构成
2.1
硬件系统
如图2.1所示,智能抓取系统硬件设备主要是由计算机、机械臂系统,以及固定于机械臂末端的视觉系统(眼在手上[Eye-in-Hand])和末端执行器四部分组成。
相对于眼在手外(Eye-to-Hand)的安装方式,采用眼在手上(Eye-in-Hand)安装方式,智能抓取系统的视场可以随着机械臂的运动而发生变化,可增加视觉识别的范围。
智能抓取系统在执行抓取任务过程中,视觉系统识别到抓取目标的位姿后,将数据传递给计算机进行处理(坐标变换等),最后由机械臂系统实现对目标物体的抓取、摆放。
图 2.1 智能抓取系统组成
机械臂系统由控制器、六轴机械臂和末端执行器(吸盘)组成。机械臂所能完成的任务随自身结构差异而有较大区别,故本次实验采用xArm 6轴机械臂(工作空间足够大),可满足本次抓取任务要求。此外,机械臂可识别控制器指令,实现机械臂的运动规划以及末端执行器(吸盘)的开关。
视觉系统采用Intel RealSense D415视觉传感器,以实现图像采集和识别定位功能。Realsense D415是Intel在2018年推出的一款深度相机,其拥有大约70度的视场和200万像素成像器,相比于其他拥有同样特质的摄像头,D415具有重量轻、精度高、易校准、成本低的优点。
2.2
软件框架
智能抓取系统软件框架主要基于机器人操作系统ROS。
ROS是一个适用于机器人开发的开源元操作系统,主要在Linux环境下工作。它集成了大量的工具、库、协议,提供了操作系统应有的服务,包括硬件抽象,底层设备控制,进程间消息传递,以及包管理,极大降低了机器人的开发门槛。本文使用ROS作为操作智能抓取系统的基础软件平台,并将操作过程中所有的步骤串起来,如图2.2所示。
图 2.2 智能抓取系统软件框架
视觉系统部分:目标识别与定位功能采用计算机视觉库OpenCV开发(OpenCV是一个跨平台计算机视觉和机器学习软件库,可以运行在Linux等多操作系统上,具有轻量、高效等优点。)本项目在Linux系统下基于ROS平台采用OpenCV进行目标物体识别、定位(下一章节展开介绍)。
机械臂控制系统:机械臂运动规划过程中,所有节点之间的通信通过专用的ROS话题完成。要控制机械臂对目标的抓取,需要运行逆运动学算法节点,读取到末端执行器应到达的位姿,并计算所需关节角度位置,上述控制信息在单独的话题中发布,由控制器读取后实现机械臂的运动。(有关机械臂正、逆运动学的相关理论知识具体详情可见Zippen-Huang/RobotTechCooker github仓库RobotTechBook分支的《机器人学导论》第三章、第四章,后续也会安排机械臂的运动学模型分析)。
综上,视觉系统在识别、定位到目标物体后通过发布话题服务实现机械臂的抓取、摆放等运动规划任务。
03
图像识别与定位分析
对于基于机器视觉的机械臂抓取系统而言,其首要任务是能够准确的识别与定位目标物块,这是影响最终抓取成功率的重要因素。
为了精确获取目标在三维空间中的坐标,目标物体识别与定位的主要过程如图 3.1所示,接下来做详细分析。
图 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所示。
图 3.2 样本分析结果图
3.2
特征提取
通过图像预处理只能获取所有目标物体的二值化图像,要实现目标物体的识别和定位,还需要进一步获取每一个目标物体的颜色特征以及几何中心像素坐标。因此还需要进行HSV阈值分割、轮廓提取、模板匹配等算法来完成特征提取操作。
3.2.1 HSV颜色分割
在本次项目中,通过颜色特征就可以对目标物体进行初步识别分类。相较于常见的RGB颜色空间反映出物体具体颜色信息的不直观性,HSV (Hue:色调, Saturation:饱和度, Value:亮度)颜色空间是一种面向视觉感知的视觉颜色模型,具有更好的辨识度,故本次实验采用HSV颜色分割算法对目标物体的颜色进行分割。
3.2.2 轮廓提取
为了获取每一个目标物体的几何中心像素坐标,加之在本次任务中,由于二值化后目标物体的形状特征都是规则的几何形状,故利用OpenCV视觉开发库自带的轮廓检测函数(cv2.findContours()函数)即可实现对图像预处理后的目标图像进行轮廓和像素坐标提取。为了看到更直观的效果,将其显示在原始图像上,如图 3.3所示,图像显示的是在HSV颜色分割操作得到红色目标物体后对图像内的所有红色目标物体进行了轮廓提取。
图3.3 轮廓提取
3.2.3模板匹配
通过上述操作后,视觉系统虽然得到了每一个目标物体的中心像素坐标,但抓取系统依旧无法区别开每一个目标物体之间的特征。因此,利用OpenCV视觉库的轮廓识别函数找到轮廓后,还需要采用模板匹配算法对预处理后的目标进一步进行匹配。
模板匹配算法的基本原理是提供一个基本模板进行比较,在源图像中找到相似的模板。匹配的过程是将数据集中源图像通过索引与库中模板(预先对不同形状的目标物体进行拍照,经过二值化处理后作为模板库。)依次进行比较,在匹配过程中将模板与图像比较计算结果存储在矩阵中,通过评分模型给出模板在数据集中估计的最佳位置。
本项目要抓取目标的形状特征明显,采用模板匹配法具有较好的识别效果。基于轮廓特征的模板匹配效果如图3.4所示。
图 3.4 模板匹配效果
3.3
目标定位
基于前面步骤的处理结果,要得到目标在世界坐标下的位姿,需要进行坐标转换。该过程中会涉及到以下四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。世界坐标系和相机坐标的转换属于刚体变换(旋转、平移);相机坐标系和图像坐标系利用相似三角原理实现坐标变换;图像坐标系和像素坐标系利用一组线性变换公式即可得到,故通过上述一系列操作就可以得到像素坐标系到世界坐标系的转换。
然而,一个物体与相机的相对位置关系和这个物体与机械臂之间的关系是不一样的,所以在相机确定了物体的位置之后,还要把此时的位置转换成相对于机械臂的位置。这个位置就是由手眼标定得出。故手眼标定的实质就是建立相机坐标系与机械臂坐标系的映射关系。
同时,为确定三维空间中物体表面某点的几何位置与其在二维平面图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数(内参、畸变参数)。在大多数条件下,这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。
上述通过相机标定得到了三维空间中物体表面某点的几何位置与其在二维平面图像中对应点之间的相互关系,同时前文借助OpenCV视觉库的cv2.findContours()函数不但能找到目标物体的轮廓,还能得到二维图像上目标轮廓的中心像素坐标,再结合手眼标定得到相机坐标系与机械臂坐标系的映射关系,此时我们就可以通过矩阵变换实现依次将目标物体从像素坐标系到图像坐标,再到相机坐标,最后到世界坐标(机械臂坐标)的转换,从而得到目标物体在机械臂坐标系下的空间位置。实现目标定位后,利用运动控制节点即可实现机械臂对目标物体的抓取(一气呵成~)。
04
识别抓取实验
4.1
环境搭建
本项目采用ROS2GO作为开发平台,内置Ubuntu 18.04,ROS Melodic环境,即插即用。
图 4.1 128G内存ROS2GO开箱图片
(1)创建工作空间并配置机械臂环境(xArm六轴机械臂)
图 4.2 创建工作空间
图 4.3 配置机械臂的工作环境
(2)配置摄像头环境(D415)
图 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所示。
图4.5启动抓取脚本
利用上述方法搭建实验平台并进行验证:对桌面上三种形状(长方体、圆柱体、正方体),三种颜色(红、绿、蓝)共9个物体进行抓取,并按照相同形状进行码垛。
图 4.6是机械臂完成第一次抓取任务的过程。图 4.6(a)为机械臂抓取初始状态示意图,此时机械臂只是使能但未运动;图 4.6(b)是机械臂运动到抓取姿态,方便深度相机拍到清晰的画面;图 4.6(c)是机械臂识别红色长方体后进行抓取操作;图 4.6(d)是机械臂完成抓取并放到预设的码垛区。
图 4.6 抓取流程(实际视频如下)
05
结论及展望
本项目基于实验室环境设计了一种采用视觉引导使机械臂完成自主抓取的系统,对智能抓取系统的软硬件、目标识别与定位等相关技术进行了分析、研究以及实验测试,给出了一套较为完整的解决方案,可有效解决传统的机械臂抓取系统所存在的适应环境能力差、开发及使用难度较大等问题。
尤其是,在算法处理方面采用了模板匹配法,实验结果表明基于机器视觉的机械臂抓取系统能够满足在实验室环境下自主抓取的要求。
(文章仅笔者个人分析,有误请指正,谢谢!由于这个系统比较复杂,有很多地方无法写的很细致,可以和笔者私下沟通交流,后期也会对文章部分内容展开详细的描述。)
本文仅做学术分享,如有侵权,请联系删文。
点击进入—>3D视觉工坊学习交流群
干货下载与学习
后台回复:巴塞罗那自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件
后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf
后台回复:3D视觉课程,即可学习3D视觉领域精品课程
3D视觉工坊精品课程官网:3dcver.com
1.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
2.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
3.国内首个面向工业级实战的点云处理课程
4.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
5.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
6.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
7.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)
8.从零搭建一套结构光3D重建系统[理论+源码+实践]
9.单目深度估计方法:算法梳理与代码实现
10.自动驾驶中的深度学习模型部署实战
11.相机模型与标定(单目+双目+鱼眼)
12.重磅!四旋翼飞行器:算法与实战
13.ROS2从入门到精通:理论与实战
14.国内首个3D缺陷检测教程:理论、源码与实战
15.基于Open3D的点云处理入门与实战教程
16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进
重磅!粉丝学习交流群已成立
交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。
扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿,微信号:dddvisiona
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看,3天内无条件退款
高质量教程资料、答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
最后
以上就是繁荣钢笔为你收集整理的基于机器视觉的ROS机械臂抓取实验的全部内容,希望文章能够帮你解决基于机器视觉的ROS机械臂抓取实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复