这一次勇哥使用Epson机器人的标定来进行验证标定后的精度。
首先按下图做九点标定。注意对于Epson机器人自己的标定指令来说,它认下面的顺序,不要乱搞。
一般流程是:
(1)你打印一张九点标志的纸,尽量能铺满视野范围。
(2)在吸盘下装一个铅笔一样的针尖,去扎九个点的十字中心
经过上面的步骤,你就能获得九组像素坐标与机器人坐标。
但勇哥这台机器是背光的,这样搞不了。所以我只能先工具坐标标到标准片的Mark点上去,Mark点是可以在背光上拍出来。
这样我拍一次图,可以同时获得Mark点的像素坐标与对应的机器人坐标。
工具坐标的创建上几篇中有说明,这里就不赘述了。
把9组特征点的像素位置与对应的Robot的位置(就是Tool 1下的坐标),新增到机器人的点里面。
注意其点的名字可以是任意,不重复即可。我们只需要X,Y的坐标。
接下来就可以使用指令VxCalib来进行标定。
机器人中敲入如下代码:
Function cal1() LoadPoints "robot1.pts" 'VxCalib 0,2,p(35:43),p(44,52) VxCalib 0, 2, P(35:43), P(44:52) If VxCalInfo(0, 1) = True Then Print "向下固定相机校准成功,结果如下:" Print " X方向的平均偏差[mm]:", VxCalInfo(0, 2) Print " X方向的最大偏差[mm]:", VxCalInfo(0, 3) Print " X方向每像素的长度 ( mm ):", VxCalInfo(0, 4) Print " X方向的傾角 ( deg ):", VxCalInfo(0, 5) Print " Y方向的平均偏差[mm]:", VxCalInfo(0, 6) Print " Y方向的最大偏差[mm]:", VxCalInfo(0, 7) Print " Y方向每像素的长度 ( mm ):", VxCalInfo(0, 8) Print " Y方向的傾角 ( deg ):", VxCalInfo(0, 9) Else Print "向下相机校准失败,请重新示教点校准相机!" EndIf VxCalSave "1.caa" Fend
标定指令VxCalib执行前,要先载入点文件,这里是robot1.pts。
这个指令的第一个参数是类似标定的句柄,后面的指令如VxTrans都要用到这个句柄。
第二个参数是表示视觉相机的安装方式:
1: Standalone 独立安装(相机坐标与机械手坐标不需要相互转换)
2: Fixed downward 固定安装的相机(固定向下)
3: Fixed upward 固定安装的相机( 固定向上)
4: Mobile on Joint #2 移动安装的相机( 安装在关节2)
5: Mobile on Joint #4
6: Mobile on Joint #5
7: Mobile on Joint #6
VxCalib指令的第三,四个参数分别为像素坐标与机械人坐标,必须使用连续的点位进行保存。
运行函数cal1,标定成功,结果如下:
机器人标定完成后,我们来测试一下标定后的精度。
我没在屏幕上任选一个点,这里勇哥选择:700,580
机器人里写如下程序,执行它。
Function cal2() P55 = VxTrans(0, P53) Print P55 Fend
VxTrans是把像素按标定结果转为机器坐标。
结果是:-8.200,288.799
关于这个指令说个题外话:你可能会发现在代码编辑器里敲这个指令没有语法提示,是不是很恼火?
其实是因为你必须输入”变量=“再敲指令,就发现有语法提示了。
在机器人里面增加一个-8.200,288.799的点,走过去。
然后视觉拍照,取特征点的像素坐标。
在下面的图中,绿色的十字为特征点的像素位置,红色十字为特征点的像素位置。
下图中你只看到了红色十字,证明绝色十字几乎与绿色十字完全重合。
目标点位置(像素):x= 700,y= 580
实际位置(像素):x= 697.982, y=579.289
x偏差2个像素
y偏差1个像素
对比第四篇的结果:
我们对比移动到后的像素坐标: 目标为: 685, 451 实际为: 690.251, 458.546 row差5.2个像素 column差 7.5个像素
相比之下,机器人自己的标定功能,其精度高得让人惊讶!
但是epson的VxCalib和VxTrans也有不方便之处。
如VxTrans它要求把像素坐标放到一个点中作为参数再调用它。取得的结果需要回写到另一个点中,然后才能读取。
过程繁索,你得在机器人中专门为此写一个function,然后外部调用。
如果机器人为上位机调用,就方便这样搞。如果机器人是plc控制,就麻烦了,那就变成上位机只给像素坐标plc,plc再去调用这个Function,
而plc一般是通过远程命令的方便调用机器人,执行一个Function不太方便。(有办法,但也是麻烦)
下一篇勇哥把机器人交给上位机来控制,来应用VxCalib, VxTran完整的流程。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

