手眼标定,9点标定过程及其运算

news2024/11/16 19:25:53

在工业领域常常会遇到将相机安装在机器手中,由相机快速引导机器手进行工作的方式。其中9点标定的作用是将图像的坐标转化为机器手的坐标。
9点标定的作用意义:
1.计算像素当量,通过9点标定后的计算,可以得出一个由像素值转化为机器手的移动值的一个变化量。当我们标定完后即可得到一个像素当量的固定值。
2.将图像坐标系转化为机器手的同向坐标系。
为什么叫做同向坐标系?
我们标定的时候,需要将图像坐标与对应的机器手的坐标进行一一对应。图像坐标系通常会默认左上角的视野临界点为图像的起始原点即为(0,0)【图像坐标系】。图像往东为X轴的正方向,图像往南为Y轴的正方向。当然我们的机器手由于各种问题往往所体现出来的坐标系是混乱不固定的,且实际的工作单位为机器手,我们相机需要为机器手进行引导,所以即使在机器手坐标系不一的情况下,可以使用9点标定实现将机器手坐标系与图像坐标系联系在一起并计算为坐标系同向的状态。
我们的标定步骤:
1.在安装好设备后开始进行手眼标定
2.确定工作计算的坐标系,在实际生产中视觉计算的坐标系往往是多样化的,根据实际情况进行选择工作坐标系,同时示教时也需要在工作坐标系下。我直接采取机器手的Base0坐标系。原因在于:Base0坐标系时机器手的固定坐标系,此坐标系的原点在机器人的底座上,坐标系的变化只与机器人的安装误差有关系。
3.将机器手移动至方案选定的拍照高度,随后调节相机的焦距,和将光圈调到最大,在相机控制软件调节相机曝光时长,使得物体在视野内清晰可见,同时干扰源尽可能的少。
4.以库卡机器人为例子。将机器人选择为全局坐标系下,即为Base0坐标系(底座坐标系)。移动机器手,使得相机的中心对准被检测物体(或者标定物体的中心),记录当前的机器人坐标X,Y,Z,A等其他数值。
5.设定机器手的移动距离,根据实际情况设置机器手的移动距离,通常将9个点均在画面当中,9个点相连接占用的面积约为视野范围的2/3即可。这里我以20mm作为偏移值。则将视野中心点设置为4号点,机器坐标为(0,0)。则对应的坐标为
在这里插入图片描述
例如0号点的机械坐标设定为(-20,-20),则我们在机器手中将X轴移动-20,Y轴移动-20,其他均不改变 。同理我们的其他坐标也是如此。
6.然后生成标定文件进行验证即可
参考Halcon程序

*已知A坐标系的9个点
Ax:=[-20,-20,-20,0,0,0,20,20,20]
Ay:=[-20,0,20,20,0,-20,-20,0,20]
 
*待识别的B坐标点,和上面的A坐标系点一一对应
Bx:=[]
By:=[]
dev_get_window (WindowHandle)
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('E:/762halcon/标定', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 01: Do something
    dev_display (Image)
    * 以下过程为在B坐标系找A中的9个点
    draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    reduce_domain (Image, Rectangle, ImageReduced)
    threshold (ImageReduced, Regions, 0, 211)   
    *找到了B坐标系的点(Row,Column)
    area_center (Regions, Area, Row, Column)
    Bx:=[Bx,Column]
    By:=[By,Row]
endfor
*得到目标变换矩阵HomMat2D
vector_to_hom_mat2d (Bx, By, Ax, Ay, HomMat2D)
 
*保存变换矩阵
serialize_hom_mat2d (HomMat2D, SerializedItemHandle)
open_file ('my_vector.mat', 'output_binary', FileHandle) 
fwrite_serialized_item (FileHandle, SerializedItemHandle) 
close_file (FileHandle)
 
stop ()
*读取变换矩阵,测试
open_file ('my_vector.mat', 'input_binary', FileHandle) 
fread_serialized_item (FileHandle, SerializedItemHandle) 
deserialize_hom_mat2d (SerializedItemHandle, HomMat2D_9p) 
close_file (FileHandle)
tx:=20
ty:=30
affine_trans_point_2d (HomMat2D_9p, tx, ty, Qx, Qy)

标定问题:

1.按照机器人移动的照片是斜的。
只要是根据机器人的坐标系移动,无论图像的连线是否是斜的都不影响精度。
2.标定结果有误差。
标定的坐标系问题,如果你在Base0下进行标定,结果出现误差是机器人安装错误,推荐重新正确的安装机器人底座;如果是在其他机器人坐标系下标定,结果出现误差是因为机器人的Z轴发生了变换,但是在当前坐标系下没有变化,实际在Base0下的Z轴开始变化了,可以将坐标系改为在Base0下进行标定。
3.为什么标定时4号点(视野中心)的机械坐标设置为0?
我们在计算的过程的时候,选择视野中的机械坐标为0的好处是,当我们进行示教时候,可以直接记录视野中心的点即为示教点,那么偏移量就可以直接将坐标映射后的坐标+示教的坐标即可得到基于当前坐标系的坐标了,方便计算。

参考的标定图片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/164520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

水平分表、分库和垂直分表、分库和公共表的代码实现和讲解

文章目录一、环境准备二、水平分表1.概念2.代码三、水平分库1.概念2.代码四、垂直分表1.概念2.代码五、垂直分库1.概念2.代码六、公共表1.概念2.代码一、环境准备 操作系统:Win10数据库:MySQL5.7JDK:64位 jdk1.8.0_202应用框架:s…

DOS和DDOS攻击和防御(ATTACK)

目录 一、DOS攻击和DDOS攻击的区别 第一、我们可以从他们两个的英文全称上来看初步的区别 第二、攻击方法不同 二、DOS和DDOS攻击的实现方式 1.DOS攻击 1、SYN Flood(是DOS和DDOS攻击方式之一) 2、UDP洪水攻击 3、Ping洪流攻击 4、teardrop攻击 5、Land攻击 6、Smurf攻击 7、Fr…

【 uniapp - 黑马优购 | 登录与支付 1】登录组件布局实现、用户信息布局与渲染

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:见文末 🕊️系列专栏:🖼…

设计模式-原型模式

设计模式-原型模式一 官方定义二 案例演示解决方案一 - 一般实现方式实现过程案例分析解决方案二使用场景实现过程一实现过程 二案例分析三 浅拷贝和深拷贝浅拷贝问题演示实现过程案例分析解决方案-----深拷贝实现方式一:重写clone()方法扩展思考一 官方定义 原型模…

在VMware 虚拟机(Win7)中还原真机Ghost备份的Win10系统

要求: 将真机Ghost备份的Win10系统还原到VMware安装的虚拟机(Win7)上 真机(物理机):win10pro_pure_20220709.GHO (备份的GHO文件);安装模式:Win10UEFIGPT 虚…

HashMap源码学习:红黑树原理详解

前言 JDK1.8后的HashMap引入了红黑树,在学习HashMap源码之前,了解了红黑树原理,及其如何通过代码进行实现后,在整体的看HashMap的源码就会简单很多。 概述 红黑树的特性 根节点必须是黑色节点。节点是红色或黑色。所有叶子都是…

Redis原理

Redis内部使用的是文件事件处理器file event handler,它是单线程的,所以Redis叫做单线程模型。它采用IO多路复用机制同时监听多个socket,将产生事件的socket压入内存队列中,事件分派器根据socket上的事件类型来选择对应的事件处理器进行处理。文件事件处理器包含4个部分:多…

【Java寒假打卡】Java基础-线程池

【Java寒假打卡】Java基础-线程池概述基本使用Executors创建指定上限的线程对象线程池-ThreadPoolExecutorvolatile概述 基本使用 package com.hfut.edu.test12;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class test1 {publ…

java+springboot笔记2023003

java的版本发布: 编译型语言是指使用专门的编译器,针对特定平台(操作系统) 将某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的…

Linux下更新curl版本

一、前景 由于低版本的curl存在一定的漏洞,会对我们的服务器安全造成问题,所以,我们需要将curl由低版本安装到高版本。 二、步骤 1、首先检测服务器安装的curl版本 curl --version 2、查看服务器安装的curl的安装包 rpm -qa curl 3、卸载…

基于springboot+mybatis+mysql+jsp房屋租赁管理系统(含论文)

基于springbootmybatismysqljsp房屋租赁管理系统&#xff08;含论文&#xff09;一、系统介绍二、所用技术三、功能展示三、其它系统四、获取源码一、系统介绍 包括管理员、房东、租客三种角色&#xff0c;外加游客(未登录情况) 出租类型包含整租和合租 权限 游客 < 租客 …

适合编程初学者的开源项目:小游戏2048(鸿蒙ArkTS版)

目标 为编程初学者打造入门学习项目&#xff0c;使用各种主流编程语言来实现。 2048游戏规则 一共16个单元格&#xff0c;初始时由2或者4构成。 1、手指向一个方向滑动&#xff0c;所有格子会向那个方向运动。 2、相同数字的两个格子&#xff0c;相遇时数字会相加。 3、每次…

用 JavaScript 写一个新年倒计时

目录前言&#xff1a;主题&#xff1a;运行结果&#xff1a;对应素材&#xff1a;代码实现思路&#xff1a;运行代码&#xff1a;春节的由来&#xff1a;总结&#xff1a;前言&#xff1a; 在春节即将到来&#xff0c;钟声即将响起&#xff0c;焰火即将燃起的日子里&#xff0c…

Kubernetes_CRD自定义资源

系列文章目录 文章目录系列文章目录前言一、CRD操作命令1.1 定义一种资源并查看1.2 使用刚刚定义的资源二、CRD效果演示2.1 实践&#xff1a;定义一种资源并查看2.2 实践&#xff1a;使用刚刚定义的资源总结前言 CRD就是自定义资源&#xff0c;就是自定义 apiVersionKind 参考…

TreeMap 原理实现及常用方法

TreeMap概述 红黑树回顾 TreeMap构造 put方法 get 方法 remove方法 遍历 总结 一. TreeMap概述 TreeMap存储K-V键值对&#xff0c;通过红黑树&#xff08;R-B tree&#xff09;实现&#xff1b; TreeMap继承了NavigableMap接口&#xff0c;NavigableMap接口继承了Sort…

蓝桥杯STM32G431RBT6学习——LED

蓝桥杯STM32G431RBT6学习——LED 前言 LED为每年必考考点&#xff0c;也是入门的基础&#xff0c;国信长天的开发板LED硬件如下&#xff1a; 经典的锁存器控制&#xff0c;因为LED所用引脚与LCD重叠&#xff0c;因此通过锁存器进行控制其状态。当74HC573的LE引脚&#xff08…

C语言综合练习5:快译通下

1 词典文件介绍 前面建立的词典&#xff0c;只有两个单词&#xff0c;现在我们要建立一个上万个单词的词典&#xff0c;所有单词及其翻译都在一个名为dict.txt的文件&#xff08;词典文件&#xff09;中 每个单词有两行&#xff0c;其中一行是单词原文&#xff0c;下一行是对…

Redis中的事务和乐观锁实现

redis事务相关命令&#xff1a; 开启事务&#xff1a;multi 关闭事务&#xff1a;discard 提交事务&#xff1a;exec 正常执行事务情况&#xff1a; 127.0.0.1:6379> multi OK 127.0.0.1:6379> set name zhangsan QUEUED 127.0.0.1:6379> set age 20 QUEUED 127.0.0.1…

AJAX这一篇就够啦~

AJAX这一篇就够啦~AJAX1、AJAX概述1.1 AJAX简介1.2 XML简介1.3 AJAX的特点2、HTTP相关2.1 HTTP概述2.2 请求报文2.3 响应报文2.4 常见的响应状态码2.5 不同类型的请求及其作用2.6 一般http请求 与 ajax请求3、原生AJAX的使用3.1 准备工作3.2 核心对象3.3 GET请求3.4 POST请求3.…

新岁序开,和Jina AI共同码梦! (奖品攻略大揭秘)

Jina AI 北京、深圳、柏林、湾区的小伙伴给您拜年啦&#xff01; Jina AI 开源社区致力于促进 多模态 AI 技术 的应用落地以及传播&#xff0c;一直以来&#xff0c;我们都为拥有这样一个全球化、多元化和高速发展的社区而感到自豪和感激&#xff01;正值新年之际&#xff0c;我…