机器视觉-旋转中心的标定

旋转中心的计算和使用

  • 1. 为什么要标定旋转中心
  • 2. 如何标定旋转中心
    • 2.1 标定旋转中心的操作步骤
    • 2.2 三点拟合圆心代码:
  • 3. 如何使用旋转中心计算偏移量

1. 为什么要标定旋转中心

  • 在机器视觉实际应用过程中,有这样的案例:机械手要抓取物料,物料每次的角度不一样,机械手的末端工具中心与其自身的旋转中心不重合,如果想完成这个抓取的工作,有两种解决方案:
  1. TCP标定(Tool Center Point)
  • 一般机械手都会有建立新工具坐标系的功能,比如EPSON。TCP标定的本质就是求旧的工具坐标系与新的工具坐标系的旋转平移矩阵。一般是定义新的工具编号,放一个参考点,多次旋转U轴(旋转轴)(4次),然后移动X,Y(base下)使新工具坐标末端对准参考点,
  • 对完之后点击示教就行了。以上使EPOSN的简单流程。
  1. 标定旋转中心和旋转半径
  • 如果机器人没有TCP标定的功能怎么办呢?其实这种概率比较低,因为市场上几乎所有的机器人都会有这种功能了,大部分是由于操作机器人的工程师业务不够熟练,所以就把这个任务交给机器视觉工程师了。
  • 还有另外一种情况,如果你使用的运动机构是运动控制卡控制的,这里我们讨论的是有旋转轴的机构,而且旋转轴上的工具末端中心又和旋转轴不重合,这时候就不得不标定旋转中心和旋转半径了。
  • 其实一般带有旋转轴的机构,我们都会标定旋转中心的,因为靠机械定位误差比较大,机器视觉工程师要对最终的精度负责,标定旋转中心是必要的,要不然我们要旋转轴干嘛呢?

2. 如何标定旋转中心

2.1 标定旋转中心的操作步骤

  • 如下图,在旋转轴工具上放置一个Mark点,旋转角度,获得三个点,三点拟合圆,获得圆心坐标和旋转半径(默认已经做完九点标定,这三个点转为世界坐标后再计算圆心坐标和旋转半径)。
    机器视觉-旋转中心的标定_第1张图片

2.2 三点拟合圆心代码:

通过下面的计算,我们能得到旋转中心和旋转半径。
机器视觉-旋转中心的标定_第2张图片

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 求圆心
{
     
    public partial class Form1 : Form
    {
     
        public Form1()
        {
     
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
     
            double[] xy = new double[3];
            xy = RotateCenter(double.Parse(txtX1.Text),double.Parse(txtY1.Text),double.Parse(txtX2.Text),double.Parse(txtY2.Text),double.Parse(txtX3.Text),double.Parse(txtY3.Text));
            txtxcen.Text = xy[0].ToString();//X
            txtycen.Text = xy[1].ToString();//Y
            txtrcen.Text = xy[2].ToString();//R

        }
        public double[] RotateCenter(double x1,double y1,double x2,double y2,double x3,double y3)
        {
     
            double a, b, c, d, e, f;
            a = 2 * (x2-x1);
            b = 2 * (y2-y1);
            c = x2 * x2 + y2 * y2 - x1 * x1 - y1 * y1;
            d = 2 * (x3 - x2);
            e = 2 * (y3 - y2);
            f = x3 * x3 + y3 * y3 - x2 * x2 - y2 * y2;
            double x = (b * f - e * c) / (b*d-e*a);
            double y = (d*c-a*f) / (b*d-e*a);
            double r = Math.Sqrt((x1 - x) * (x1 - x) + (y1 - x) * (y1 - x));
            double[] xyr = new double[3];
            xyr[0] = x;
            xyr[1] = y;
            xyr[2] = r;
            return xyr;
        }
    }
}

3. 如何使用旋转中心计算偏移量

这一步就是最重要的一步了,如何使用旋转中心和旋转半径来确定偏移量呢?
机器视觉-旋转中心的标定_第3张图片
机器视觉-旋转中心的标定_第4张图片

已知:旋转中心坐标和旋转半径R
〖R=l〗_OB 〖=l〗_OA

设:
在这里插入图片描述

因为
三角形BAC 和 三角形 OAD是相似三角形
所以
机器视觉-旋转中心的标定_第5张图片

求解上面方程:
机器视觉-旋转中心的标定_第6张图片
到这里我们就计算出来由于旋转轴旋转导致的X、Y方向的偏移,需要将这一部分加到前面的X/Y偏移中去,这样就可以同时旋转平移抓到有角度的物料了,贴合项目同样的也是这样的原理。

对我的文章感兴趣的小伙伴,可以关注我,我会一直更新这类的文章,和大家一起探讨学习。如果您觉得文章写的还不错的话,就帮我点个赞吧。

你可能感兴趣的:(机器视觉硬件)