基于OpenCV的码垛机器人手眼标定方法**
2018-07-20吴安成何卫锋欧阳祥波
吴安成 何卫锋 欧阳祥波
(广东工业大学,广东 广州510006)
码垛机器人是集机械、电子、信息、智能技术、计算机科学等学科于一体的高新机电产品,它能集成于生产线上的任意段,实现工件或包装件的获取、搬运、码垛、拆垛等任务[1]。码垛机器人在工作过程中,对目标工件位姿信息的获取至关重要[2]。传统的码垛机器人在自动化生产线上,只能执行固定的示教位置、抓取点固定、对定位工装精度要求很高,同时需要精心设计手爪及特殊辅助机构[3-4]。在实际应用中,因工装材料(如缓冲件等)、加工工艺、内装物本身精度以及为码垛机器人抓取内装物预留的公差余量等原因,难以保证码垛作业顺利完成。视觉的引入可以使码垛机器人根据内装物的实际位置动态调整抓取点,实现码垛机器人对内装物的精确定位和智能抓取[5]。
码垛机器人视觉系统对摄像机视场中的内装物进行识别、定位,将其图像坐标系下的坐标值转换为机器人中机械手坐标系(自定义工作坐标系)下的坐标值反馈给码垛机器人运动控制系统,实现对内装物的抓取[6-7]。手眼标定是将图像坐标系与机械手坐标系关联起来的必要条件,标定的精度直接影响着码垛的成败。现有的手眼标定方法主要分为传统的手眼标定法和基于商用视觉库(如 Halcon、MatLab、VisionPro等)的标定法,前者是通过至少3次机器人的末端位姿变换,构建并求解AX=XB方程,对于方程AX=XB的求解,计算量特别大,最经典的是Tsai[8]提出的转站求解方法,但作者指出,该方法需要机器人移动比较大的角度,否则误差较大;后者虽集成了现成的标定算法(如“九点”标定法),但使用商业视觉库需要较高的开发成本,又因其不开源,故不利于产品的升级。OpenCV是一个基于BSD许可的开源视觉库、包含了数百种计算机视觉算法,通过调用内部函数可以省去大量的计算,又因其开源,故便于产品升级、节约开源成本。本文提出了一种简易的基于OpenCV的“两步”标定法。首先采用张正友标定法,以棋盘图像作为标定的参照物,实现了世界坐标系与图像坐标系之间的转换;然后在机械手坐标系上设定四个标记点(内装物所在平面)进行位姿估计,实现了世界坐标系与机械手坐标系之间的转换,从而推算出图像坐标系与机械手坐标系之间的变换关系以完成手眼标定。实验表明:该方法能满足码垛机器人对内装物的精确定位与抓取,在包装件内装物整理排序和工业装配线上具有一定的使用价值。
1 码垛机器人视觉系统
码垛机器人视觉系统主要由码垛机器人、摄像机、光源、以及运动控制器等组成,如图1所示。本文用于研究的包装件内装物是空调压缩机。首先视觉系统对空调压缩机进行粗定位与精定位,定位目的是为了使图像中心与空调压缩机大圆圆心(如图1b所示)重合,然后机器人末端移动固定的距离(手与眼的相对距离),使手爪中心与空调压缩机大圆圆心重合,执行抓取动作,最后通过校正空调压缩机的旋转角,将空调压缩机按规则地放置于托盘中。
在定位过程中,摄像机对视场中的空调压缩机进行抓拍,通过识别定位算法可求得空调压缩机大圆圆心的图像坐标值,但要反馈给码垛机器人运动控制系统的是机械手坐标系下的坐标值,而手眼标定可以实现图像坐标值与机械手坐标值之间的转换,故需要对码垛机器人视觉系统进行手眼标定。
2 手眼标定原理
在码垛机器人视觉系统中,机器人具有较大的工作范围,为了避免图像特征遮盖问题、提高图像精度,故将摄像机固联于机械手的末端[9-10]。如图2所示,摄像机标定能实现世界坐标系与图像坐标系之间的转换;“四点”位姿估计能实现世界坐标系与机械手坐标系之间的转换,从而推算出空调压缩机图像坐标系下的坐标值对应的机械手坐标系下的坐标值,故经过以上两步操作实现了码垛机器人视觉系统的手眼标定。
2.1 摄像机标定
摄像机标定的方法大致可分为传统摄像机标定法和摄像机自标定法[11-13]。OpenCV中采用的是一种介于传统标定法与自标定法之间的非线性模型摄像机标定法[14-15],该方法具有较高的灵活性与标定精度,适用于码垛机器人视觉系统[16]。
图3为摄像机成像模型,实现了世界坐标到图像坐标的转换。OwXwYwZw为世界坐标系,OcXcYcZc为摄像机坐标系,oxy为图像坐标系,O0u0v0为像素坐标系。
其数学模型表示为:
其中:fx、fy、u0、v0为摄像机内参数;rx、tx为外参数;S 为尺度因子。
OpenCV使用了张正友的针孔摄像机模型,引入了透镜的畸变[17]。引入透镜的径向畸变和切向畸变分别为:
其中:δx与 δy是非线性畸变值;k1、k2、k3为径向畸变;p1、p2为切向畸变。
OpenCV标定具体流程[18]为:首先读取采集到的棋盘图像,对棋盘图像提取角点,然后将能够成功提取到角点的棋盘图像进行亚像素化,获得角点的亚像素坐标值,最后通过摄像机的标定得到摄像机的内参数、畸变参数、投影误差以及各姿态下棋盘图像的外参数。
若空间坐标(X,Y,Z)为空调压缩机大圆圆心坐标,某姿态下的棋盘图像与空调压缩机所在平面共面,则该状态下棋盘的外参数即为空调压缩机世界坐标与图像坐标转换的外参数,通过式(1)可求得图像坐标(x,y,z)对应的世界坐标(X,Y,Z),从而完成了两步标定中的第一步——摄像机标定。
2.2 位姿估计
在三维空间中,可通过设定标记点来实现世界坐标系与机械手坐标系间的转换[18]。由于视觉定位是为了使空调压缩机大圆圆心与图像中心重合。当手爪没有达到这个位置时,视觉系统必须知道圆心相对于图像中心的位置,即机器人需要移动的距离[19]。
在机械手处于原点状态下,将标记点依次地置于机械手坐标系中,则实现的将是世界坐标系与机械手坐标系之间的转换。标记点摆放位置如图4所示。
点P1~P4为机械手坐标系中的标记点,通过图4a可获得P1~P4投影到摄像机的图像平面上的点p1~p4,如图4b所示。标记点 P1~P4与 p1~p4的变换由旋转向量(rvec)和平移向量(tvec)来定义,也称为欧式变换或刚性变换[19],具体形式为:
由于空调压缩机都放置于同一平面上,故令圆心坐标Z=0,一个平面到另一个平面的投影映射,又称两幅图像之间的单应性H,具体形式为:
其中:x、y为空调压缩机图像坐标值;X、Y为空调压缩机机械手坐标值。也即:也即机器人要移动的坐标值,从而实现了“两步”标定中的第二步——位姿估计。
3 实验测试与分析
3.1 摄像机标定实验
为了获得精确的摄像机畸变参数,本文以25 mm×25 mm的棋盘图像作为标定参照物。以不同角度随机地放置标定板,采集20张能够成功识别到角点的棋盘图像[20],以确保为完全求解这些图像在整个坐标系(相对于摄像机)的位置和摄像机内参数提供足够的信息,如图5所示。
通过OpenCV中cv::calibrateCamera()对以上棋盘图像进行标定,得到了摄像机的内参数与畸变数,如表1、2所示。
表1 摄像机内参数
表2 摄像机畸变参数
3.2 位姿估计实验
机器人处于原点的状态下,分别在机械手坐标系下设定标记点(0,0)、(150,0)、(150,150)、(0,150),其对应的图像坐标值分别为:(1 958,1 166)、(1 069,1 083)、(1 155,194)、(2 040,278),标定点设定方式如图4所示。将图像坐标值、机械手坐标值、摄像机内参数与畸变参数传递给cv::solvePnP()算法中可以得到旋转向量rvec和平移向量tvec,并通过罗德里格变换cv::Rodrigudes()可求得rvec与tvec所对应的旋转矩阵rmat及平移矩阵tmat。将标记点的世界坐标值、rvec和tvec传递给cv::projectPoints()进行重投影,把投影得到的图像标记点的二维坐标值与实际上的图像标记点的坐标值传递给cv::norm()求取投影误差,最后由std::sqrt()求得平均重投影误差为:0.727(像素),具体参数如表3所示。
表3 重投影误差
3.3 手眼标定测试实验
图6a为定位前的空调压缩机大圆圆心坐标x(1525.02,745.54),将其代入公式(9),求得机器人要移动坐标值为X(-32.24,33.54)。经过二次定位后空调压缩机大圆圆心几乎与图像中心重合如图6b所示,此时抓取误差dev为(-0.11,0.82),欧式误差err为0.83。对手眼标定的结果进行8次试验,具体参数如表4所示,都能成功地将空调压缩机进行抓取,并且其欧式误差都控制在±1 mm内。
表4 手眼标定实验结果
4 结语
本文提出了一种适用于码垛机器人的简易的手眼标定法——“两步”标定法,该方法充分利用了OpenCV中的视觉算法库,与传统的手眼标定法和基于商用视觉库的标定法相比,省去了大量的计算、节约开发成本以及便于产品的升级,而且只要通过简单的摄像机标定与标记点位姿估计,就能实现手眼标定。测试结果表明,该手眼标定法结合为空调压缩机识别、定位设计的视觉算法,能够达到±1 mm的码垛精度,适用于空调压缩机的码垛作业,在包装内装物整理排序和工业装配线上具有一定的使用价值。