2D/3D相机手眼标定总结

news2025/1/24 17:38:02

1. 九点标定

在这里插入图片描述

九点标定法的本质: 无需进行相机内参标定,只能识别x,y坐标,属于2D平面标定,在标定过程中z是未知的
该算法的核心是仿射变换,即图像坐标系机器人坐标系2D仿射变换(注意这里并不是RT的刚体变换)。

由上篇文章射影变换的一种解法,可知仿射变换的基本公式:
在这里插入图片描述
有6个自由度,至少需要3组点才能解决,超过3组点,可以用非线性最小二乘优化。
无论是眼在手上,还是眼在手外,标定的步骤都是一样的:

  1. 相机拍摄一幅9点的图片,眼在手外时相机固定好直接拍摄,眼在手上时,控制机械手移动的固定位置(9点标定板正上方)进行拍摄;
  2. 求出标定点在图像坐标系的坐标 ( u , v ) (u,v) (u,v)
  3. 控制机械手,分别移动到9个点上,记录9个点的坐标 ( x , y ) (x,y) (x,y)
  4. 进行求解,halcon中使用vector_to_hom_mat2d算子,opencv可使用estimateRigidTransform接口。

求解后,就可以根据给出的像素点,得到机械手的点坐标,进而可以控制机械手去相应的位置了。

2. 2D传统手眼标定

2.1 原理

如下图所示,图(a)是眼在手上,图(b)是眼在手外。(图片来自《机器视觉算法及应用》)

  • 眼在手上,标定板放置在自由位置;
  • 眼在手外,标定板放置在机器人末端,和机器人绑定在一起。

在这里插入图片描述
上面的俩个图中,实线是已知的变换关系,虚线是未知的变换关系。
要求解的关键:

  • 眼在手上,求解的是相机末端工具(注意不是末端)的位姿变换关系,即 c t T _{c}^{t}\textrm{T} ctT,整体位姿关系为:
    o b T _{o}^{b}\textrm{T} obT = t b T _{t}^{b}\textrm{T} tbT c t T _{c}^{t}\textrm{T} ctT o c T _{o}^{c}\textrm{T} ocT
  • 眼在手外,求解的是相机基座的位姿变换关系,即 c b T _{c}^{b}\textrm{T} cbT,整体位姿关系为:
    o t T _{o}^{t}\textrm{T} otT = b t T _{b}^{t}\textrm{T} btT c b T _{c}^{b}\textrm{T} cbT o c T _{o}^{c}\textrm{T} ocT

注意,上面两个变换关系的公式有共同形式:
Y Y Y = A X B AXB AXB,这里A为工具和底座的变换关系,B为相机和标定板的关系,未知为X,即眼在手上的 c t T _{c}^{t}\textrm{T} ctT和眼在手外的 c b T _{c}^{b}\textrm{T} cbT,而Y在两种情况中是不变的
取两组不同的位姿,可以得到两个等式 Y Y Y = A i X B i A_{i}XB_{i} AiXBi Y Y Y = A j X B j A_{j}XB_{j} AjXBj,消除Y后,可得

A i X B i A_{i}XB_{i} AiXBi= A j X B j A_{j}XB_{j} AjXBj

变换位置:
A j − 1 A i X A_{j}^{-1}A_{i}X Aj1AiX= X B j B i − 1 XB_{j}B_{i}^{-1} XBjBi1,即AX = XB
如何解?
opencv:

void cv::calibrateHandEye (InputArrayOfArrays R_gripper2base, 
		InputArrayOfArrays t_gripper2base, 
		InputArrayOfArrays R_target2cam, 
		InputArrayOfArrays t_target2cam, 
		OutputArray R_cam2gripper, 
		OutputArray t_cam2gripper, 
		HandEyeCalibrationMethod method = CALIB_HAND_EYE_TSAI )

halcon:

calibrate_hand_eye()

2.2 单目相机获取3D位姿

通过手眼标定拿到了相机和机械手的相对位姿变换关系,但是通过单目相机,我们必须拿到物体的3D位姿,才能转换到机械手坐标系中进行抓取。
那么如何在单目相机中拿到物体的3D位姿呢?

在halcon中,提供了两种办法通过单目相机拿到物体的3D位姿。当然正常使用中用的最多的还是上面的九点标定来进行2D引导。

2.2.1 变形匹配

halcon的find_planar_calib_deformable_model平面形变匹配算子,可以计算出平面物体在透视情况下的空间位姿。首先将标定板放到物体旁边,用CAD模型注册的边缘模板进行匹配,计算当前物体相对于相机的位姿。后续就可以进行匹配了。
在这里插入图片描述
匹配到的工件:
在这里插入图片描述

基本原理:
在这里插入图片描述

2.2.2 基于形状的三维匹配

基于形状匹配是指在二维图像中搜索三维CAD模型实例,而不是三维点云。通过操作符find_shape_model_3d计算并返回物体姿态。
它是通过一种基于视图的方法来计算的。通过虚拟球面视图的方式,降低算法复杂度:

假设物体置于球心,并对球心进行观测,创建多个位置的虚拟相机,我们可以通过将物体投影到每一个虚拟相机的像平面上获取相机的拍到的视图,注册为模板,在实际匹配时,会在每个虚拟相机的位置进行匹配计算,找到最佳位姿。注意还需计算不同半径下的虚拟相机。

在这里插入图片描述

创建模板的时候,利用CAD三维信息,进行多虚拟相机投影的计算,计算量很大。在后面使用时,需要对数以千计的视图进行匹配计算,很难满足实际的应用需求,还是推荐直接上3D相机获取到点云信息后进行匹配。

3.3D相机手眼标定

将下图中的标定板换成其他标定物,就可以进行3D手眼标定了。
在这里插入图片描述

2.2.2 基于形状的三维匹配

3.1 结构光/双目/RGBD等相机

参考《机器视觉算法及应用》最后一章。

这种类型的相机进行手眼标定时,一次拍照就可以拿到物体的3D点云信息,可以通过点云匹配来获取物体相对于相机的位姿,也就是 o c T _{o}^{c}\textrm{T} ocT是可以通过点云匹配拿到的。

标定物的选取:

  • 已知实际尺寸的CAD标准标定物,通过拍摄得到的点云,和标准点云匹配;
  • 抓取场景可以用实际要抓取的物体去制定模型模板,然后进行匹配。

比如halcon中的find_surface_model就可以进行点云匹配。

之后的过程和上面的传统相机手眼标定是一样的,需要进行多个位姿的拍照来进行计算。

3.2 线激光轮廓相机

线激光轮廓相机和上面的结构光等相机获取点云的原理是不一样的,需要进行多次扫描才能拿到物体的点云信息。
进行手眼标定时,具目前的资料,有三种方法进行手眼标定:

  1. 和结构光一样,扫描模板标定物进行点云匹配,求 o c T _{o}^{c}\textrm{T} ocT,注意需要用不同的位姿拍摄扫描多组;
  2. 本思路未验证)类似上面的9点标定,可以扫描一个9点(或多点)的标定物获得点在相机坐标系中的坐标(注意上面是像素坐标系),然后用机械手的工具针碰触9个点,拿到空间坐标,最后解3D空间的仿射变换。
  3. 拍摄标准球,使用两步法计算,精度应该是比较差的(未验证)。参考论文《基于线激光轮廓仪的机器人3D视觉定位系统设计 ——周泽西》。

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

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

相关文章

【python--比对两个列表获取列表中出现频率最高的词及频率】

🚀 作者 :“码上有前” 🚀 文章简介 :Python 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 python练习题 完整代码 完整代码 from collections import Counter from data_keywords import extract_…

【Linux】文件传输工具lrzsz的安装与使用

目录 一、关于lrzsz 二、安装lrzsz 三、lrzsz的说明及使用 1、上传命令rz 2、下载命令sz 一、关于lrzsz 在开发的过程中,经常遇到 需要在 Linux 和 Windows 之间上传下载文件的情况 这时,一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能…

SRIO—IP讲解及说明

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、SRIO IP 概述1.1 逻辑层1.1.1 I/O 端口(I/O Port)1.1.2 消息端口(Messaing Port)1.1.3 用户自定义端口(User-Defined Port)1.1.4 维护端口(Maintenance Port)1.2 缓冲层1.3 物理层…

python+django+vue房屋租赁系统 8gwmf

房屋租赁系统在设计与实施时,采取了模块性的设计理念,把相似的系统的功能整合到一个模组中,以增强内部的功能,减少各组件之间的联系,从而达到减少相互影响的目的。如房源信息、预约信息、求租信息模块等[12]。 管理员后…

java工程师面试简历模板,2024谈一下当下最合适的Java架构

前言 这些算法,都是小编一点一点看的大佬们的方法,自己积累的. 如果有什么描述的不对的地方还望大佬赐教 多交流才能进步,加油,冲冲冲!!! 目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速…

Redis中的RDB和AOF持久化机制(一)

Redis持久化 RDB快照(snapshot). 在默认情况下,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中.Redis可以进行设置,让它在"N秒内数据集至少有M个改动"这一条件被满足时,自动保存一次数据集。比如说,以下设置会让Redis…

软件测试需求分析如何编写?为什么要进行测试需求分析?

在软件开发的过程中,软件测试需求分析是至关重要的一个环节。测试需求分析是指对待测软件的需求进行全面细致的分析,明确软件测试的目标和范围,为测试活动的进行提供指导。通过对软件需求的详细分析,可以确保测试人员清楚了解软件…

配置与管理防火墙

配置与管理防火墙 1,概念:设置在不同网络或网络安全域之间的一系列部件的组合。 2,功能:保护内网中易手攻击的服务;控制内外网之间网络系统的访问;隐藏内网的IP地址及结构的细节,提高网络保护…

3月每日一题笔记

感谢我的好朋友的鼓励 3月4日 两种等价方式?都是错误的 ->加减中不能使用等价无穷小? ->不全面。 两项无穷小相减, 那么两项无穷小比值的极限不等于 1 时, 或者两项无穷小相加时, 其比值极限不等于 −1 时, 代数和差各项可以用等价无穷小替换 等…

基于springboot的海滨体育馆管理系统的设计与实现论文

摘 要 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理,提高管理效率,使得海滨体育馆管理工作规范化、高效化。 本文重点阐述了海滨体育馆管理系统的开发过程,以实际运用为开发背景,基于Spring Boot…

LLM 系列——BERT——论文解读

一、概述 1、是什么 是单模态“小”语言模型,是一个“Bidirectional Encoder Representations fromTransformers”的缩写,是一个语言预训练模型,通过随机掩盖一些词,然后预测这些被遮盖的词来训练双向语言模型(编码器…

7.使用os.Args或flag解析命令行参数

文章目录 一、os.Args二、flag包基本使用 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。 一、os.Args 如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。 package mainimp…

彻底解析:企业为何必须采用CRM系统以及其五大作用

相关数据显示,CRM系统在欧美发达国家的普及程度高,超出80%的企业部署了CRM管理系统。然而在国内这个比例依然很小只有10几%,为什么企业需要CRM系统?因为CRM可以为公司实现线索管理、绩效管理、销售流程管理、市场营销管理以及数据…

【python开发】网络编程(下)

这里写目录标题 一、OSI7二、TCP和UDP协议(一)UDP和TCP示例代码1、UDP2、TCP (二)TCP三次握手和四次挥手 三、粘包1、实际案例12、实际案例23、实际案例3 四、阻塞和非阻塞五、IO多路复用 一、OSI7 在电脑和电脑之间进行数据传输…

Three.js--》探寻Cannon.js构建震撼的3D物理交互体验(二)

我们用three.js可以绘制出各种酷炫的画面,但是当我们想要一个更加真实的物理效果的话,这个时候我们就需要一个物理的库,接下来我们就讲解一下今天要学习的canon,它可以给我们提供一个更加真实的物理效果,像物体的张力、…

【center-loss 中心损失函数】 原理及程序解释(完)

文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码(center_loss.py)原理程序解释 代码运用 如何梯度更新首先了解一下基本的梯度下降算法然后代码解释见下面train() 补充:外围知识(models.py…

同步通信和异步通信(RabbitMq学习前篇)

MQ学习前篇 文章目录 MQ学习前篇1、同步和异步通讯1.1、同步通讯和异步通讯1.2、同步调用存在的问题1.3、异步调用方案1.4、异步通信的缺点 1、同步和异步通讯 学习mq之前,就要先知道同步通讯和异步通讯的区别。 1.1、同步通讯和异步通讯 同步通讯就像是打电话&am…

部署LVS集群之DR模式

直接路由模式----DR模式 理念: 直接路由(是lvs的默认模式) DR模式和隧道模式唯一的区别:dr模式这四台服务器在同一网段,隧道模式 :这四台服务器不在同一网段 客户端 ------->代理服务器------->真实…

Unity中关于继承ScriptableObject的类

在游戏中我们会经常看到一些.asset的配置文件,而这些文件就是用一个自定义的类去继承ScriptableObject来生成的。比如当前有一些零散特效需要预加载,这个时候我们可以声明一个类去保存这些零散特效对象的信息,然后统一读取加载。 代码&#…

Pycharm与Anaconda安装

网址: Pycharm:https://www.jetbrains.com/pycharm/ Anaconda:https://www.anaconda.com/download/ 官网下载速度太慢可以选择到清华源下载:https://repo.anaconda.com/archive/ 一:Anaconda安装 安装: …