固定上相机的,先拍后取的方式是比较常见于拉带入料的设备。
它的特点是:
(1) 眼在手外
(2) 通常都是上相机方式拍图
(3) 它是一种先拍再取的方式
(4) 它常用于物料取放,一般是用于定位取料位置(x,y,u),而放置的时候可以走一个固定求教点
勇哥的实验环境如下图:
(一)我们先来做工具坐标。
使用epson的向导程序来创建工具坐标。
第一个点位置如下,红色十字位置就是ncc模板的中心,绿色十字是我们记录下来红色十字的位置后,固定绘制的十字。
注意现在因为它们是重合的,你看不到红色十字。
第二个点要旋转一定角度,最佳为180度,最好不少于90度。
这时候你移动x,y把红色点(ncc模板的中心位置)对到绿色十字上面去。
工具坐标创建完毕。
接下来测试效果。
方法是切换到tool1,然后U轴旋转,这时候它会沿着工具坐标中心(也就是那个红点)旋转。
如果你发旋转U轴时红色点偏移固定点绿色十字太多像素,则工具坐标没有做好,必须要重做。
不准的原因可能有两个:
机械手的问题
你的模板中心不稳定
(二) 在tool1做九点标定
我们简化一下,不做九点,只做四点,要求不高或者实验的情况下,是可以这样的。
先切换到tool1下面,然后如上图所示走四个机械点。
记下四组点的像素坐标与机构坐标:
px, py mx, my
pt1 213.367 301.817 117.310 241.566
pt2 2297.18 275.861 168.192 241.566
pt3 2312.32 1582.04 168.189 273.471
pt4 225.88 1608.23 117.311 273.471
仔细看下上面的数据,px,py是像素坐标,mx,my是机械坐标
既然红色框中的机械坐标一样的值,那为啥子对应的像素坐标不相等呢?
这种现象很常见,但是你想过这是为什么没呢?
勇哥想到的有两点:
你抓取的物料的长宽不是完全与相机视野的长宽是平行关系
机器人本身不能走完全水平或者垂直的直线(关于这一点你不相信的话,可以试试让机器人走水平垂直两条路径,计算一下角度,绝对不可能刚好90度的)
下面九点标定:
px:=[213.367,2297.18,2312.32,225.88] py:=[301.817,275.861,1582.04,1608.23] mx:=[117.310,168.192,168.189,117.311] my:=[241.566,241.566,273.471,273.471] vector_to_hom_mat2d(px, py, mx, my, HomMat2D) affine_trans_point_2d(HomMat2D, 213.367, 301.817, Qx, Qy) *Qx=117.327 Qy=41.565
上面的程序即标定出了像素坐标到机械坐标的关系矩阵HomMat2D,同时也代入了一组像素坐标验算了一下,求出来的机械坐标Qx,Qy与机械人点位表中的值是非常接近的。
接下来在屏幕上任意位置指一个点,通过affine_trans_point_2d算子算出机械坐标,走过去验证对不对。
这一步验证比较简单,各位请自便。
重头戏其实在下面。
(三) 取放料测试
如下图:
勇哥想把A物料的位置定义为模板位置。我们把它的右下角做为对位基准。
B物料代表着随机流入拉带上的、姿态随机的物料。
那么机器人的吸盘就必须调整好x,y,u让A物料的右下角与物料B的右下角完全对齐,这样就OK了。
未完待续…………
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

