草庐IT

手眼标定原理(眼在手上和眼在手外)

hy2014x 2023-05-07 原文

手眼标定是指求解出工业机器人的末端坐标系与相机坐标系之间的坐标变换关系,或者工业机器人的基底坐标系与相机坐标系之间的坐标变换关系。手眼标定有两种情形:第一种是相机(眼)固定在机器臂(手)的末端,相机相对于机器臂末端是固定的,相机跟随机器臂移动,这种方式的手眼标定成为 Eye-in-hand;第二种是相机(眼)和机器臂(手)分离,相机相对于工业机器人的基座是固定的,机器臂的运动对相机没有影响, 这种方式的手眼标定成为 Eye-to-hand。

1、眼在手上的手眼标定

对于 Eye-in-hand 手眼标定方式,需要求解工业机器人的末端坐标系与相机坐标系之间的坐标转换关系。 Eye-in-hand 手眼标定的原理示意图如图 1所示。这其中有几个坐标系, 基础坐标系(用 base 表示) 是机器臂的基底坐标系,末端坐标系(用 end 表示) 是机器臂的末端坐标系, 相机坐标系(用 cam 表示) 是固定在机器臂上面的相机自身坐标系,标定物坐标系(用 cal 表示)是标定板所在的坐标系。任意移动两次机器臂,由于标定板和机器臂的基底是不动的,因此对于某个世界点,其在 base 坐标系和 cal 坐标系下的坐标值不变,在 end 坐标系和 cam 坐标系下的坐标值随着机器臂的运动而改变。根据这一关系,可以求解出end坐标系和 cam 坐标系之间的转换矩阵。具体求解过程如下。
对于手眼标定矩阵的求解,即求解出 end 坐标系和 cam 坐标系之间的转换矩阵,目前有许多方法,基本原理都是根据上述约束关系来求解的。 cal 坐标系下的某个点 P 0 P_0 P0,根据已知的相机外参(转换矩阵 T 1 T_1 T1)能够转换到 cam 坐标系下点 P1 ,再根据待求的手眼标定矩阵(转换矩阵 X )能够转换到 end 坐标系下点 P 2 P_2 P2,然后根据已知的机器人自身参数(转换矩阵 T 3 T_3 T3)能够转换到 base 坐标系下点 P 3 P_3 P3。因此能够得到关系式如下:
T 3 X T 1 P 0 = P 3 (1) T_3XT_1P_0=P_3 \tag{1} T3XT1P0=P3(1)
移动机器臂,对于同一点, P 0 P_0 P0 P 3 P_3 P3的坐标值不变,只是 P 1 P_1 P1 P 2 P_2 P2的坐标值改变了,上述关系式变为如下形式:
T 3 ′ X T 1 ′ P 0 = P 3 (2) T_3{^\prime}XT_1^{\prime}P_0=P_3 \tag{2} T3XT1P0=P3(2)
上式中 T 3 ′ T_3^\prime T3 T 1 ′ T_1^\prime T1同样是第二次测量的已知参数。联立(1)和(2)式可以得到如下关系式:
T 3 X T 1 = T 3 ′ X T 1 ′ (3) T_3XT_1=T_3{^\prime}XT_1^{\prime} \tag{3} T3XT1=T3XT1(3)
对式(3)变换一下,可得:
T 3 ′ − 1 T 3 X = X T 1 ′ T 1 − 1 (4) T_3 ^{\prime-1}T_3 X=XT_1^{\prime} T_1^{-1} \tag{4} T31T3X=XT1T11(4)
上式可以看成 A X = X B AX=XB AX=XB方程形式,且矩阵 A = T 3 ′ − 1 T 3 A=T_3 ^{\prime-1}T_3 A=T31T3 B = T 1 ′ T 1 − 1 B=T_1^{\prime} T_1^{-1} B=T1T11都是已知的。对手眼标定方程 A X = X B AX=XB AX=XB求解,即可得到手眼转换矩阵 X X X的值。

2、眼在手外的手眼标定

eye-to-hand的手眼标定示意图如下图2所示。相机固定在机器臂之外,相机和机器臂底座相对静止。其中,相机坐标系为 O c O_c Oc,标定板坐标系为 O w O_w Ow,机器臂末端坐标系为 O e O_e Oe,机器臂底座坐标系为 O b O_b Ob。涉及到几个坐标系的转换,即标定板坐标系到相机坐标系的转换关系 T w c T_w^c Twc,相机坐标系到机器臂底座坐标系的转换关系 X X X,机器臂底座坐标系到机器臂末端坐标系的转换关系 T b e T_b^e Tbe,其中相机坐标系到机器臂底座坐标系的转换关系 X X X即为需要求解的手眼标定矩阵。

对于上述转换关系,标定板固定在机器臂末端,在某一位姿下,标定板上的点在标定板坐标系下的坐标值是 P 1 P_1 P1,经过 T w c 、 T c b 、 T b e T_w^c、T_c^b、T_b^e TwcTcbTbe的坐标系转换关系转换之后,标定板上的点能够转到机器臂末端坐标系下的坐标值 P 3 P_3 P3,转换关系如下:
T b e X T w c P 1 = P 3 (1) T_b^eXT_w^cP_1=P3 \tag{1} TbeXTwcP1=P3(1)
然后机器臂变换一下位姿,能够得到另一组上述形式相同的公式,即:
T b e ′ X T w c ′ P 1 = P 3 (2) T_b^{e\prime}XT_w^{c\prime}P_1=P3 \tag{2} TbeXTwcP1=P3(2)
上述公式(1)和(2)中的 T b e 、 T b e ′ T_b^e、T_b^{e\prime} TbeTbe能够通过机器人的位姿输出得到, T w c 、 T w c ′ T_w^c、T_w^{c\prime} TwcTwc能够通过单目相机标定的外参得到。上式(1)(2)能够转换成以下形式:
T b e X T w c = T b e ′ X T w c ′ (3) T_b^eXT_w^c=T_b^{e\prime}XT_w^{c\prime} \tag{3} TbeXTwc=TbeXTwc(3)
进一步的能够转成:
T b e ′ − 1 T b e X = X T w c ′ T w c − 1 (4) T_b^{e\prime-1}T_b^eX=XT_w^{c\prime}T_w^{c-1} \tag{4} Tbe1TbeX=XTwcTwc1(4)
公式(4)能够理解成 A X = X B AX=XB AX=XB的形式,此时 A = T b e ′ − 1 T b e A=T_b^{e\prime-1}T_b^e A=Tbe1Tbe B = T w c ′ T w c − 1 B=T_w^{c\prime}T_w^{c-1} B=TwcTwc1,其中 A 、 B A、B AB都是已知数。通过变换多次机器臂末端位姿,对手眼标定方程 A X = X B AX=XB AX=XB求解,即可得到手眼转换矩阵 X X X的值。

有关手眼标定原理(眼在手上和眼在手外)的更多相关文章

  1. 【Unity游戏破解】外挂原理分析 - 2

    文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cppdumper例子2-森林whoishe后记认识unity打包目录结构dll一般很大,因为里面是所有的游戏功能编译成的二进制码游戏逆向流程开发人员代码被编译打包到GameAssembly.dll中使用il2ppDumper工具,并借助游戏名_Data\il2cpp_data\Metadata\global-metadata.dat

  2. Slowloris DoS攻击的原理与简单实现 - 2

    前言    Slowloris攻击是我在李华峰老师的书——《MetasploitWeb 渗透测试实战》里面看的,感觉既简单又使用,现在这种攻击是很容易被防护的啦。不过我也不敢真刀实战的去试,只是拿个靶机玩玩罢了。         废话还是写在结语里面吧。(划掉)结语可以不看(划掉)Slowloris攻击的原理        Slowloris是一种资源消耗类DoS攻击,它利用部分HTTP请求进行操作。也叫做慢速攻击,这里的慢速并不是说发动攻击慢,而是访问一条链接的速度慢。Slowloris攻击的功能是打开与目标Web服务器的连接,然后尽可能长时间的保持这些连接打开。如果由多台电脑同时发起Slo

  3. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

  4. 有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定 - 2

    俯拍相机中心和吸嘴中心的标定文章目录俯拍相机中心和吸嘴中心的标定前言适用模型如下:一、使用一个标定片进行标定1.关键注意:2.标定步骤:二、使用一个L型的工件1.关键注意:2.标定步骤:总结前言在自动化设备领域,使用相机进行定位是很普遍存在的,而使用相机定位就必定会用到标定,本文介绍两种关于吸嘴上方的俯拍相机和吸嘴中心的标定方法(前提是带有仰拍相机和俯拍相机)。【还有很多相机的使用场景的标定方法将在以后的文章中进行阐述】适用模型如下:一、使用一个标定片进行标定1.关键注意:关键是使用两个相机的中心和识别偏差,得到两个相机的中心固定偏差。注:后续俯拍相机拍物料识别得到的偏差以吸嘴中心在俯拍相机中

  5. 相机内参标定,相机和激光雷达联合标定 - 2

    相机内参标定,相机和激光雷达联合标定一、相机标定原理1.1成像过程1.2标定详解二、相机和激光雷达联合标定2.1标定方法汇总2.2Autoware的安装与运行2.2.1安装方式2.2.2安装Autoware的依赖(Ubuntu16.04/kinetic)2.2.3编译Autoware1.创造工作空间2.下载Autoware源码3.其他依赖4.编译5.效果2.3Autoware标定激光雷达和相机的外参过程一、相机标定原理1.1成像过程现实物体在相机中的成像过程离不开世界坐标系、相机坐标系、图像坐标系以及像素坐标系,只有理解了这些才能对获取的图像进行准确的分析。成像过程:四个坐标系如下图所示:世界

  6. ruby - # Ruby 中识别方法约定的基本原理/历史是什么? - 2

    例如,我一直看到称为String#split的方法,但从未见过String.split,这似乎更合乎逻辑。或者甚至可能是String::split,因为您可以认为#split位于String的命名空间中。当假定/隐含类(#split)时,我什至单独看到了该方法。我知道这是ri中识别方法的方式。哪个先出现?例如,这是为了区分方法和字段吗?我还听说这有助于区分实例方法和类方法。但这从哪里开始呢? 最佳答案 不同之处在于您如何访问这些方法。类方法使用::分隔符来表示消息可以发送到类/模块对象,而实例方法使用#分隔符表示消息可以发送到实例对

  7. H264压缩原理 - 2

    1、为什么压缩的原始数据一般采用YUV格式(1)利用人对图片感觉的生理特性,对于亮度信息比较敏感,对于色度信息不太敏感,所以视频编码是将Y分量和UV分量分开来编码,并且可以减少UV分量.2、视频压缩原理(1)空间冗余:图像相邻像素之间的相关性,比如一帧图片被划分成多个16x16的块之后,相邻的块之间有很多明显的相似性。(2)时间冗余:时间相差较近的两张图片变化较小。(3)视觉冗余:我们的眼睛对某些细节不太敏感,对图像中的高频信息的敏感度小于低频信息,可以去除一些高频信息。(4)编码冗余:一幅图片中不同像素出现的概率是不同的,对于出现次数较多的像素,用少的位数来编码,对于出现次数较少的像素,用多

  8. Python——程序的运行原理 - 2

    Python程序运行原理Python是一种脚本语言,编辑完成的程序,也称源代码,可以直接运行。从计算机的角度看,Python程序的运行过程包含两个步骤:解释器将源代码翻译成字节码(即中间码),然后由虚拟机解释执行。Python程序文件的扩展名通常为.py。在执行时,首先由Python解释器将.py文件中的源代码翻译成中间码,这个中间码是一个扩展名为.pyc的文件,再由Python虚拟机(PythonVirtualMachine,PVM)逐条将中间码翻译成机器指令执行。需要说明的是,pyc文件保存在Python安装目录的pycache文件夹下,如果Python无法在用户的计算机上写人字节码,字节

  9. mysql - Rails 数据库连接池的工作原理 - 2

    我正在学习Rails数据库连接池概念。在Rails应用程序中,我将池大小定义为5。我对连接池大小的理解如下。当服务器启动时,rails会自动创建n个在database.yml文件中定义的连接。在我的例子中,它将创建5个连接,因为池大小为5。在每个http请求上,如果需要访问数据库,rails将使用连接池中的可用连接来处理请求。但我的问题是,如果我一次达到1000个请求,那么大部分请求将无法访问数据库连接,因为我的连接池大小只有5个。我上面对rails连接池的理解对吗??谢谢, 最佳答案 目的:数据库连接不是线程安全的;所以Activ

  10. ElasticSearch——刷盘原理流程 - 2

    ElasticSearch——刷盘原理流程刷盘原理流程名词和操作解释相关设置刷盘原理流程整个过程会分成几步:数据会同时写入buffer缓冲区和translog日志文件buffer缓冲区满了或者到时间了(默认1s),就会将其中的数据转换成新的segment并写入系统文件缓存,这一步叫refresh其中后台会自动合并小的segment成大的segment;这一步叫段合并当translog达到大小的阈值(默认512M)或者flush默认时长(30m),则会执行flush操作:内存中数据写入新的segment放入缓存(清空内存区)一个commitpoint写入磁盘,表示哪些segment已写入磁盘将缓

随机推荐