面向物料分拣的机器人视觉检测系统设计与试验
本文设计实现了一个用于物料分拣机器人的视觉检测系统。传统的需要人工完成的拣选工作由于劳动强度大、效率低、容易出现差错等因素,通过使用机器视觉技术、深度学习技术、机器人控制技术对物料进行自动识别、定位、智能分拣从而实现自动化分拣的方式已经广泛地应用到实际中。
系统设计上用分层模块化架构,把系统分成硬件层、驱动层、核心层、应用层。使用yoloV8检测到的物料缺陷区域进行检测,得到深度图像后根据深度图像得到物体的位置和姿态,从而实现缺陷区域的位置标定、识别。完成了机器人的运动学建模、手眼标定和坐标转换,把视图得到的结果转化为适合抓取的位置。在软件上,开发出MATLAB仿真系统来检验算法,用Python完成系统的实现。
经由仿真和实验来证实,系统可以正常地执行各种物料的分拣工作,有较好的实时性以及可靠性。本文给智能制造领域自动化分拣提供技术上的方法。
关键词 机器视觉、物料分拣、目标检测、机器人控制、手眼标定,没有其它限制词
Design and Experiment of a Robot Vision Inspection System for Material Sorting
[Abstract] Design and Implementation of a Robot Vision Inspection System for Material Sorting. Due to the problems of high labour intensity, low efficiency and a high error rate in the old manual sorting method, a system based on machine vision, deep learning and robot control has been developed to achieve automatic identification, positioning and intelligent sorting of materials.
A layer-and-module method is employed for the Design of the system; that is to say, a hardware layer, a driver layer, a core layer and an application layer have been constructed in the system. A model based on YOLOv8 is used for the vision inspection part of material detection, and with the help of depth images, pose estimation can be carried out to add a defect detection function that identifies surface defects such as scratches and cracks. A Kinematic Model for Robot Control and Hand-Eye Calibration have been established to precisely convert vision information into grasp positions. For the software implementation, a MATLAB simulation system will be used to verify the algorithm, and then the actual system will be developed with Python.
Based on the simulations and experiments, the system can reliably sort all kinds of materials, and it has good real-time performance and stability. A practical technical solution to the problem of automatic sorting in intelligent manufacturing has been proposed in this paper.
[Keywords]Machine Vision, Material Sorting, Object Detection, Robot Control, Hand-Eye Calibration
1绪论
在现代智能制造和物流仓储行业飞速发展的大背景之下,传统的物料分拣作业大多采用人工进行操作,存在着劳动强度高、分拣速度慢、出现误检或者漏检现象频繁、人工成本不断攀升、作业标准不统一等种种问题,已经不能满足现在多品种、小批量、高效率的现代生产需求了。此外,由于工业场景中存在着复杂的环境以及光照不好、物料形状多样而且随机的实际情况,这就使得人工拣选更加困难不稳定。伴随着工业机器人、机器视觉技术的不断发展,使用视觉引导机器人完成自动分拣可以很好地解决上面所提出的问题。机器视觉系统有非接触、高精度、高速的特点,而工业机器人有着很高的重复定位精度以及长时间的工作能力,二者结合起来就可以形成一种高效的自动分拣系统。
本文有重大的理论价值、重要的现实意义。从理论上来说,本文把机器视觉、深度学习以及机器人控制等多学科知识整合起来,探究视觉引导机器人分拣系统设计的方法和关键的技。就实际应用价值而言,该系统可以广泛地应用于电子制造、汽车零部件、食品包装、物流分拣等诸多行业中,很好地解决了企业出现的招工难、用工贵等难题,降低了生产成本,提高了生产效率。自动分拣系统可以使分拣出来的商品无误、一致,减少了人误差,提高产品品质。另外,系统采用模块化的设计方法,具有较好的扩展性,可以满足各个行业的需求来对系统进行定制开发,有着很好的市场应用前景,给智能制造行业提供了一种可行的技术解决办法。
在机器视觉引导机器人分拣领域,国外发展得比较早,技术比较成熟。美国、日本、德国等发达国家对于该领域进行了大量的研究工作,已经有不少商业化的商品被投入市场。美国Cognex公司VisionPro视觉软件系统的功能有可以完成复杂环境当中目标识别、位置定位等各种操作的任务。日本Keyence公司的CV-X系列视觉系统检测速度快、适用范围广,适合用到电子元器件的检测、分拣上。德国SICK公司发明了一种叫做 Inspector 的智能相机,它的主要特点是能够识别、分类复杂的工件,并且具有深度学习算法。机器人分拣系统中ABB、KUKA、FANUC等国际知名的机器人厂商都有将视觉系统集成进去的分拣方案。就学术研究而言,麻省理工学院、斯坦福大学、东京大学等世界著名学府对于视觉伺服、深度学习目标检测、机器人抓取规划等有很深的研究。
国内关于机器视觉引导机器人分拣的研究开始得比较晚,但是发展很快。近些年来,由于智能制造战略的推行,国内高校以及企业加大了对智能制造的研究投入,取得了诸多的重要成果。清华大学、哈尔滨工业大学、上海交通大学、浙江大学等高校在机器视觉、机器人控制方面有较强的研究能力,开发的视觉定位系统定位精度高,研制的工业机器人视觉引导系统已经应用到汽车零部件生产线上。海康威视、大华股份、华工科技等企业均在企业研发上对机器视觉有着较好的技术能力,所推出之工业相机、视觉软件也多被应用于电子制造、食品包装等行业之中。虽然我国在这方面的研究取得了很大进步,但是和国际先进水平相比,仍然存在一些不足,还需要进一步的研究来提高。
本文主要研究对于物料分拣的机器人视觉检测系统进行开发设计、实现。其研究内容主要有以下几个方面。
系统总体结构的设计。按照物料分拣的实际需要来设计系统的总体结构,确定各个功能模块的划分以及相互间的关系,采用模块化的设计思想,把系统分成相机管理模块、视觉处理模块、机器人控制模块、分拣控制模块等,使各个模块可以解耦、独立开发。
视觉检测技术的发展状况。基于深度学习的检测目标算法,在工业环境的复杂环境中实现各种物料快速识别和分类的方法有所不同。以深度图像为基础来获得物料的空间位置和姿态信息的位姿估计方法。根据研究出来的缺陷检测算法,在物料表面识别出所有的缺损点并对其进行标注,然后将该类样本上传到服务器端数据库中保存,最后将样本数据与训练好的模型输入到缺陷检测的计算单元。
坐旋转算子和标定。研究相机坐标系和机器人坐标的变换关系,提出一种相机标定算法,把图像坐标转换成机器人坐标,对各种标定误差源进行分析并提出解决办法。
对机器人的控制系统进行研究。设计一种合理的机器人的抓取路径,以保证不会发生碰撞从而提升效率,对夹爪进行相应的控制,根据物料的特性来选取适合的夹爪和力量。
系统集成实验检验。构建完完备的视觉分拣系统软件来实现各个模块的集成、协调工作,在搭建好实验平台之后对系统的各项功能进行系统的测试以及评估验证系统的有效性、可靠性。
根据物料分拣的实际情况要求,系统应具有如下几方面的功能。在图像采集方面,系统可以实时采集工作区内的彩色图和深度图,图像采集帧率及分辨率要高才能满足实时检测需求,系统还应该能兼容不同种类的相机。在目标检测功能上,系统会对采集到的图像进行处理,自动识别图像中的物料目标,检测算法要具有较高的准确率和召回率,可以识别出各种各样的物料,检测结果应该包含物料类别、位置、大小等信息。系统能够通过检测得到的物料检测信息以及深度信息来求出物料在三维空间中的位置、姿态,位姿估计精度越高越好,系统应该可以处理不同摆放姿态的物料。系统对于物料表面的划痕、裂纹、凹坑、锈蚀等缺陷都具有检测的功能,而这种检测又必须具备一定的灵敏度,能够识别出表面很小的缺陷。系统可以根据相机坐标系中的物料位置,把目标位置转换成机器人的坐标系中能够实现的点。就机器人控制的功能而言,可以控制机器人进行抓取、移动、放置等动作,精度较高,速度快,能够很好地完成分拣的任务。根据检测结果自动给出分拣方案,包含各种物料的分拣种类、分拣缺陷以及各个分拣区所占容积等很多影响因素都会被综合考虑到当中。人机交互的功能上应该具有友好的人机交互界面,实现参数的设置、状态的监控以及手动控制等。
除此之外,系统还要对性能进行要求。在实时性方面,系统应该具有较好的处理速度来达到实时分拣的要求,图像处理帧率不低于规定水平,单件物料的分拣时间在可接受范围内。在准确性方面目标检测准确率要达到规定水平,位姿估计误差要在可以接受的范围内,分拣成功率要达到要求水平。系统在稳定的要求上要达到一定的程度,平均无故障时间为要求的水平以上,系统要有一定的容错性,在出现异常的时候可以自动恢复正常。从可扩展性角度出发,系统应该具有模块化的架构可以进行功能的扩充和升级,应该支持新添加的物料类型,新加入的检测算法等。就易用性而言,系统操作应该简单明了,操作人员经过短暂的培训就可以熟练使用,系统要有完善的帮助文档和技术支持。
根据需求分析的结果,本系统采用分层架构设计,系统总体上分为硬件层、驱动层、核心层和应用层这四个层次。硬件层是系统的物理基础,主要是指深度相机、工业机器人、夹爪、传送带等设备,深度相机用来采集工作区域的图像信息,工业机器人用来执行抓取和放置的动作,夹爪用来夹持物料,传送带用来运送物料。驱动层和硬件设备进行通信,封装了各个硬件设备的底层接口,相机驱动模块完成相机的初始化、参数设置、图像采集等操作,机器人驱动模块完成机器人的连接、运动控制、状态反馈等操作,夹爪驱动模块完成夹爪的开合控制,传送带驱动模块完成传送带的启停和速度控制。核心层就是系统的核心处理部分,主要包含视觉处理模块、坐标变换模块、分拣控制模块等内容,视觉处理模块完成图像预处理、目标检测、位姿估计、缺陷检测等工作,坐标变换模块完成手眼标定以及坐标转换任务,分拣控制模块进行分拣决策以及任务安排。应用层是系统用户的界面,可以进行人机交互,主要包含图像显示模块、参数设定模块、状态监视模块、手动控制模块等几个子模块。
系统由若干个主要的模块组成。相机管理模块是实现对相机进行初始化、相机参数设置、获得相机图像以及扩展接口等功能的操作。可以处理各种类型的相机,使用统一的相机接口也可以添加新的相机类型。视觉处理模块对图像进行处理和分析,分为图像预处理子模块、目标检测子模块、位姿估计子模块、缺陷检测子模块,图像预处理子模块对图像进行去噪、增强等操作,目标检测子模块识别物料并定位,位姿估计子模块根据深度信息计算物料的三维位置和姿态,缺陷检测子模块检测物料表面的缺陷。标定模块主要完成系统的标定任务,即相机标定和手眼标定,相机标定得到相机的内参数矩阵和畸变系数,手眼标定得到相机到机器人的坐标变换矩阵。坐标变换模块是进行不同的坐标系之间坐标转换的。机器人控制模块完成机器人的运动控制,给机器人提供运动规划的功能,从而得到没有冲突的运动轨迹,即正运动学和逆运动学的求解。夹爪控制模块控制夹爪的开闭以及力的大小。传送带控制模块主要是控制传送带的启停、速度调节和方向控制等功能,可以达到传送带追踪的效果。分拣控制模块是执行分拣任务调度、执行的模块,根据检测结果产生分拣方案,协调各个模块完成分拣任务。系统控制模块是系统初始化、启动、停止、状态监控等各方面的控制中心,协调各个模块的运行保证系统稳定。用户界面模块有图形化用户界面,可以实现图像的显示、参数的设置、状态的监控、日志的记录等。
系统的工作过程可以分为几个阶段。系统初始化阶段,系统启动的时候先加载配置文件,初始化各个功能模块,然后依次初始化相机管理模块、视觉处理模块、机器人控制模块、夹爪控制模块、传送带控制模块等,初始化完成后系统就进入了待机状态。在图像采集时,当系统启动后相机就会一直进行连续采集工作区域的图像,所获取的图像既有彩色图像又有深度图像,图像会由回调函数传送给视觉处理模块。在视觉检测阶段,视觉处理模块接收到图像之后会先进行图像预处理,即去除噪声、增强等操作,接着进行目标检测识别图像中的物料目标,对检测到的每一个目标进行位姿估计计算出其三维位置和姿态,最后进行缺陷检测判断物料是否含有缺陷。
分拣决策阶段是由分拣控制模块根据检测结果进行分拣决策的,在此基础上确定分拣目标位置,再按照优先级对分拣任务进行排序生成分拣任务队列。坐标变换阶段就是把相机坐标系下的物料位置转变成机器人坐标系下的抓取位置,根据手眼标定的结果以及工具中心点偏移的计算。机器人执行阶段,机器人控制模块根据抓取位置规划出运动轨迹,机器人按照规划好的运动轨迹先移动后抓取,接着再移动后放置,夹爪控制模块与机器人动作相配合,在合适的时候打开或者关闭夹爪。结果反馈阶段分拣完成后系统会更新分拣结果记录分拣日志,如果分拣失败系统就会进行错误处理,重新尝试或者跳过这个任务。系统不断地进行以上步骤直到所有的物料分拣完成或者用户停止了系统的运行。
图2-1 分拣操作界面
相机是视觉检测系统的主要传感器,它的好坏决定了系统的检测效果。本系统选择使用深度相机,深度相机是采用双目立体视觉原理的,采用红外立体相机来测量深度,在任何光照条件下都不会受到影响。相机有很高的分辨能力,彩色图像以及深度图像的分辨能力也都比较高,能够满足高精度的检测要求。相机的视野角很大,可以把较大的工作范围包含在内。相机的帧率高可以达到实时检测的要求。相机有近距离测量的能力,可以做近距离物料的检测。相机使用的是USB接口,即插即用,方便集成。
机器人是分拣动作的执行器,本文选用的是六轴工业机器人。六自由度的运动可以使得机器人能够在任意方向上做360°角的转动,也可以在任意高度上做270°角的升降,因此有着很强的适应性。机器人有较好的重复定位精度可以满足分拣精度要求。机器人具有很大的工作空间,可以到达传送带、分拣区域。机器人具有很高的运动速度来达到分拣要求。机器人有着开放的控制接口,支持诸多的通信协议,方便同视觉系统融合起来使用。除相机和机器人之外,本系统还有其他的硬件设备。气动夹爪用作物料的夹持,具有响应快、夹持力可调等优点。传送带用来运输物料,速度可调可以正转也可以反转。照明系统可以营造出均一稳定的光照环境来提高检测的效果。工控机用来运行系统软件,采用高性能的处理器和显卡,可以满足实时处理的要求。
YOLOv8是YOLO系列最新版本的目标检测算法,有重要的技术地位。YOLOv8用无锚框的检测方式,直接预测出目标的中心位置以及宽度和高度等参数,省去了传统的方法中需要设计、调整锚框的问题,检测过程简单。网络结构使用高性能骨干网络来完成特征提取的基本工作,用模块取代原来的模块提高了特征提取的速度。检测头是解耦的设计,分类任务和回归任务各自独立地形成了两个分支的处理,以此来提升检测的准确性。YOLOv8在训练时使用了多种数据增强的方法,马赛克增强、混合增强等都用到了。在损失函数上,分类任务用焦点损失函数,回归任务用完完全集的交并比损失和分布焦点损失来提高定位精度。经过这些技术的改善之后,YOLOv8不但能够迅速识别出物体的位置而且精度也得到很大的提升,在工业场景中还可以实现实时检测的效果。
图3-1 彩色图像目标检测结果
就物料分拣而言,本文根据YOLOv8来建立物料检测模型进行训练。训练数据集中含有各种类型的物料,如齿轮、轴承、螺栓、螺母、垫圈等常见的工业零件,各类物料都有大量的图像,总数为几千张。数据增强的方法有随机水平翻转来增加数据的多样性,随机缩放来适应不同的距离的检测,马赛克增强来拼接多张图片提高小目标的检测能力,颜色空间增强来适应各种环境的光照情况。经过精心设置的训练参数,输入图像尺寸选择合适的大小来兼顾速度与精度,批量大小按照硬件状况来决定,学习率用余弦退火衰减的方式进行,训练轮数使模型能够充分收敛,选用带量的随机梯度下降法做为优化器。经过训练之后,在测试集上得到较为满意的效果,能够区分出各种各样的物料,为之后的位姿估计以及分拣决策提供一个可靠的输入。
检测算法产生的原始结果要经过后面的处理才能用在后面的位姿估计、分拣决策上。后处理主要为以下几个步骤。置信度过滤属于第一步,根据合理的置信度阈值来消除置信度低下的检测结果,从而降低误判率来提高检测结果的准确性。非极大值抑制属于第一步,对同一个目标上的检测框而言,只保留置信度较高的那个检测框,删除那些重叠得不够严重的冗余框,避免重复检测出现的情况。边界框坐标转换为第四步,把检测框的相对坐标转换成图像的绝对坐标,计算出检测框的中心位置,给后面的位置估计提供正确的图像坐标。类别判断属于第四步,依照检测结果的类别标识来决定物料的种类,进而实施后面的分拣决定以及分拣区域分配。经过后处理后的检测结果更加简明易懂,并且可以用于整个分拣系统稳定运行的条件。
深度图像属于位姿估计的数据来源之一,须要经过充分的预处理之后,才可应用到后面的计算中。深度相机所得到的深度图像是以无符号整数的形式存储的,单位是毫米。深度图像预处理的第一步就是深度对齐,把深度图像对齐到彩色图像的坐标系上,保证深度像素和彩色像素一一对应,这是后面融合彩色信息和深度信息的前提。第二步就是无效值的处理,深度图像中存在着无效值,必须经过插值或者标记处理,否则会影响计算结果。第三步就是深度滤波,用双边滤波或者联合双边滤波来保持边缘同时去掉噪声,提高深度数据的质量。第四步就是进行深度缩放,把深度值换算成米制单位,方便以后的计算以及和其他系统集成。经过以上一系列预处理后,深度图像的质量有了很大提高,给三维坐标点的计算打下了良好的数据基础。
按照相机内参以及深度信息来把图像上像素点转变成三维空间坐标。这种转变是按照相机成像的几何原理来完成的,用小孔成像模型建立像素坐标和空间坐标的对应关系。转换公式里含有相机的内参矩阵,即相机的焦距以及主点坐标。对图像上任意一个像素点来说,根据它所对应的深度值就可以用公式来求出该点在相机坐标系中的三维坐标。深度值直接作为坐标分量,其他的两个坐标分量用像素坐标减去主点的差值乘以深度值除以焦距来得到。这个转换把二维图像和三维空间联系了起来,使图像里检测到的物料目标能对应到真实的三维空间位置上,给机器人抓取赋予了必须的空间信息。转换后的三维坐标在相机坐标系下,还要经过坐标变换转换成机器人基坐标系中才能用于机器人控制。
图3-2 深度图像显示
对于物料的姿态估计,本文用到了点云方法。首先提取检测框内所有的点云数据,这些点云包含了物料表面的三维数据。第一步就是滤波,用统计滤波器去除离群点消除测量噪声,用体素滤波器进行下采样降低数据量。第二步是平面分割,用随机采样一致性算法得到支撑平面,去掉平面点云,只保留物料本身的点云数据。第三步就是聚类分析,用欧式聚类把点云分成独立的簇,每个簇代表一个物料,可以处理多个物料同时存在的情况。第四步是主成分分析,对每一个点云簇做主成分分析计算主方向,得到物料的姿态信息,即物料的朝向和倾斜角。第五步是包围盒计算,用点云分布来计算物料的三维包围盒,得到物料的尺寸和中心。经过这样一系列的处理之后,系统就会得到物料在三维空间中所具有的全部位姿信息,包含位置坐标以及空间姿态等内容,从而给机器人规划抓取路径赋予了必需的数据支撑。
本文把常见的物料表面缺陷分成不同的种类。划痕是物料表面出现的细长形损伤,是由于摩擦、碰撞等原因所造成的,称之为划痕。裂纹是物料表面断裂,是由应力集中或者材料缺陷引起的一种形式,呈线形的缝。凹坑是物料表面的凹陷,一般是由冲击造成的,即局部下陷的区域。锈蚀是物料表面的氧化腐蚀,一般是由潮湿环境造成的,颜色、质地都发生了变化。会带来物料使用性能、质量方面的缺陷,在分拣时要检测并加以区分。缺陷类型明确地定义出来之后,给后面的检测算法的设计以及数据集标注赋予了准则,从而保证缺陷检测具有规范性、一致性。
缺陷检测是用深度学习的语义分割技术完成的。语义分割把图像上每一个像素都标上一个语义,把缺陷区域识别出来并加以说明。网络结构采用编码器和解码器结构,编码器用残差网络做骨干网络提取多尺度的特征,经过几个卷积层和下采样的步骤来得到高阶的语义信息。解码器用转置卷积进行上采样来慢慢得到空间分辨率的细节,把高层语义信息传送到每一个像素。跳转连接是在编码器与解码器之间对应层的细节信息被传送到了深层来弥补由于下采样而产生的空间细节的丢失。训练数据集包括各类缺陷图像以及正常样本图像,各类缺陷图像的数量都足够多,可以使得模型对各种缺陷都能进行学习。训练结束后模型就可以用像素级的方式对缺陷做分割工作,从而得到各个像素点对应的缺陷种类信息,最终输出的是准确的缺陷图像。像素准确率、平均交并比等指标是用来衡量模型的检测性能的,保证缺陷检测的可靠性。
对于检测出的缺陷区域要得到有关特征来完成缺陷分类与严重程度的评定工作。几何特征属于缺陷的重要描述指标,包含缺陷区域的面积体现缺陷的大小,周长体现缺陷的边界长度,长宽比体现缺陷的形状特点,圆度体现缺陷接近圆形的程度。纹理特征用灰度共生矩阵提取,对比度表现的是缺陷区域纹理的强度,同质性表现的是纹理的均匀性,能量表现的是纹理的规则程度。颜色特征提取的是颜色空间中的各个通道的均值、方差等来体现缺陷区的特点。深度特征体现的是缺陷区域深度的变化,对于凹坑等有深度信息的缺陷来说尤其如此。经过以上这些特征之后,可以对缺陷做出解释以及分类,并且确定出它的严重程度,再得到相应的分拣结果。合格物料直接进入正常的分拣流程,不合格的物料分拣到专门的处理区去,保证质量检测和分拣的统一性。
正运动学是机器人运动学的基本问题,即知道机器人的各个关节角度就可以得到末端执行器在基坐标系下的位置和姿态。本文用标准的方法建立机器人的运动学模型,用定义各关节连杆参数的方式来描述机器人的几何结构。连杆参数有连杆转角、连杆长度、连杆偏距。连杆转角表示相邻关节轴之间的角度,连杆长度表示连杆的尺寸,连杆偏距表示相邻连杆之间的偏移,关节角表示关节的转动角度。根据这些参数可以得到相邻关节间的变换矩阵,变换矩阵是上一关节坐标系到下一关节坐标的旋转和平移变换矩阵。将所有的关节变换矩阵相乘就可以得到从机器人基座到末端执行器的总变换矩阵。这个总变换矩阵包含了末端执行器位置、姿态信息,是机器人运动控制、轨迹规划的基本。正运动学计算比较简单,只要知道各个关节的角度值,就一定能得到末端执行器的位姿。
逆运动学就是正运动学的逆问题,即根据末端执行器的目标位姿来求解各个关节角度。逆运动学问题比正运动学要复杂得多,一般会有多个解甚至无解的情况。本文采用数值迭代法对逆运动学问题进行求解,用迭代逼近的方式得到能够达到目标位姿的关节角度。算法流程就是将初始化的关节角度设为当前值,计算出当前位姿和目标位姿之间的误差,再计算出雅可比矩阵来表示关节角度的变化对于末端位姿的影响,用阻尼最小二乘法来更新关节角度,如果误差没有收敛就重复上面的步骤。雅可比矩阵的计算用数值差分法来计算各关节对于末端位姿的影响。阻尼最小二乘法是在最小二乘法的基础上加入阻尼因子来提高求解的稳定性、收敛性。逆运算是机器人运动精度、速度的计算结果,也是机器人控制系统不可缺少的部分。
图4-1 夹爪控制界面
轨迹规划就是生成起点和终点的运动轨迹,使机器人的运动是平滑、安全的,能够完成其任务。本文使用不同的轨迹规划方式来满足现在的各种需要。直线轨迹规划使得末端执行器从起点到终点一直沿着直线运动,轨迹点用线性插值法进行生成,速度用曲线加减速的方法来保证运动平滑,当精度要求较高时使用。点到点轨迹规划是各个关节分别独立运动,从起点的角度开始运动直到到达终点的角度,轨迹点是关节空间的插值生成的,计算简单、运动速度快,适合于对路径要求不高的场景。圆弧轨迹规划是末端执行器沿圆弧从起点运动到终点的过程,它需要给出圆弧的圆心点来实现这一过程。轨迹规划会牵涉到很多约束条件,关节速度受制于电机不被过载,关节加速度受限于冲击不可太大,关节位置须受门机限位的支配,奇异点要避开以防失控。有条不紊地布置机器人,使它们的动作更加顺畅,避免出现危险情况。
手眼标定就是求解相机坐标系到机器人基坐标系的转换矩阵,它是用视觉引导机器人抓取的重要技术之一。根据相机安装位置的不同,手眼标定有两种情况。眼在手外配置指的是将相机固定在外力作用下,从而观测机器人以及工件所在的环境工作范围,并且完成求解相机坐标系到机器人基坐标系变换矩阵的过程。在这样的布局中相机视野是固定的,适合工作环境比较固定的情况。眼在手上装有指相机,随机器人运动,其标定目的是求解相机坐标系到机器人末端坐标系的变换矩阵。在这样一种情况下相机可以移到不同的位置进行工件的观察,对于工位较大的场合较为适用。本文采用“眼在手”的结构,在传送带上方安装摄像头,使得视野可以包含物料分拣区域,该种方式比较可靠,标定完成之后不需要随着机器人一同移动再去重新标定。
手眼标定的全过程有若干步。首先进行标定板的准备,将标定板放在工作空间里可以被相机清楚观测的位置上。控制机器人到达各个不同的姿态,每次到达一个姿态之后就进行机器人末端位姿的采集。同时采集每一个姿态的图像并对标定板进行检测,用图像处理得到标定板在相机坐标系下的位置和姿态。用多组机器人位姿与之对应的标定板位姿来形成方程组,从而得到手眼变换矩阵。标定点位越多,求解结果就越准确,但是也会使标定时间增加。一般选择十几个到几十个标定点位,在工作空间的各个位置都有,保证标定结果的全面性。标定时要求标定板不动,只有机器人在运动的时候,才能建立坐标系之间变换的关系。
手眼标定的算法要解决的是旋转矩阵和平移向量的问题。本文采用经典的方法来解决手眼标定的问题,把问题分成旋转部分和平移部分分别求解。对旋转部分用相机坐标系到机器人坐标的旋转矩阵方程来建立,用最小二乘法求解相机坐标系到机器人坐标的旋转关系。平移部分,在旋转关系已经确定的情况下,用平移向量方程建立平移关系,同样采用最小二乘法求解平移关系。分步求解法计算稳定,精度高,是工业上常用的标定手眼位置的方法。标定完成后,就可以把相机检测到的物料位置转换到机器人坐标系下,使机器人去抓取物料。
标定完成后要进行精度检验,检验标定结果的可靠性。评价方法如下,控制机器人移动到各个测试位置,在每个测试位置上用相机测量标定板的位置,然后通过手眼变换矩阵将标定板的位置转成机器人坐标系,再和机器人的实际位置比较计算误差。评估指标有平均位置误差代表标定整体的精度水平,最大位置误差代表标定最差的情况,位置误差标准差代表标定的一致性。标定误差超过接受范围的时候,要重新标定或者排查标定过程中出现的各类问题。准确地评定之后,就可以保证手眼标定的准确,给后面的工作做好了良好的基础。
系统中存在着许多个坐标系,各个坐标系有各自的具体定义以及应用场合。图像坐标系是以图像左上角作为原点的坐标系,横轴往右、纵轴往下,单位是像素,用于描述图像中像素位置的坐标。相机坐标系是以相机光心作为原点,横轴向右,纵轴向下,纵轴向前指向场景,单位为毫米,用来表示物体相对于相机的位置。机器人基坐标系是以机器人基座中心为原点,横轴向前、纵轴向左、竖轴向上,单位为毫米的全局坐标系,也称为机器人的坐标系。末端坐标系是以机器人末端法兰中心为原点,方向按照工具坐标系来确定的,用以表示夹爪等工具的位置和姿态。工件坐标系是根据工件的位置来定义的一个局部坐标系,用来简化某个工件的描述以及操作。将视觉引导机器人的坐标系转换正确才能进行准确的控制,一个点的误差就会造成抓取位置偏差较大。
从图像坐标到机器人的坐标变换过程有若干步骤。首先要对图像坐标以及相应的深度值进行转换,得到相机坐标系下的三维坐标,这是利用相机内参的基本转换。最后,把相机坐标系下的坐标用手眼标定得到的变换矩阵转换成机器人基坐标系下的坐标。该变换矩阵是由旋转和平移两者的结合体来完成的,它能够把相机坐标系里的一个点转变为机器人坐标系中一个点的坐标。坐标变换是否正确是由相机内参数的准确度、深度测量的精度以及手眼标定的精度所决定的。为了提高坐标变换的准确性,对每一个环节都要进行标定、校准。在实际应用时还要考虑到工具中心点的偏移,由于夹爪的抓取点和机器人末端法兰中心之间会存在偏移,在变换公式里要加以考虑。
坐标的变换误差属于各种因素所引起,须要加以系统研究,并加以控制。相机内参误差是由相机标定的精度造成的,会影响图像坐标到相机坐标的转换精度,可以采用高精度相机标定的方法来减小。深度测量误差是由深度相机所使用的测量原理引起的,在边缘处以及反光表面的地方误差比较大,可以采用多次测量求平均值或者多角度融合的方法来减小误差。手眼标定误差是由标定算法精度及标定点分布造成的,会影响到相机坐标到机器人的坐标转换精度,通过增加标定点的数量以及优化标定算法可以减小。机器人定位误差是由机器人自身重复定位精度、绝对定位精度两方面造成的,可以利用机器人校准以及误差补偿的方法来降低。利用误差传递法可以得到最后的定位误差来作为系统的指标。本文通过实验标定得到定位误差在合理范围内的结果,可以达到物料分拣的精度要求。
系统软件用面向对象的编程语言进行开发,使用面向对象的思想来设计和实现,用模块化的结构来提高代码的可维护性和可复用性。整体结构分为三个层次。硬件抽象层对各个硬件设备的底层接口进行封装,给出统一的设备访问接口,使上层软件不需要知道具体的硬件实现,方便硬件的更换和升级。核心功能层就是完成系统主要功能的模块,主要有视觉检测、坐标变换、机器人控制等内容,是整个系统的计算中心。应用层是对用户界面、系统管理员等所起的作用,给用户提供一个人机交互的操作界面以及接口。分层架构使得各个层之间彼此不相连,在开发与维护上具有较好的独立性。当需要更换相机型号的时候,只要更改硬件抽象层的相机驱动、核心功能层以及应用层,不会影响到系统其它的部分。
系统根据功能可以分为各个模块,每个模块都承担着相应的功能领域。相机管理模块是对相机进行初始化、配置、图像采集、参数调节等操作,可以兼容各种类型的相机,提供了一种统一的相机接口来添加新的相机。视觉处理模块是对图像进行处理、分析的模块,它包含目标检测、位姿估计、缺陷检测等子功能。标定模块把相机标定以及手眼标定的参数传入系统,从而为坐标变换赋予需要的参数。机器人控制模块处理机器人运动控制中各个运动的方式,含有关节运动、直线运动、圆弧运动等,在此基础上还要具备运动规划的功能,能够生成无碰撞的运动轨迹。分拣控制模块是对分拣任务进行调度、执行的模块,根据检测的结果来生成分拣方案,并且协调各个模块完成分拣任务。用户界面模块主要是完成图形用户界面的实现,图像显示、参数设置、状态监测、日志记录等都可以由该模块来完成。这样就可以使各个模块单独开发、测试和升级,提高开发效率以及系统可靠性。
为了检验系统设计是否正确有效,本文在MATLAB平台上搭建了一个完整的仿真系统。MATLAB具有很强的矩阵运算能力以及众多的工具箱,非常适合用MATLAB来开发机器人学、计算机视觉等领域内的算法,并且也可以用于仿真验证。仿真系统是由若干个子系统组成。该模型可以进行六轴机器人的正运动学分析、反向运动学分析、运动规划等,并得到机器人各点坐标,求得到达某特定位置所需要的各个关节的各个位置关系组合的方式和从起始位姿到目标末端位姿的运动曲线。视觉检测仿真模块实现了相机图像采集、目标检测以及位姿估计等功能,在实际操作时会根据物料的实际位置来产生相机图像,用模拟出来的结果来检测物料,并对检测得到的结果加以求解得到物料的三维坐标和角度,同时还要去判断出该物体是否处在摄像机的可接收范围之内。
图5-1 系统主界面
手眼标定仿真是手眼标定算法、坐标变换等模块的主体部分,是根据机器人位姿序列和对应的标定板检测结果来求出手眼变换矩阵并实现坐标的转换。分拣控制仿真模块完成分拣决策、分拣任务调度等工作,按照物料种类、缺陷情况来决定分拣目标位置、管理分拣任务队列、统计分拣结果。可视化仿真模块完成三维场景渲染、动画的制作,在构建工作空间、分拣区、机器人和物料等诸多方面的时候进行模拟并且不停地刷新。利用以上仿真模块相配合,可以达到完整的仿真环境建模的目的,对各模块分别做单独的测试以及联合调式等工作,从而使得系统的开发变得更加高效,并且更为可靠。
主仿真程序主要实现所有的分拣仿真,是整个仿真系统中的控制中心。仿真过程有若干个步骤。首先对所有的仿真参数进行初始化设置,仿真时长、时间步长、物料数目、传送带速度等等可以依据不同的测试要求来进行更改。然后创建各个仿真对象,即机器人对象、视觉系统对象、手眼标定对象、分拣控制器对象和可视化对象,这几个对象一起工作来完成仿真任务。生成测试物料,根据预设的物料类型分布随机产生出指定数量的物料,每个物料都有类型、位置、姿态、缺陷等属性。接着用仿真软件进行手眼标定实验,在实验中模拟标定的过程,从而得到手眼变换矩阵,供以后的坐标变换使用。
图5-2 MATLAB仿真系统三维视图
主仿真循环就是仿真的主要部分,在每一个时间步长里依次更新物料的位置模拟传送带的运动,做视觉检测得到视野内的物料,进行位姿估计得到物料的空间信息,把物料的位置转换成机器人坐标系中坐标变换,做分拣决策得到分拣方案,做轨迹规划生成抓取路径,执行分拣动作更新物料状态,最后更新可视化显示。仿真完成之后,对得到的数据进行统计分析,得到分拣成功情况以及各个性能指标,并输出仿真报告以及结果图表。通过仿真的形式完成系统的设计正确性、性能测试,找出系统中存在的问题从而提高系统的开发速度以及系统质量。仿真系统也可以用来做算法参数的优化以及各种方案的比较,从而给实际系统的设计提供一些方向。
图5-3 仿真结果分析图
除此之外,本文还用Python实现了真实的视觉分拣系统软件。相机管理模块用工厂模式来设计,可以对各种不同类型的相机进行统一的管理,根据配置文件选择使用真实的相机或者模拟的相机。这样就使得系统在没有硬件的情况下可以进行软件测试以及算法验证,提高了系统的开发灵活度。该模块主要是进行目标检测、位姿估计、缺陷检测等工作,并使用深度学习框架来加载训练好的模型,对输入的彩色图像、深度图像进行处理,从而得到各个检测结果所对应的检测结果列表,其中包含有物料类型的识别、检测到的位置、检测到的姿态以及缺陷的检测等各类信息。
图5-4 参数设置界面
分拣控制模块是对分拣结果做出决定并组织工作的模块,根据检测结果选择相应的分拣区域产生分拣任务,并调度分拣任务。用户界面模块采用图形界面框架开发,给图像显示区提供实时显示彩色图像、深度图像功能,给检测结果表格区提供显示检测到的物料信息功能,给控制面板区提供系统控制、参数设置、手动操作等功能,给日志窗口区提供记录系统运行状态、操作日志的功能。用户界面简单明了,操作人员在经过短暂的培训之后就可以使用。整个python系统使用模块化的开发方式,各个模块之间用清楚的接口进行交流,方便以后的功能添加以及系统的维持。系统配置信息存放在配置文件里,可以进行参数调节以及不同情况的适用。
图5-5 图像保存功能






DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)