手眼标定原理(眼在手上和眼在手外)
手眼标定是指求解出工业机器人的末端坐标系与相机坐标系之间的坐标变换关系,或者工业机器人的基底坐标系与相机坐标系之间的坐标变换关系。手眼标定有两种情形:第一种是相机(眼)固定在机器臂(手)的末端,相机相对于机器臂末端是固定的,相机跟随机器臂移动,这种方式的手眼标定成为 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 坐标系下的某个点P0P_0P0,根据已知的相机外参(转换矩阵T1T_1T1)能够转换到 cam 坐标系下点 P1 ,再根据待求的手眼标定矩阵(转换矩阵 X )能够转换到 end 坐标系下点 P2P_2P2,然后根据已知的机器人自身参数(转换矩阵T3T_3T3)能够转换到 base 坐标系下点 P3P_3P3。因此能够得到关系式如下:
T3XT1P0=P3(1)T_3XT_1P_0=P_3 \tag{1} T3XT1P0=P3(1)
移动机器臂,对于同一点,P0P_0P0和P3P_3P3的坐标值不变,只是P1P_1P1和P2P_2P2的坐标值改变了,上述关系式变为如下形式:
T3′XT1′P0=P3(2)T_3{^\prime}XT_1^{\prime}P_0=P_3 \tag{2} T3′XT1′P0=P3(2)
上式中T3′T_3^\primeT3′和T1′T_1^\primeT1′同样是第二次测量的已知参数。联立(1)和(2)式可以得到如下关系式:
T3XT1=T3′XT1′(3)T_3XT_1=T_3{^\prime}XT_1^{\prime} \tag{3} T3XT1=T3′XT1′(3)
对式(3)变换一下,可得:
T3′−1T3X=XT1′T1−1(4)T_3 ^{\prime-1}T_3 X=XT_1^{\prime} T_1^{-1} \tag{4} T3′−1T3X=XT1′T1−1(4)
上式可以看成AX=XBAX=XBAX=XB方程形式,且矩阵A=T3′−1T3A=T_3 ^{\prime-1}T_3A=T3′−1T3和B=T1′T1−1B=T_1^{\prime} T_1^{-1}B=T1′T1−1都是已知的。对手眼标定方程AX=XBAX=XBAX=XB求解,即可得到手眼转换矩阵XXX的值。
2、眼在手外的手眼标定
eye-to-hand的手眼标定示意图如下图2所示。相机固定在机器臂之外,相机和机器臂底座相对静止。其中,相机坐标系为OcO_cOc,标定板坐标系为OwO_wOw,机器臂末端坐标系为OeO_eOe,机器臂底座坐标系为ObO_bOb。涉及到几个坐标系的转换,即标定板坐标系到相机坐标系的转换关系TwcT_w^cTwc,相机坐标系到机器臂底座坐标系的转换关系XXX,机器臂底座坐标系到机器臂末端坐标系的转换关系TbeT_b^eTbe,其中相机坐标系到机器臂底座坐标系的转换关系XXX即为需要求解的手眼标定矩阵。
对于上述转换关系,标定板固定在机器臂末端,在某一位姿下,标定板上的点在标定板坐标系下的坐标值是P1P_1P1,经过Twc、Tcb、TbeT_w^c、T_c^b、T_b^eTwc、Tcb、Tbe的坐标系转换关系转换之后,标定板上的点能够转到机器臂末端坐标系下的坐标值P3P_3P3,转换关系如下:
TbeXTwcP1=P3(1)T_b^eXT_w^cP_1=P3 \tag{1} TbeXTwcP1=P3(1)
然后机器臂变换一下位姿,能够得到另一组上述形式相同的公式,即:
Tbe′XTwc′P1=P3(2)T_b^{e\prime}XT_w^{c\prime}P_1=P3 \tag{2} Tbe′XTwc′P1=P3(2)
上述公式(1)和(2)中的Tbe、Tbe′T_b^e、T_b^{e\prime}Tbe、Tbe′能够通过机器人的位姿输出得到,Twc、Twc′T_w^c、T_w^{c\prime}Twc、Twc′能够通过单目相机标定的外参得到。上式(1)(2)能够转换成以下形式:
TbeXTwc=Tbe′XTwc′(3)T_b^eXT_w^c=T_b^{e\prime}XT_w^{c\prime} \tag{3} TbeXTwc=Tbe′XTwc′(3)
进一步的能够转成:
Tbe′−1TbeX=XTwc′Twc−1(4)T_b^{e\prime-1}T_b^eX=XT_w^{c\prime}T_w^{c-1} \tag{4} Tbe′−1TbeX=XTwc′Twc−1(4)
公式(4)能够理解成AX=XBAX=XBAX=XB的形式,此时A=Tbe′−1TbeA=T_b^{e\prime-1}T_b^eA=Tbe′−1Tbe、B=Twc′Twc−1B=T_w^{c\prime}T_w^{c-1}B=Twc′Twc−1,其中A、BA、BA、B都是已知数。通过变换多次机器臂末端位姿,对手眼标定方程AX=XBAX=XBAX=XB求解,即可得到手眼转换矩阵XXX的值。
手眼标定原理(眼在手上和眼在手外)相关推荐
- 遨博协作机器人ROS开发 - 机器人手眼标定原理
目录 一.简介 二.环境版本 三.学习目标 四.知识储备 五.课堂小结 六.课后练习 一.简介 大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),在前面课程中我们讲解了Intel ...
- halcon 手眼标定原理推导
记住一个很关键的点:我们最终求的是base 和Object之间的关系,无论是eye to hand 还是 eye in hand ,找不变的关系,推导中间量,最后推导base 和Object之间的关系 ...
- 3D相机机器人手眼标定(眼在手上)全过程
3D相机机器人手眼标定(眼在手上)全过程 简述 目前在机器人高层规划中,机器人越来越依赖于摄像头的反馈信息,比如自动打磨,焊接,喷涂的智能规划,或者一些分拣,码垛的规划. 在项目开始前, 第一步要做的 ...
- 机器人抓取平台搭建记录(六):手眼标定--眼在手上--Kinova Gen2 JACO2 七自由度机械臂--Realsense D435
吐槽一,手眼标定两个多月前就做好了,这篇文章也是两个多月前就写了,但当时不知出了什么差错,在我还没有写完想暂时保存一下草稿的时候,写的内容竟然没了小半.于是就拖到现在,拖到忘记了当时写作的思路,操作细 ...
- 基于ROS的手眼标定程序解决方案|支持眼在手外/上
大家好,我是小鱼.今天分享一个自己写的开源程序,欢迎大家围观~ 1.概览 如果教程对你有帮助,可以start一下~ 若需手眼标定小鱼付费-指导请添加微信:AiIotRobot 本程序支持眼在手上和眼在 ...
- 机器人抓取(五)—— 手眼标定 hand eye calibration
1. 原理篇 参考:机器人手眼标定的基础理论分析 3D视觉之手眼标定 胡春旭:"手眼"结合完成物体抓取应用 在实际应用中,我们通常需要将相机观察到的外界环境中物体的姿态从相机坐标系 ...
- 睿尔曼超轻量仿人机械臂--Realsense D435手眼标定
目录 1.环境要求 2.概述 3.开始前准备 4.aruco_ros配置 5.easy_handeye配置 6.启动相关launch文件开始标定 1.环境要求 本教程主要介绍RM机械臂与Realsen ...
- 机器人手眼标定快速精度验证方法
一.原理及流程 机器人的手眼标定原理在本文中不再过多描述,基本流程都是先标定相机的内外参数,然后标定两台相机之间的位置关系,如果相机是可以转动的话,还要标定转台与机械臂之间的关系. 在手眼标定完成后, ...
- 基于ROS的机械臂手眼标定-基础使用
机械臂手眼标定-基础使用 你好,我是小智,前一段时间折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂.于是想做一个比较简单易懂易用的手眼标定程序. 程序都是C ...
- 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)
你好,我是小智. 上一节介绍了手眼标定算法Tsai的原理,这一节介绍算法的代码实现,分别有Python.C++.Matlab版本的算法实现方式. 该算法适用于将相机装在手抓上和将相机装在外部两种情况 ...
最新文章
- Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏
- 重磅推出校园疫情填报系统,永洪BI助力疫情防控
- MySQL如何存储Emoji表情,UTF-8和UTF-8MB4字符编码有何区别
- 标记接口,注解和注解处理器的前世今生
- 排列与组合的Java递归实现 (参考)
- 模块化开发之sea.js实现原理总结
- python元编程运用_Python 中的元编程
- 拳王虚拟项目公社:怎么找低价电影票,低价电影票怎样赚钱,低价电影票实操赚钱方法?
- 4python全栈之路系列之scrapy爬虫s
- angularjs金额大写过滤器
- 全国首款网页版(web)真3D商城
- Spring bean注入之constructor-arg注入和property注入的区别
- html的跳转页面代码
- ps教程完整版(来自百度网盘)
- wps去除登陆_WPS强制用户登录功能,这是要闹哪样?
- mt管理器图片在哪个文件夹_微信apk用mt管理器 替换主界面背景图片是那个文件? 其他文件怎么替换 不要视频...
- Davinci DM6446开发攻略——DSP开发工程建立
- ORACLE 各类博客
- 推荐有关Qt书籍、Qt中文参考文档(网上在线教程)、QTCN开发网和Qt入门视频
- 在zedGraph曲线上显示数据,显示波峰,寻峰算法的实现