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

news/2024/11/28 17:17:13/

内容

  • 1.背景介绍
    • 1.1 思路
    • T_target_to_cam求解
    • 公式求解
  • 2.操作流程

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叉乘得到。
3d7e00a844aca295f9f617e14980.png" alt="在这里插入图片描述" />

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.csdn.net/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


http://www.ppmy.cn/news/1550677.html

相关文章

CTF之密码学(RSA加密)

RSA加密算法是一种公钥加密算法,以下是对其的详细解析: 一、RSA加密算法概述 RSA加密算法由Ron Rivest、Adi Shamir和Leonard Adleman在1977年共同发明,并因此得名。它是第一个既能用于数据加密也能用于数字签名的算法。RSA的安全性基于数论…

android12锁屏界面pin码或者图案解锁居中显示

设置pin码或者图案锁屏后,在锁屏界面向上划左边,图案解锁就在左边, 向上划右边图案就在右边,如何设置一直居中显示呢? diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI…

go-学习

文章目录 简介标识符字符串的拼接,关键字数据类型声明变量常量算术运算符关系运算符逻辑运算符位运算赋值运算符其他运算符 简介 Go 语言的基础组成有以下几个部分: 1.包声明 2.引入包 3.函数 4.变量 5.语句 & 表达式 6.注释 package main import &q…

【一篇搞定配置】网络分析工具WireShark的安装与入门使用

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀各种软件安装与配置_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

远程视频验证如何改变商业安全

如今,商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力,但…

<项目代码>YOLOv8 红绿灯识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

从零开始学 Maven:简化 Java 项目的构建与管理

一、关于Maven 1.1 简介 Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。Maven 的设计目标是提供一种更加简单、一致的方法来构建和管理项目,它通过使用一个标准的目录布局和一…

leetcode hot100【LeetCode 347.前 K 个高频元素】java实现

LeetCode 347.前 K 个高频元素 题目描述 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: [1]Java 实现代码…