相机标定简介

1.背景

机器人视觉应用中,手眼标定是一个非常基础且关键的问题。简单来说手眼标定的目的就是获取机器人坐标系和相机坐标系(或者像素坐标系)的关系,最后将视觉识别的像素坐标转换到机器人坐标系下。

2.两大类型的手眼标定

手眼标定行业内主要分为两种形式,根据相机固定的地方不同,如果相机和机器人末端固定在一起,就称之为“眼在手”,如果相机固定在机器人外面的底座上,则称之为眼在外。

2.1 眼在手的标定

如图所示,当相机固定于机械臂末端时,此时相机坐标系camera和机械臂末端坐标系end固定为一常矩阵,他们两者的转化关系 e n d T c a m e r a ^{end}T_{camera} endTcamera即为待求解的量,保持标定板位置不变,则棋盘格角点在机器人基坐标系的坐标是固定的

b a s e p = b a s e T e n d e n d T c a m e r a c a m e r a p ^{base}p=^{base}T_{end}{^{end}}T_{camera}{^{camera}}p basep=baseTendendTcameracamerap

其中 b a s e p ^{base}p basep代表固定在某个位置的标定板的点在基坐标系下的坐标,这个坐标是保持不变的,这个坐标的计算如下: 在机械臂末端装上探针,直接由末端去触碰标定板格点,根据机器人正向运动学或者示教器(机器人控制系统)可以得到角点在机器人基坐标系下的坐标 b a s e p ^{base}p basep
接着我们控制机器人变换几个不同的姿态并用相机拍摄标定板识别出角点在相机坐标系下的坐标(这里假设已知,实际还有一个像素坐标系至相机坐标系的转化),接着分2D相机和3D相机讨论。

  • 3D相机:因为3D相机可以直接识别测量出棋盘格角点以及对应的3D坐标 c a m e r a p ^{camera}p camerap,则对前式作简单的变换:

( b a s e T e n d ) − 1 b a s e p ( c a m e r a p ) − 1 = e n d T c a m e r a (^{base}T_{end}){^{-1}}{^{base}p}({^{camera}}p)^{-1}={^{end}}T_{camera} (baseTend)1basep(camerap)1=endTcamera

左边中的三个量都是已知量,因此标定矩阵 e n d T c a m e r a ^{end}T_{camera} endTcamera即可求出。

  • 2D相机:因为2D相机无法测量深度值,因此无法重建测量出来目标物体的3D坐标信息。一般2D相机只用于识别平面上物体的位移和旋转关系,可以通过下面这个方法直接估计目标点在基坐标系下的位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IT89ZOCM-1588936292875)(./assets/7.jpg)]

如图所示,我们可以通过摆放三个标志物于相机视野的角落,这样识别出来三个位置点在像素坐标系中的坐标 [ u 0 , v 0 ] T [u_0,v_0]^T [u0,v0]T, [ u 1 , v 1 ] T [u_1,v_1]^T [u1,v1]T, [ u 2 , v 2 ] T [u_2,v_2]^T [u2,v2]T.然后我们可以构建平行四边形,用两个坐标轴的向量去计算三个位置点在图像坐标系下的坐标 [ u i , v i ] T [u_i,v_i]^T [ui,vi]T,注意这里的坐标轴不需要是直角坐标轴。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1BI4bMZ-1588936292876)(./assets/8.jpg)]

然后我们通过在机器人末端安装探针,通过示教器移动机器人至标志物处,得到这三个位置点在机器人基座表系下坐标 [ x 0 , y 0 , z 0 ] T [x_0,y_0,z_0]^T [x0,y0,z0]T, [ x 1 , y 1 , z 1 ] T [x_1,y_1,z_1]^T [x1,y1,z1]T, [ x 2 , y 2 , z 2 ] T [x_2,y_2,z_2]^T [x2,y2,z2]T,这三个点在一个平面上。根据相似三角形的原理,我们可以计算出目标点在机器人基坐标系下的坐标 b a s e p i = [ x i , y i , z i ] T ^{base}p_i=[x_i,y_i,z_i]^T basepi=[xi,yi,zi]T

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C45pJ2yR-1588936292878)(./assets/9.jpg)]

于是通过上式我们可以将目标点的像素坐标 [ u i , v i ] T [u_i,v_i]^T [ui,vi]T转化为在机器人基坐标系下的三维坐标 b a s e p i = [ x i , y i , z i ] T ^{base}p_i=[x_i,y_i,z_i]^T basepi=[xi,yi,zi]T,这个方法需要目标检测平面和相机平面平行。(我们应该就用的这个方法)

2.2 眼在手外的标定

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-acNBe8tE-1588936292880)(./assets/11.jpg)]

这种关系下, 机器人基坐标系base和相机坐标系camera之间的关系固定不变,他们两者的关系 b a s e T c a m e r a ^{base}T_{camera} baseTcamera即为待求解的量,棋盘格角点坐标在机器人末端坐标系下的坐标是固定的。

  • 3D相机

相机的图像坐标为二维坐标,代表了在图像中的行数和列数。将二维的图像坐标转换为在相机坐标系下的三维坐标,需要用到相机的内参公式和深度值:

在这里插入图片描述

z为目标点的深度值,3D相机能够测出来目标点的深度,从而能够计算出目标点在相机坐标系下的3维坐标 c a m e r a p ^{camera}p camerap,相机相关内参一般相机会提供,如果没有给出,则我们需要通过张正友标定法标定相机,接下来我们需要测量出标定板的角点在机器人基坐标系下的坐标 b a s e p ^{base}p basep,便可以通过下式标定出机器人和相机之间的转化矩阵 b a s e T c a m e r a ^{base}T_{camera} baseTcamera

在这里插入图片描述

b a s e p ^{base}p basep可以通过如下方法求得:

在这里插入图片描述
其中 b a s e T e n d ^{base}T_{end} baseTend e n d T b o a r d ^{end}T_{board} endTboard分别代表机器人末端坐标系到基坐标系的转化矩阵和棋盘格坐标系到机器人末端坐标系的转换矩阵, b a s e T e n d ^{base}T_{end} baseTend可以实时根据机器人正运动学得到,而 e n d T b o a r d ^{end}T_{board} endTboard是固定不变的,可以通过测量两者之间的偏移和旋转得到,一般我们设棋盘格的左上角为原点,然后测量或者根据尺寸三维模型得到棋盘格原点到机器人末端坐标系原点的平移坐标,一般棋盘格平面与机器人末端平面平行,这样旋转关系也知道了,于是可计算得到 e n d T b o a r d ^{end}T_{board} endTboard b o a r d p ^{board}p boardp代表棋格盘角点在棋盘格坐标系下的坐标,这个同样根据棋盘格的尺寸得到。

  • 2D相机:
    • 2D相机一般用于平面的物体识别,只需估计出一个平面的z坐标,然后便可以根据前式计算得到目标点在相机坐标下的坐标,之后的标定步骤和3D相机一样

    • 同2.1中2D相机的方法一样,只要目标物体所在工作平台的参考点集可以实时被测量得到,同时我们又事先标定了这个参考点集在机器人坐标系下的坐标,那么我们可以通过同样的比例关系计算得到目标点在机器人基坐标系的坐标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值