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

这篇具有很好参考价值的文章主要介绍了机器视觉——旋转中心的标定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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();//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. 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点标定时算出并保存的仿射变换矩阵来计算的了。

对我的文章感兴趣的小伙伴,可以关注我,我会一直更新这类的文章,和大家一起探讨学习。如果您觉得文章写的还不错的话,就帮我点个赞吧。文章来源地址https://www.toymoban.com/news/detail-400298.html

到了这里,关于机器视觉——旋转中心的标定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 游戏引擎中为什么要用四元数表示旋转而不用欧拉角旋转?

    个人观点,仅供参考,如有错误可太刺激了 四元数的简单概念和使用 欧拉角通常用于表示一个物体的 旋转状态 ,而不是表示 旋转过程 。 欧拉角描述的是物体相对于某个参考坐标系的朝向或旋转状态,通常以不同的轴(例如,绕X轴、Y轴和Z轴)的旋转角度来表示。这可以让

    2024年02月06日
    浏览(58)
  • 为什么我们需要去中心化存储?

    为什么我们需要去中心化存储? 我们的社会正处于前所未有的信息大爆炸时代,未来将是数据成为主要生产要素的数字时代,而 Web3 也不外乎于此,作为数据解决方案——去中心化存储,不仅是区块链技术的三大支柱(计算、存储、网络)之一,也是 Web3 领域最早出现也最受

    2024年02月02日
    浏览(90)
  • Minima:为什么 Web3 需要完全去中心化

    我们邀请了来自Minima的Jonathan MacDonald关于 Web3 的话题来谈论 Web 3,他建议只有在 完全 去中心化的情况下才有可能,而加密世界还没有 – 还没有! 他在下面更详细地解释: 2021  Wired 对 Gavin Wood 的采访(他在 2014 年创造了“Web3”一词)明确区分了“Web 1.0”(包含开放、去中

    2024年01月21日
    浏览(58)
  • 视觉化洞察:为什么我们需要数据可视化?

    为什么我们需要数据可视化?这个问题在信息时代变得愈发重要。数据,如今已成为生活的一部分,我们每天都在产生大量的数据,从社交媒体到购物记录,从健康数据到工作表现,数据无处不在。然而,数据本身通常是冷冰冰的数字,对于大多数人而言,理解和分析这些数

    2024年02月10日
    浏览(53)
  • 为什么易语言程序被360和windows安全中心认作是病毒?

    首先,我们要注意千万不要下载360,毕竟它捆绑的软件太多。但,安全中心也不可以删除,毕竟他也很重要嘛~ 那为什么易语言程序会被各大杀毒软件公认为病毒呢?首先,易语言程序采用静态编译,而大多数病毒也通过静态编译保存。其次,各大杀毒软件为图省事,直接将

    2024年02月12日
    浏览(136)
  • 机器学习中为什么需要梯度下降

            在机器学习中,梯度下降是一种常用的优化算法,用于寻找损失函数的最小值。我们可以用一个简单的爬山场景来类比梯度下降的过程。         假设你被困在山上,需要找到一条通往山下的路。由于你是第一次来到这座山,对地形不熟悉,你只能通过尝试和

    2024年02月19日
    浏览(53)
  • 为什么聊天机器人界面不是未来

    ​ 比如: 0 按时上下班,用固定时间长度获取价值 1 创业,用非线性时间,获取真实价值 0-1 之间有无限多种状态 shadow ChatBot目前的交互界面有非常多值得被改进的体验机会。最近看到一篇非常有启发性的文章,分享给大家。 核心观点来自于文章: https://wattenberger.com/though

    2024年02月03日
    浏览(52)
  • 为什么需要多语言并行机器翻译?

    随着全球化的加速和不同语言之间的交流需求不断增长,多语言机器翻译(Multilingual Parallel Machine Translation)成为一个备受关注的领域。传统上,机器翻译系统主要集中于一对特定语言之间的翻译,但这种单一语言对的模式在面对多语言环境时存在一些挑战。因此,多语言并

    2024年02月12日
    浏览(51)
  • 区块链的去中心化账本有和意义?为什么要哈希运算?如何保证数据不可篡改?

    1、中心化账本是什么? 在互联网的世界里,价值是用数字来呈现的。而数字文件是可以无限复制的,在互联网的世界数字具有易错、易改、易拷贝的特性,但是价值是不能复制的。为了解决这一难题发展为由一个中心化的机构(支付宝/微信支付/银联等)负责记账和记录账户余

    2023年04月23日
    浏览(57)
  • 【Unity细节】为什么UI移动了锚点,中心点和位置,运行的时候还是不在设置的位置当中

    👨‍💻个人主页 :@元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏 :unity细节和bug 😶‍🌫️优质专栏 ⭐【软件设计师高频考点暴击】 此时我已经将锚点设置为左上角,但是运行时它不在左上角,而是在中间 它的父对象不

    2024年02月05日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包