固定相机先拍后取料,标定后对位方式一(含原理与代码)

所谓标定后的对位方式,指的是应用标定的结果进行实践取放料的方法。

标定只是负责准确的把视觉坐标系中的每个点正确的映射到机器人坐标系中的对应的唯一坐标上去。

而标定后的对位则是负责准确取放过程的实现方法。


本文讨论的的标定后对位方法一,适合固定位拍照的视觉系统。它的动作方式是:

  • 机器人走避让位,CCD拍照

  • 视觉求出机器人的修正坐标,机器人修正姿式

  • 机器人取料,在放料位走一个固定的示教点进行放料

在这个过程中,CCD只要取料位置固定拍照,在放料位置没有CCD。

这种方式,最常见的应用是拉带取料并放料到机器的工作位上。



这种方式的基本原理是用当前来料位置与注册模板位置进行对比,最后计算并修正机器人的位置以达到与注册模板位置一致。


这种方式的原理勇哥之前写过一个贴子《固定相机拍照,机器人定位取料的原理解释 》。

这个贴子有点啰嗦并且没完全说清楚,这里我以最简练的语言与配图再说明一下,并在后面给出C#的实现代码。


image.png

image.png


从上到下参看上面的图。


由于我们谈的是标定后的对位原理,因此在下文中,我们所有的像素坐标都可以转换出对应的机械坐标。


图1是模板状态信息。

其中包含两个我们必须知道的信息:

(1)特征点B1的机械坐标

特征点B1是视觉取得的特征点(由指定的两个边构成的交点),并把像素的x,y的信息转为机械坐标。

另外特征点也包括角度信息u,这个角度是由指定的一条边计算出来的。

(2)模板取料位置的机械坐标

在模板位置上机器人的状态信息,你可以理解为此时机器人法兰盘(U轴中心)的x,y,u的状态。

这个信息本身就是由机器人坐标信息。


图2是实际的产品信息。

这张图中的产品是以任意角度位置出现的,机器人走到了模板取料位置上。


图3是机器人先进行旋转。

我们要先旋转机器人,让它的角度与模板中的角度重合。

在代码层面上的实现方式是:

(1)我们用当前产品的特征点的角度(已经转为机械坐标)减去模版特征点的角度,求出一个偏差值。

(2)最后求出机器人校准位置的角度u为:模版取料位置的角度加上第(1)步的偏差值。


图4是机器人进行x,y的位置调整。

旋转后,我们再进行x,y方向上进行调整。
最终我们让当前机器人的取料位置完全与模板取料位置完全重合。
(注意看上面四张图中的十字红线,它代表了第一张图中的模板取料位置。)

在代码层面上实现的方式是:
(1)把模版特征点以模版取料位置(其实就是法兰盘中心)为旋转中心旋转图3步骤时取得的角度,这样我们获得了旋转后的模版特征点的x,y。
(2)然后用当前产品特征点的x,y(已转为机械坐标)减去第(1)步取得的x,y。这些我们求得了一个偏移量。
(3)最后求出机器人校准后位置的x,y为: 模版取料位置加上第(2)求得的偏移量。


通过以上四步达成的效果是:无论来料是如何改变位置与角度,我们的机器人爪子都能在来料相同的位置取料。


C#的实现代码:


//首先旋转使角度重合
//计算机器人要转的角度A
double templateOffsetU = 转机械坐标后的当前产品特征点.U - 模版特征点.U;
double robotPosAfterRotateU = 模版取料位置.U + templateOffsetU;

//模板特征点绕着模版取料位置旋转角度A,求出旋转后的模版特征点的x,y
PosXYU templateFeaturePosAfterRotate = Rotate_At(模版特征点, 模版取料位置, templateOffsetU);

//计算当前产品特征点和旋转后的模版特征点的偏移量
double templateOffsetX = 转机械坐标后的当前产品特征点.X - templateFeaturePosAfterRotate.X;
double templateOffsetY = 转机械坐标后的当前产品特征点.Y - templateFeaturePosAfterRotate.Y;

//取得答案
校准后的机器人位置.X = 模版取料位置.X + templateOffsetX;
校准后的机器人位置.Y = 模版取料位置.Y + templateOffsetY;
校准后的机器人位置.U = robotPosAfterRotateU;


总结:

这种标定后的对位方式有一个优点,即当机器人U轴有多个吸嘴时,不需要对每个吸嘴单独做一个工具坐标,我们只需要做一个工具坐标即可。

每个吸嘴只需要有一个模版取料位置即可。



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

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!




本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
  • 评论列表:
  •  Ancho
     发布于 2020-04-27 13:35:58  回复该评论
  • 如果图3机器人旋转就是以点A为圆心,如果在最开始放大机械臂末端到吸嘴中心的距离,即点A到点C的距离,同样会放大机器人旋转后吸嘴偏离的距离,这样还要用B2-B1的距离就会有问题。
    •  访客
       发布于 2020-04-27 15:54:30  回复该评论
    • //首先旋转使角度重合
      //计算机器人要转的角度A
      double templateOffsetU = 转机械坐标后的当前产品特征点.U - 模版特征点.U;
      double robotPosAfterRotateU = 模版取料位置.U + templateOffsetU;
      PosXYU templateFeaturePosAfterRotate = Rotate_At(A, C, templateOffsetU);
      //取得答案
      校准后的机器人位置.X = templateFeaturePosAfterRotate.X;
      校准后的机器人位置.Y = templateFeaturePosAfterRotate.Y;
      校准后的机器人位置.U = robotPosAfterRotateU;

发表评论:

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

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 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