旋转中心的计算和使用

  • 1. 为什么要标定旋转中心
  • 2. 如何标定旋转中心
    • 2.1 标定旋转中心的操作步骤
    • 2.2 三点拟合圆心代码:
  • 3. halcon多点拟合圆的方法
  • 4. 如何使用旋转中心计算偏移量
  • 5. 计算一点绕另一点旋转一定角度后新点的坐标

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

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

2. 如何标定旋转中心

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

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

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();//Xtxtycen.Text = xy[1].ToString();//Ytxtrcen.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. halcon多点拟合圆的方法

如果你使用的算法库是halcon,那么我将给您提供一个更方便的多点拟合圆的方法:

  • 博客链接:https://blog.csdn.net/weixin_38566632/article/details/118580370?spm=1001.2014.3001.5501
  • 这种方法更灵活,您可以自由增加点数而不受限制。

    halcon代码:
Row := [0,100.5,100,3]
Col := [4,0,100,99.4]gen_contour_polygon_xld (Contour, Row, Col)
fit_circle_contour_xld (Contour, 'geotukey', -1, 0, 0, 3, 2, Row_C, Column_C, Radius_C, StartPhi_C, EndPhi_C, PointOrder_C)dev_set_color ('blue')
gen_circle_contour_xld (ContCircle, Row_C, Column_C, Radius_C, 0, 4 * acos(0), 'positive', 1)

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

这一步就是最重要的一步了,如何使用旋转中心和旋转半径来确定偏移量呢?

已知:旋转中心坐标和旋转半径R

设:

因为
三角形BAC 和 三角形 OAD是相似三角形
所以

求解上面方程:

5. 计算一点绕另一点旋转一定角度后新点的坐标

  • 第4节主要是为了讲清楚这个推导过程,接下来我们直接给出代码:
  • 博客链接:https://blog.csdn.net/weixin_38566632/article/details/118580534?spm=1001.2014.3001.5501
using System;namespace RotatePoint
{class Program{static void Main(string[] args){double X = 0;double Y = 0;//顺时针角度为负数RotateAngle(1, 1, -45, 2, 2, ref X, ref Y);Console.WriteLine(X+","+Y);Console.ReadKey();}public static string RotateAngle(double XRotation, double YRotation, double ARotate, double XBefore, double YBefore, ref double XAfter, ref double YAfter){try{double Rad = 0;Rad = ARotate * Math.Acos(-1) / 180;XAfter = (XBefore - XRotation) * Math.Cos(Rad) - (YBefore - YRotation) * Math.Sin(Rad) + XRotation;YAfter = (YBefore - YRotation) * Math.Cos(Rad) + (XBefore - XRotation) * Math.Sin(Rad) + YRotation;return "OK";}catch (Exception ex){return ex.Message;}}}
}
  • 标定旋转中心的目的就是,计算旋转一定角度后新点的坐标;

X,Y和角度纠偏的步骤:

  • X,Y和角度的偏差,在机械动作上是同时进行纠偏的,但是在算法中却不是,我们往往是先转正角度,然后算出转正角度后新位置的坐标;
  • 此时新位置和模板角度是相同的,只需要平移就能重合,这个平移量就是9点标定时算出并保存的仿射变换矩阵来计算的了。

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

机器视觉——旋转中心的标定相关推荐

  1. 机器视觉的相机标定到底是什么?

    转载:https://www.zhihu.com/question/29448299 之前做识别算法现在开始学习标定.用matlab. 刚开始看标定,先从单个相机开始看.标定板为何需要在不同角度拍20 ...

  2. 相机计算坐标公式_机器视觉系统坐标标定与计算方法

    介绍了摄像机标定的概念和重要性 , 并介绍了摄像机传统的标定方法 . 自标定方法 . 线性标定方法和非线性标定方法 , 结合 ZF D - 900 TFT - LCD 玻璃自动分断机为例具体讲解了坐标 ...

  3. 机器视觉--使用halcon标定助手进行相机标定

    一.点击选项卡:---助手--创建新的calibration,可以设置自己的摄相机参数. 二.选择描述文件,cpd文件,就是选择你所需要的标定板的尺寸样式. 如果没有你想使用的标定板,可以通过生成标定 ...

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

    首先,我们要了解一下常规的手眼标定流程是怎么样的. (一)如果吸嘴中心就是法兰盘的中心则 是下面这样的:按九宫格走九个点,取得九组吸嘴的像素坐标与法兰盘的机械坐标 (图1) 进行标定 (二)如果吸嘴位 ...

  5. 机器视觉标定(calibration)关键尝试(标定的重要意义度量衡)(A)

    learning opencv开篇便谈视觉病态畸变的问题,我们人类世界的进步和度量衡有莫大的关系,而工业自动化以及人工智能(AI)的度量衡又是什么呢?那就是标定,其意义是非凡的,也可以说是伟大的,人工 ...

  6. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

  7. 我的Qt作品(14)基于机器视觉+运动控制的LED数码管套板机软件(双相机贴合)

    开发环境 Windows7/10 x64,VS2019,Qt5.12.11 x64,OpenCV4.5.5 x64 LED数码管贴合软件的总体目标: 是控制自动化设备,把LED线路板精准得贴合(套入) ...

  8. matlab单目相机标定步骤,matlab相机标定

    本文是一篇关于相机标定意义和原理的个人总结,包含了 OpenCV 和 Matlab 中常用的相机 标定函数的注解. 相机标定是机器视觉的基础, 标定结果的好坏直接决定了机器...... 图片数量一定程 ...

  9. 机器视觉运动控制一体机应用例程|轮廓在线提取与轮廓轨迹加工(下)

    应用背景 在实际的机器视觉应用项目中,常常需要提取在相机视野下不同形状的样品,根据样品的轮廓轨迹位置进行轮廓轨迹加工处理. 上期课程中我们讲述了轮廓在线提取与轮廓轨迹加工中视觉的轮廓提取部分.本期课程 ...

最新文章

  1. cxf生成客户端代码
  2. MySQL从入门到精通50讲(十一)-MySQL正则表达式及事务
  3. 专访驭势科技吴甘沙:无人驾驶硝烟弥漫,“创造”才有未来|封面人物
  4. 深度学习(14)TensorFlow高阶操作三: 张量排序
  5. BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
  6. 这河里吗?Go 里边空指针还能调用对象方法!
  7. IBM启用水冷却技术为IDC服务器降温
  8. 阶段3 1.Mybatis_09.Mybatis的多表操作_4 完成account一对一操作-建立实体类关系的方式...
  9. 前端工程师最常用的字体图标库
  10. cad计算机绘图入门,【菜鸟宝典】AutoCAD制图入门教学!
  11. excel随机抽取一个数据,抽奖
  12. 微信小程序怎么开通店铺呢?
  13. 移动硬盘格式化了的数据找回方法
  14. Apache doris 使用过程中常见问题汇总
  15. 690家门店送万份小食 汉堡王“战舰世界堡胃战”活动开启
  16. Mac版3D动画建模渲染工具C4D R26
  17. stm32: 串口空闲中断的实现(HAL库)
  18. CAD多段线无法合并的问题
  19. 嵌入式物联网项目实践1.1
  20. 经验模态分解python_信号处理 - 经验模态分解 【1】

热门文章

  1. java连连看解说_java—连连看-实现消除
  2. js中break关键字的用法。
  3. 白盒测试方法-静态结构分析法
  4. [教程]西秦的ACE-JAVA教程一、JAVA MAVEN环境搭建
  5. be yet to用法
  6. oracle为表空间增加数据文件,创建Oracle表空间,增加数据文件的步骤
  7. 智能手机上的常用传感器
  8. 【C语言程序设计】从键盘上输入某年某月(包括闰年),编程输出该年的该月拥有的天数。
  9. PB函数大全(超全,解析很全面)
  10. vert.x最新官网书籍下载