(四)3D视觉机器人的手眼标定(眼在手外)

1.背景介绍

  3D视觉机器人指的是机器人通过3D相机提供的3D点云视觉信息,完成某些实际的功能。
  目标是将场景信息从相机坐标系变换至机械臂坐标系中,最终是获得相机到机械臂基座的空间变换矩阵。
  下面以眼在手外标定为例:

在这里插入图片描述
  上图中,相机④固定在工作空间中,标定板③被固定在机械臂末端②上,为了做手眼标定在末端上固定一个标定板。
  标定过程中标定板③机械臂末端②固定位姿不变,由上图可知,相机④机械臂基座①的相对位置不变,然后通过示教器控制机械臂带着标定板③在不同的位姿下进行拍照,拍照的过程中保存当前拍到的标定板图片以及记录图片对应示教器上的世界坐标。
  眼在手外标定的目的是求出相机④坐标系到机械臂基座标系①的变换矩阵。

1.1 思路

在这里插入图片描述
  眼在手外标定可以理解为上述坐标系转换的关系,其中③可由机械臂示教器上的数值直接获取,④由于是固定不变的,后面可通过计算进行消除。目标是求出相机相对于机械臂基座坐标系的位姿

T_target_to_cam求解

  T_target_to_cam可以理解是齐次矩阵,是由R_target_to_cam(旋转矩阵)和平移向量t_target_to_cam组成。
在这里插入图片描述
  其中R_target_to_cam(旋转矩阵)可以由三个单位向量来表示,下面需要建立这个单位向量。
在这里插入图片描述
  这里使用的标定板是棋盘格标定板,可以通过OpenCV中的函数寻找到棋盘格上的每个角点像素坐标系,以左上角第一个角点作为原点,和右上角的角点相连作为X轴正方向,和左下角的角点相连作为Y轴正方向,计算它们的单位向量VxVyVz可由Vx和Vy叉乘得到。(由于不能保证Vx和Vy是相交的,可以在Vx和Vy叉乘后得到Vz,再由Vx和Vz叉乘得到新的Vy,这样就能保证Vx和Vy是相交的
在这里插入图片描述

PS:这里选择右上角的角点和左下角的角点,和原点相连是为了提高精度。

  因为使用的是3D相机,可以知道左上角角点的像素坐标和深度信息,通过相机内参将像素坐标转换为实际物理坐标(相机坐标系下),则t_target_to_cam平移向量可以得到。

公式求解

在这里插入图片描述
  上面的公式中,①可以通过上面的方法求解,③是已知值,将等式两边左乘T_base_to_cam逆矩阵T_end_to_base逆矩阵,可以将T_target_to_end单独放在等式右边,输入两组值,由于目标(标定板相对于机械臂末端的位姿关系固定)T_target_to_end相等,可以将两组值直接相等,去除T_target_to_end

  剩下的就是AX = XB求解,输入多组值即可求出相机相对于机械臂基座坐标系的位姿,即T_cam_to_base

2.操作流程

操作流程基本和眼在手外标定流程相同,只是这里相机是不变的,需要将标定板固定到机械臂的末端,参考:https://blog.youkuaiyun.com/qq_45445740/article/details/123947559

上面提到的计算T_target_to_cam通过建立坐标系的方法进行求解,作为一个求解思路,OpenCV中有现成的函数直接进行求解,calibrateCamera,可以计算眼在手上和眼在手外,只是输入的参数不同。

感谢视频讲解:https://www.bilibili.com/video/BV1Rw411d7ch/?spm_id_from=333.880.my_history.page.click

### 手眼标定简介 手眼标定是指确定相机坐标系与机器人末端执行器之间相对位置的过程。该过程对于视觉引导的机器人操作至关重要,因为它允许将图像中的特征映射到机器人的工作空间中[^1]。 ### MATLAB 中的手眼标定工具箱 MATLAB 提供了专门用于手眼标定的功能函数 `estimateHandEyeTransformation` 和其他辅助函数来简化这一复杂任务。这些功能被集成到了 Robotics System Toolbox 中,使得研究人员和工程师能够方便地完成标定实验设计、数据采集以及最终变换矩阵计算的工作流程。 ### 实现步骤概述 为了在 MATLAB 中实现手眼标定,可以遵循如下方法: #### 数据准备阶段 收集多组不同姿态下的棋盘格图片及其对应的机械臂关节角度信息作为输入数据集。每一对这样的观测构成了一个样本点[(xi, yi)],其中 xi 表示第 i 组图像内角点的世界坐标;yi 则表示此时机械臂各轴的角度向量。 #### 计算位姿关系 利用上述获取的数据对,通过求解最小二乘法或其他优化算法得到摄像机相对于基座框架的位置和平移分量组成的齐次转换矩阵 Tc_to_b[] 或者 Te_to_e[](取决于所选方案)。此部分可通过调用内置命令如 `rigid3d()` 来构建刚体运动模型并估计参数值。 ```matlab % 假设已知一组对应关系 {X,Y} transformation = estimateGeometricTransform(X, Y,'similarity'); T_c2b = rigidtform3d(transformation.Rotation,... transformation.Translation); ``` #### 验证准确性 最后一步是对所得结果进行验证测试,即选取未参与训练的新样本重复相同的操作以评估误差范围内的精度表现情况。这有助于确认整个系统的可靠性和稳定性,并为进一步改进提供依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boss-dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值