一种利用旋转中心进行手眼标定的原理性介绍

首先,我们要了解一下常规的手眼标定流程是怎么样的。


(一)如果吸嘴中心就是法兰盘的中心则

是下面这样的:

  • 按九宫格走九个点,取得九组吸嘴的像素坐标与法兰盘的机械坐标

    image.png

                       (图1)

  • 进行标定


(二)如果吸嘴位置不在法兰盘中心

则标定流程要复杂些:

  • 人工创建工具坐标Tool 1,把工具坐标中心创建到标定片的Mark点上去

  • 按九宫格走九个点,取得九组特征点的像素坐标与对应的机械坐标

  • 进行标定

这里的难点是创建工具坐标的方法。

人工创建工具坐标,一般按工具向导来创建,需要第二个点同第一个点U轴差180度。对于结构紧凑的机器来说,你是不可能做到的。

即使能做到,这个过程是相当磨人的。

如果想不转180度创建工具坐标,则需要自己写算法,而不是使用工具向导来创建。



这里勇哥介绍一下同事用到的一种利用旋转中心进行标定的方法,它可以用以实现自动标定的需求。

注意:如果你得人工去创建工具坐标的话,就做不到自动标定了。

另外,自动标定是需要机器人里面写程序,IPC上写一段自动标定的程序与之配合才可以做到的。



第一步:

机器人吸嘴上放上标定片,走矩形四个位置。取得4组特征点B的像素坐标。

同时取得4组机械坐标,这个机械坐标是机器人U轴中心A的机械坐标。(这个过程简化了九点标定,只取4个点)

我们同时有了四组像素与机械坐标,用halcon算子vector_to_hom_mat2d进行标定。

此时标定的结果不是我们想要的,它只是把机器人法兰盘中心(U轴中心)的A点和特征点B标定在了一起。

因为机器人默认使用tool 0工具坐标系工作的,我们这样标定也就是把特征点和Tool 0工具坐标的中心(这个中心就是法兰盘的中心)标定在了一起。

这是我们的第一次标定,它标定出来的结果是存在一个固定偏差的这个偏差就是法兰盘中心(u轴中心)到特征的固定的距离偏差。

标定成功后,我们获得一个标定关系的矩阵homMat2D

image.png

                                                               (图2)

第二步:

接下来进行三点定圆心的操作。如下图所示,我们通过旋转机器人法兰盘(u轴中心)的中心旋转出三个位置。

通过三个特征点B,我们可以求出通过它们的一个圆,其圆心是法兰盘中心(u轴中心)在相机坐标系中的像素坐标。

现在我们求出的圆心只是像素坐标,通过第一步的标定关系矩阵homMat2D,利用halcon算子affine_trans_point_2d可以计算出这个圆心的机械坐标。

重要的地方来了! 这个圆心的机械坐标并不是法兰盘的中心坐标,而是拥有固定偏差值的一个坐标!


注:如果只看图3,你可能很疑惑,这3个角度明明是绕着U轴中心转动的呀,为什么说这个中心不是法兰盘U轴的中心呢?

注意,这个三点的中心只是在像素坐标系里面是U轴的中心!

但是,当你把这个像素转为机械坐标时,因为你原来第一次标定时的矩阵homMat2D,里面的信息就是法兰盘中心到特征点的关系,所以此时你把圆心像素坐标转为机器坐标时,你还是用的这个矩阵homMat2D在转换。因此你转化后的机械坐标不是U轴中心,而是法兰盘到特征点机械坐标的距离。

image.png

                                                                              (图3)

第三步

接下来进行第二次标定的过程。

有了第3步的Tool 0工具坐标中心的机械坐标,我们可以计算工具1和工具0的毫米偏差,并把最初标定时的Tool0下的四个特征点的机械坐标加上这个毫米偏差,使其变为Tool1下的坐标,Tool1的工具中心就是我们选取的特征点那个地方。

说人话: 法兰盘中心(u轴中心)机械坐标减去 用3点定圆那个圆心的机械坐标,求出固定偏差值。

                这个固定偏差就是法兰盘到特征点机械坐标的距离!


然后我们用这个偏差值更新一下第一次标定时的四组像素与机械坐标数据,重新标定即可。

这次更新的过程其实就是把Tool0下的四组机械坐标转化为Tool1下的四组机械坐标。

可能你会说,我们目前为止根本没有Tool1呀,这个没关系,本步骤不需要Tool1,第四步才会创建Tool1坐标。那个时候用得上三点圆心的机械坐标了。



第四步

最后利用三点定圆的圆心机械坐标,我们来创建Tool 1坐标系。要实现求出工具坐标x,y的过程可以在机器人端写程序,也可以用C#代码来实现,但是创建Tool 1坐标系这一步仍然还是需要在机器人端来执行。


最后我们就达到最终的目的:

创建工具坐标Tool 1,把工具坐标中心创建到标定片的Mark点上去,然后生成四组特征点的像素坐标与机械坐标。


大功告成!



image.png

(图1:  4个标定点,3个旋转点,1个测试点)


image.png

(图2: 第一次标定)


image.png

(图3:第二次标定)


下面是标定的输出信息,请参考:

CT1机械坐标:
mechanicalPosX=-22.585
mechanicalPosY=170.856

p1
{X = 1102.115 Y = 1110.051}
    IsEmpty: false
    X: 1102.115
    Y: 1110.051
p2
{X = 289.26 Y = 1175.885}
    IsEmpty: false
    X: 289.26
    Y: 1175.885
p3
{X = 1814.609 Y = 1332.285}
    IsEmpty: false
    X: 1814.609
    Y: 1332.285


圆心位置:
{X = 857.9301 Y = 3146.18433}

圆心转机械坐标:
row1AfterTrans={-14.4875695091889}
col1AfterTrans={88.6095108466213}

第一次标定后的矩阵:
homMat2D:
{[-0.040066467819754, -0.000775766400971161, 22.3672349752005, 0.000818720706487857, -0.0402510697036496, 214.656297497753]}



偏差:CT1机械坐标-圆心机械坐标
//double spanX = Convert.ToDouble(mechanicalPosX) - row1AfterTrans.D;
//double spanY = Convert.ToDouble(mechanicalPosY) - col1AfterTrans.D;
spanX=-8.0974304908110746
spanY=82.246489153378647


第二次标定后的矩阵:
homMat2D:
{[-0.040066467819754, -0.000775766400971159, 14.2299334255784, 0.000818720706487857, -0.0402510697036496, 296.790879463611]}




17:10:13   等待机器人前往标定点1......
17:10:28   模板位置:0, X:438.338, Y:560.191, U:0
17:10:29   机器人到达标定点1,当前像素坐标为:457.791;445.217机械坐标为:3.703;197.128

17:10:29   等待机器人前往标定点2.....
16:55:54   模板位置:0, X:414.878, Y:1742.642, U:-0.001
16:55:55   机器人到达2号点,当前像素坐标为:434.001;1627.619机械坐标为:3.704;149.502

16:55:55   等待机器人前往标定点3......
16:56:01   模板位置:0, X:1679.666, Y:1718.163, U:0.001
16:56:02   机器人到达标定点3,当前像素坐标为:1699.957;1602.742机械坐标为:-46.975;151.532

16:56:02   等待机器人前往标定点4......
16:56:05   模板位置:0, X:1700.915, Y:601.786, U:0
16:56:06   机器人到达标定点4,当前像素坐标为:1720.958;486.131机械坐标为:-46.975;196.502

16:56:06   开始Tool0下的标定......
16:56:06   Tool0下标定完成,开始创建工具坐标
16:56:06   等待机器人前往创建工具2号点......
16:56:09   模板位置:0, X:315.584, Y:1289.472, U:-0.397
16:56:10   机器人到达创建工具2号点,当前像素坐标为:289.26;1175.885
16:56:10   等待机器人前往创建工具3号点......
16:56:13   模板位置:0, X:1754.706, Y:1432.779, U:0.366
16:56:14   机器人到达创建工具3号点,当前像素坐标为:1814.609;1332.285
16:56:14   等待机器人前往创建工具1号点......
16:56:15   模板位置:0, X:1081.994, Y:1225.572, U:0.001
16:56:16   机器人到达标创建工具1号点,当前像素坐标为:1102.115;1110.051机械坐标为:-22.585;170.856

16:59:12   Tool0工具中心经标定关系转化后的坐标为:-14.4477;88.7214
17:06:10   机器人工具1创建完成
17:06:14   模板位置:0, X:1112.962, Y:916.192, U:-0.398
17:06:15   标定精度测试结果:X偏差:0.104mm,Y偏差:0.041mm
17:06:15   标定精度较差
17:06:15   自动标定完成

本次标定成功后,tool1结果为:

x,y,z,u

82.008, 9.569, 0, 0


这里勇哥想知道的是,怎么把tool1结果转换为tool0呢?


image.png   image.png

tool0

3.703,197.128  

tool1:

-4.377,279.296


显然并不是简单的把Tool0加上工具坐标这么简单。


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!



更多工业机器人的专题请参见本站的置顶帖子。

[置顶]工业机器人专题,持续更新

===========================================

机器人应用,编程


Epson机器人原点校准命令及方法(详细解释指令)

Epson机器人原点与左右手矫正说明

Epson机器人的x,y轴垂直性验证与解决办法



Epson机器人突然X轴与Y轴运动方向反了

Epson机器人的一些实操经验记录


[netMarketing类库] EpsonRobot类: Epson机器人远程控制模块

Epson机器人软件中的“机器人管理器”为灰色

Epson机器人远程控制指令测试


EPSON SCARA 4轴机器人原点校正方法



EPSON机械手:第1 关节、第2 关节、第3关节、第4 关节指的是哪里?

EPSON机械手的 jump:z(0), jump, go, move 几个指令的作用与区别

EPSON机械手 SPEL+语言指令集

EPSON TCP/IP 通信

Epson机械手简单实例编程

Epson工业机器人初体验-02

Epson工业机器人初体验-01


机器人视觉,标定校准


深入浅出地理解机器人手眼标定   

机器人视觉九点标定的过程解说

手眼标定之9点法

 Epson四轴机器人的手眼标定(原理并附上halcon代码)

机器人上下料视觉定位,标定的经验

工业现场相机坐标系和机械手坐标系的标定


EPSON机器人同第三方相机校准步骤   

Epson机器人同第三方相机校准方法   

EPSON简单视觉应用编程  

Epson机器人的重量与惯性设置   



Epson机器人标定后验证标定的精度(七) 

Epson机器人标定后验证标定的精度(六)

Epson机器人标定后验证标定的精度(五)

Epson机器人标定后验证标定的精度(四)

Epson机器人标定后验证标定的精度(三) 

Epson机器人标定后验证标定的精度(二)

Epson机器人标定后验证标定的精度(一)




机器人的坐标

Epson机器人自定义机械手工具坐标

EPSON机械手 工具坐标系的标定

机器人工具坐标系的创建(官方文档)

Epson机器人Local坐标的使用   

机器人坐标系的总结  

机器人工具坐标系的创建(官方文档)  



===========================================


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:
  •  访客
     发布于 2020-01-21 10:02:43  回复该评论
  • 这个,,,咱们标定的是旋转中心,而不是工具中心。博主是否可以给出“这个固定偏差就是法兰盘到特征点机械坐标的距离”这句话的证明??
    •  勇哥,很想停止
       发布于 2020-01-23 12:10:35  回复该评论
    • 本文的方法介绍的是不要手工创建工具坐标的标定办法。
      如果手工创建工具坐标,旋转中心也应该是在工具坐标上面呀。
  •  访客
     发布于 2020-05-11 22:28:00  回复该评论
  • 博主你好,新手请指教,这个方法把u轴A点和特征点B的关系是建立起来了,问题是机械手是用吸嘴点C去吸取产品的呀,C的坐标怎么去标定,谢谢指教。
    •  勇哥,很想停止
       发布于 2020-05-12 14:14:30  回复该评论
    • 这种方法就是把工具坐标的中心点创建到mark点B上去,再以这个工具坐标中心点做四点标定(也可做九点标定)。因为C点对于安装在上面的相机来说一般看不见,所以采用这个办法。
      另外,标定完成后,工作时机器人必须工作在工具坐标下面,而不能是tool0
      至于你说吸嘴点C吸取产品,而不是B点。
      在标定后定位的代码里,我会设置一个模板取料位置的参数,就是C点的取料模板。
      工具坐标中心标定,意味着机器人的旋转中心不再是基础坐标系
      •  p19851997321
         发布于 2023-02-22 01:00:42  回复该评论
      • 哥 那如果抓取时候吸盘的位置不是旋转标定时候的位置那固定偏差不就也变了吗
  •  Timmy
     发布于 2021-01-15 17:24:31  回复该评论
  • tool1结果x,y,z,u是这么算出来的,是在机器人程序里边计算的吗
  •  Timmy
     发布于 2021-01-15 17:25:09  回复该评论
  • tool1结果x,y,z,u是怎么算出来的,是在机器人程序里边计算的吗,可看下代码吗
  •  archmage
     发布于 2021-06-15 22:08:05  回复该评论
  • 勇哥,请教问题
    我是X,Y,R(旋转轴)+相机
    标定时无法用夹具中心做标定,我是想找一个工件安装在夹具上,然后相机拍工件的特征点
    1,工件装在夹具上走9点,求出矩阵(此时工件的实际尺寸未知)
    2,工件装在夹具上,固定圆心旋转3点,根据旋转3点求工件的X,Y方向的偏移(X1,Y1)
    3,第一步中的9点减去X1,Y1,得到去工件偏移的九点
    4,根据3中9点求矩阵得到标定值
    问题是:第2步的工件偏移X,Y如何求出还在琢磨,勇哥可以提供些思路吗

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864