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

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引导,所以要引导还得靠上面的九点标定,,进行2D引导。如果需要进行3D引导,需要使用3D相机

我想到可用的一个场景是这样的:AGV上装一个相机,到了一个工位停下来后,可以拍摄一个标定板(或可以做PNP的标定物),来计算标定物和相机的位姿变换关系,然后结合手眼标定的结果,可以计算出AGV相对于标定物的位姿偏移,最终来矫正AGV的空间位姿。

3.3D相机手眼标定

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

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.hqwc.cn/news/511142.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka,然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…

C++:Vector的模拟实现

创作不易,感谢三连 !! 一,前言 在学习string类的时候,我们可能会发现遍历的话下标访问特别香,比迭代器用的舒服,但是下标其实只能是支持连续的空间,他的使用是非常具有局限性的&am…

Fisher矩阵与自然梯度法

文章目录 Fisher矩阵及自然梯度法Fisher矩阵自然梯度法总结参考链接 Fisher矩阵及自然梯度法 自然梯度法相比传统的梯度下降法具有以下优势: 更好的适应性:自然梯度法通过引入黎曼流形上的梯度概念,能够更好地适应参数空间的几何结构。这使…

如何本地安装gemma

目录 通过ollama开源软件来一键安装目前主流的大模型,支持的开源模型包括以下内容: https://github.com/ollama/ollama

基于pytorch的手写体识别

一、环境搭建 链接: python与深度学习——基础环境搭建 二、数据集准备 本次实验用的是MINIST数据集,利用MINIST数据集进行卷积神经网络的学习,就类似于学习单片机的点灯实验,学习一门机器语言输出hello world。MINIST数据集,可以…

【树】【异或】【深度优先】【DFS时间戳】2322. 从树中删除边的最小分数

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 涉及知识点 树 异或 DFS时间戳 LeetCode2322. 从树中删除边的最小分数 存在一棵无向连通树,树中有编号从 0 到 n - 1 的 n 个节点, 以及 n - 1 条边。 给你一个下标从 0 开始的整数数组…

京东商品优惠券API获取商品到手价

item_get_app-获得JD商品详情原数据 公共参数 请求地址: jd/item_get_app 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,i…

(十五)【Jmeter】取样器(Sampler)之HTTP请求

简述 操作路径如下: HTTP请求 (HTTP Sampler): 作用:模拟发送HTTP请求并获取响应。配置:设置URL、请求方法、请求参数等参数。使用场景:测试Web应用程序的HTTP接口性能。优点:支持多种HTTP方法和请求参数,适用于大多数Web应用程序测试。缺点:功能较为基础,对于复杂…

鸿蒙实战应用开发:【拨打电话】功能

概述 本示例通过输入电话,进行电话拨打,及电话相关信息的显示。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 拨打电话 介绍 本示例使用call相关接口实现了拨打电话并显示电话相关信息的功能 效果预览 使用说明 1.输入电话号码后&#…

11. Nginx进阶-HTTPS

简介 基本概述 SSL SSL是安全套接层。 主要用于认证用户和服务器,确保数据发送到正确的客户机和服务器上。 SSL可以加密数据,防止数据中途被窃取。 SSL也可以维护数据的完整性,确保数据在传输过程中不被改变。 HTTPS HTTPS就是基于SSL来…

#QT(串口助手-界面)

1.IDE:QTCreator 2.实验:编写串口助手 3.记录 接收框:Plain Text Edit 属性选择:Combo Box 发送框:Line Edit 广告:Group Box (1)仿照现有串口助手设计UI界面 (2)此时串口助手大…

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n,从第二个元素开始,将当前元素存储在临时变量temp中。 从当前元素的前一…