手眼标定之9点法

写在前面

由于涉及到公司的一些内容,本文仅做方法和思路记录,请见谅。

用途

9点法标定是工业上使用广泛的二维手眼标定,所谓二维,即工作平面限制在一个平面上,常用于从固定平面抓取对象进行装配等操作,这种应用场景可以满足大多数的工业应用场景。

使用过程

和一般的手眼标定一样的是,9点法标定也分eye_in_hand和eye_to_hand两种,标定的结果分别是相机坐标系与工具坐标系的转换矩阵(4*4),以及相机坐标系和工件坐标系的转换矩阵。以下以eye_in_hand为例:

机器人手持相机在平行于工作平面的平面上分别做沿着田字格走9个点,然后回到田字格中心,分别左右旋转一定度数。记录机器人每次移动的位置,同时相机进行拍照,对视野内的同一个mark点进行记录。因此,可以得到12组机器人位置和图像坐标系中点位映射关系。

算法原理

相机内参求取

相机内参求取的主要思想是求图像坐标系x-y平面到标定平面的仿射变换。图像坐标系中的点位在每次拍照时可以获得,标定平面内的点位可根据标定的过程进行自定义,由此求得仿射变换,在四参数模型的相机内参中,加上相机的分辨率,可以求出相机的内参。

外参求取

由于9个平移点上在同一个平面上,因此可使用上述点和图像坐标系中的点和求出的内参矩阵来计算外参矩阵。该部分还需要求旋转的中心,待续。

手眼转换(以eye_in_hand为例)

根据求得的相机外参,记录的机器人每次移动的位置,即可求出相机坐标系和工具坐标系的转换矩阵,即为手眼标定所求结果。该部分详见:https://blog.csdn.net/u011089570/article/details/47945733。


另推荐一个比较有意思的文章,原理和本文类似:https://blog.csdn.net/qq_16481211/article/details/79764730。

以下是手眼标定法的MATLAB代码,其中手眼标定算法使用了`calibrateHandEye`函数: ```matlab % 采集机器人和相机的数据,计算机器人末端执行器的位姿和相机的视角变换矩阵 % robotPoses: 机器人的位姿,Nx4x4矩阵,N为位姿数量 % cameraPoses: 相机的位姿,Nx4x4矩阵,N为位姿数量 % robotBase: 机器人末端执行器在基坐标系下的位姿,4x4矩阵 % cameraBase: 相机在基坐标系下的位姿,4x4矩阵 % robotEndEffector: 机器人末端执行器在末端执行器坐标系下的位姿,4x4矩阵 % cameraOptical: 相机在相机坐标系下的位姿,4x4矩阵 % 将机器人末端执行器和相机之间的位姿数组转换为相对位姿数组 % robotPosesRel: 机器人末端执行器之间的相对位姿,(N-1)x4x4矩阵 % cameraPosesRel: 相机之间的相对位姿,(N-1)x4x4矩阵 robotPosesRel = zeros(size(robotPoses)); cameraPosesRel = zeros(size(cameraPoses)); for i = 2:size(robotPoses, 1) robotPosesRel(i-1,:,:) = robotPoses(i,:,:)\robotPoses(i-1,:,:); cameraPosesRel(i-1,:,:) = cameraPoses(i,:,:)\cameraPoses(i-1,:,:); end % 手眼标定 % A: 机器人末端执行器之间的相对位姿,(N-1)x6矩阵,N为位姿数量 % B: 相机之间的相对位姿,(N-1)x6矩阵,N为位姿数量 % robotEndEffector: 机器人末端执行器在末端执行器坐标系下的位姿,4x4矩阵 % cameraOptical: 相机在相机坐标系下的位姿,4x4矩阵 [A, B] = handeye(robotPosesRel, cameraPosesRel, robotEndEffector, cameraOptical); % 使用calibrateHandEye函数计算机器人末端执行器和相机之间的变换关系 % robotBaseToCameraOptical: 机器人末端执行器和相机之间的变换关系,4x4矩阵 % d: 机器人末端执行器和相机之间的距离,标量 [robotBaseToCameraOptical, d] = calibrateHandEye(A, B); ``` 需要注意的是,`handeye`函数的输入参数`robotPosesRel`和`cameraPosesRel`是机器人末端执行器和相机之间的相对位姿数组,因此需要先将机器人末端执行器和相机之间的位姿数组转换为相对位姿数组。此外,`calibrateHandEye`函数的输出参数`robotBaseToCameraOptical`是机器人末端执行器和相机之间的变换关系,即机器人末端执行器坐标系到相机坐标系的变换矩阵,需要根据具体的应用进行相应的转换。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值