3D手眼标定1(原理)

3D Vision Roboot Eye-to-hand Calibration
说明: 3D视觉机器人是配备有3D视觉相机的机械臂,能够观测场景的3D信息,以3D点云的形式交给机械臂,可以用于物体抓取、无序分拣、装配、打磨等工作。手眼标定是3D视觉机器人的前导工作,其意义是将场景信息从相机变换至机械臂坐标系中,其目标是获得相机到机械臂基座的空间变换矩阵


一、标定方法分为三步:

在这里插入图片描述

二、 眼在手外示意图:

在这里插入图片描述

三、眼在手外的特点和目标

特点:
相机被固定在场地上,机械臂的基座也同样被固定在场地上,则可得出相机与机械臂的基座在空间变换上是固定的,或者说是没有想对空间变换的。

在这里插入图片描述

四、标定步骤

第一步、获得标定板到相机的空间变换矩阵

在这里插入图片描述

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


第二步:计算相机到机械臂基座的空间变换矩阵:

在这里插入图片描述

第三步:进度提升的方法

说明:手眼标定的精度是3D视觉机器人的重要和基础指标,直接影响后续工作的展开。手眼标定的精度与拍照数量、机械臂姿态的丰富程度等因素有关,考虑有限的样本容量,手眼标定的精度往往不会很高。为了提升标定精度,本工作在手眼标定完成后,使用了ICP(Iterative
Closest Points)方法。实验中,这套方法将定位精度从10mm量级提升至1mm量级

4.3.1、方法:使用ICP

ICP(Iterative Closest Point,迭代最近点)算法一种迭代计算方法,主要用于计算机视觉中深度图像的精确拼合,通过不断迭代最小化源数据与目标数据对应点来实现精确地拼合。已经有很多变种,主要热点是怎样高效、鲁棒的获得较好地拼合效果

4.3.2、原理:

在机械臂的基坐标系下,机械臂的基坐标系和3D相机的坐标系是一个刚体变换的关系,他们之间没有缩放存在,即他们不是彷射变换;我们的所有标定,其实就是来求解此空间变换矩阵(AX=XB)

4.3.3、方案二:

我只要知道在相机坐标系下若干点的坐标,然后知道在机械臂基坐标系下若干点的坐标,那么我们可以通过这两组坐标来使用求解空间变换的方法,获得这个空间变换。
我们常用的方法包括ICP: Iterative Closest Point,可以用求得的空间变换矩阵前提下,为需要两套场景点和模板点,他们之间的空间变换关系一定是刚体变换:Rigid Transformation,
P1-P2,可以用ICP求解

4.3.4.1、思考1:第一步和第二步为什么不用ICP?

ICP有初始值的限制:P1\P2这两套点之间的空间变换一定要比较小,换句话说ICP对迭代初值非常敏感,如果初值P1和P2空间变换比较大,那么ICP可能会收敛至一个局部最优解,而非曾解,导致求解失败;这就是为什么在第一步和第二步时不使用ICP。

4.3.4.2、思考2:那么为什么在第三步又使用ICP呢?

因为我们经历过第一步,第二步之后,我们已经得到了一个空间变换矩阵,这个空间变换矩阵虽然它有误差,但是它已经接近增值了,这时候就可以作为我们ICP计算的一个初值来使用,这就是最初的动机。

4.3.5、场景示意图

在这里插入图片描述

4.3.6、机械臂基座标下的坐标采集方法:

在机械臂末端法兰上安装一个已知尺寸的探针,然后用探针触碰每一个交点,那么机器人的示教器上就会显示工具端所在的位置,在机械臂基座标系下的位置

此时我们获得了同一个交点在相机和在基座标系下的坐标
在这里插入图片描述

五、扩展

眼在手上标定的是相机和机械臂末端的位置关系,我理解的步骤如下:
第一步,固定标点板;
第二步,先用相机获取标定板角点在相机坐标系下的三维坐标,这个和眼在手外的操作一样;
第三步,记录上一步机械臂末端的位置信息(包括【x,y,z,rx,ry,rz】6维信息);
第四步,用机械臂末端的尖端去获取标定板角点在机械臂基地坐标系的坐标;
第五步,利用第三步获取的位置信息把第二步获取的坐标转化成机械臂末端坐标系下的坐标(眼在手外不需要这步);
第六步,利用第五步获取的坐标和第二步获取的坐标进行ICP计算,即可得到相机与机械臂末端位置关系描述旋转、平移矩阵。

### 手眼标定的过程及步骤 #### ETH (Eye To Hand) 和 EIH (Eye In Hand) 手眼标定主要分为两种情况:ETH(Eye to hand)和EIH(Eye in hand),这取决于相机相对于机器人的安装位置。对于ETH方式,相机会被固定在一个独立于机器人之的位置;而EIH则是指相机直接安装在机器人的末端执行器上[^1]。 #### 标定目标 无论是哪种配置模式下的手眼标定,其核心都是为了求解相机与机械臂之间相对关系的变换矩阵\[T_{c}^{e}\][^2]。这个变换描述了当给定世界坐标系下某一点P时,在不同视角观察该点所得到的不同图像平面坐标的对应关系。 #### 实验准备阶段 - **硬件设置**:确保所有设备正常工作并连接良好,特别是摄像头、光源以及用于捕捉特征点的目标物。 - **软件工具的选择**: 使用像Halcon这样的专业视觉处理库可以简化开发流程,并提供成熟的手眼标定函数接口来辅助完成整个过程[^3]. #### 数据采集环节 在这个过程中,操作员需要移动机器人使摄像机能拍摄到多个角度下的校准板图片序列。每张照片都应包含足够的已知几何结构信息以便后续分析使用。对于ETH方案来说,保持相机不动而改变手臂姿态即可获得所需数据集; 对于EIH,则需维持固定的物体位置不变并通过调整手腕方向获取多样化的视图样本. #### 参数估计部分 利用收集来的多组配对数据——即同一物理空间内的若干个标记点分别在其各自对应的两幅或多幅影像上的投影坐标——通过最小二乘法或其他优化算法估算出上述提到过的转换矩阵\[T_{c}^{e}\]. Halcon提供了专门的功能模块来进行此类运算, 可以大大减少开发者的工作量并提高准确性[^4]. #### 结果验证 最后一步是对所得结果进行检验。可以通过比较实际抓取物品前后的位姿差异或者重复定位测试等方式评估系统的整体性能表现。如果发现存在较大偏差,则可能需要重新审视之前的各个步骤查找潜在问题所在直至满足预期精度为止. ```python import cv2 import numpy as np def calibrate_hand_eye(camera_matrix, dist_coeffs, obj_points, img_points): """ 计算手眼标定所需的旋转和平移向量 :param camera_matrix: 相机内参矩阵 :param dist_coeffs: 畸变系数数组 :param obj_points: 物体三维坐标列表 :param img_points: 图像二维坐标列表 :return: R,t 分别代表旋转向量和平移向量 """ _, rvecs, tvec = cv2.solvePnP(obj_points, img_points, camera_matrix, dist_coeffs) return rvecs, tvec ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值