zoukankan      html  css  js  c++  java
  • OpenCV 机器人手眼标定(九点标定法)

      对于初学者而言,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系又是如何建立?
      我们通常是利用张氏标定法,针对于相机的畸变进行标定,利用校正得到的参数对图形进行处理后再呈现出来。这个方法网上用的人很多,资料也较为全面。这里就不做说明了。本文主要是针对机械手的手眼标定,一般而言目前相机的畸变较小,精度也较为准确,使用该方法进行标定也能得到较好的效果。
      首先,对于九点标定而言。我们使用到的是OpenCv中的estimateRigidTransform 函数。
    函数定义如下:

    Mat estimateRigidTransform(InputArraysrc,InputArraydst,boolfullAffine)

    前两个参数,可以是 :src=srcImage (变换之前的图片Mat) dst=transImage(变换之后的图片Mat)
    也可以: src=array(变换之前的关键点Array) dst=array(变换之后的关键点Array)
    第三个参数: 1(全仿射变换,包括:rotation, translation, scaling,shearing,reflection)

    其主要原理为:如果我们有一个点变换之前是[x,y,1],变换后是[x’,y’,1] 则fullAffine表示如下:

     TX=Y

    展开后表示

     如果我们想求这【a-f】 6个变量需要有6个方程,也就是3组点。但是比三个点多呢?
    比如:20个点。那就是用最小方差。

     标定步骤
    1、首先我们需要准备一块,标定板。如果条件不足,可以使用白纸画上九个圆进行代替。

    2、相机位置,机械手位置全部固定好,标定针固定在机械手上,固定好后不能够再移动。标定针的位置一定要与夹手或吸盘之内的工具同一位置高度。
    3、将标定板放到相机下方,位置区域要与机械手工作的区域一样,包括高度必须尽量一致,这是标定准确度的关键。
    4、调整好相机焦距,拍照,然后识别9个圆圆心的坐标并进行记录。关于如何找圆,可以参考我的上一篇博文,对于圆形的查找十分精准。
    5、将机械手依次移动到9个圆的圆心位置,记下机械手坐标

    做完以上五步,我们会得到两个点集。一个为9个圆圆心坐标(points_camera),一个为9个圆心对应的机械手坐标(points_robot)。

     1     Mat warpMat;
     2     vector<Point2f>points_camera;
     3     vector<Point2f>points_robot;`
     4     vector<Point2f>points_camera;
     5     vector<Point2f>points_robot;
     6     warpMat =estimateRigidTransform(points_camera, points_robot, true);
     7      A = warpMat.ptr<double>(0)[0];
     8      B = warpMat.ptr<double>(0)[1];
     9      C = warpMat.ptr<double>(0)[2];
    10      D = warpMat.ptr<double>(1)[0];
    11      E = warpMat.ptr<double>(1)[1];
    12      F = warpMat.ptr<double>(1)[2];

    得出来的6个double类型的参数,就是我们此次标定最终得到的标定参数了。
    之后我们把检测得到的图像坐标(t_px,t_py)代入,就可以得到与之相对应的机械手坐标(t_rx,t_ry)
    t_rx= (A * t_px) + B * t_py + C);
    t_ry= (D * t_px) + E * t_py+ F);
    至此标定结束,我们可以控制相机拍照进行定位,然后转换成机械手坐标,指哪打哪了。

  • 相关阅读:
    简单理解同步与异步
    Python3.x 安装Scrapy框架
    Python命名规范
    python 02/100例
    raw_input与input的区别
    二叉排序树
    串和广义表
    数据结构整理 第一章
    时间复杂度
    Music
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/15048754.html
Copyright © 2011-2022 走看看