前言
手眼标定是将相机坐标系下的物体坐标转换到机械臂坐标系下(比如机器人基座base系,或者自定义的世界系,如人形机械臂参考的固定的世界系等)的常用技术。常见的安装方式主要有如下两种
• In-Hand Camera:相机安装在机械臂的末端,随机械臂一起运动,用于获取更接近操作的视觉信息。
• Fixed Camera:相机固定在某个位置,不随机械臂运动,适用于获取整个工作区域的视觉信息。
In-Hand Camera
In-Hand Camera 的标定是为了求出相机与机械臂末端工具(TOOL)之间的变换关系,一般是一个大小为 4×4 的刚体变换矩阵,在 KDL 可以用 Frame 声明这个变量。这里统一采用 TBA 的记号,表示坐标系 B 在坐标系 A 下的位姿变换。比如 TEB 表示机械臂末端(end-effector)或法兰在基座 BASE 下的表示;假设工具参数已提前通过 4 点法或 6 点法标定得到,视作为一个精确的值。
标定时,将一个已知精确大小的标定板(比如棋盘格)固定放置,然后让机械臂运动,以使相机可以从多个不同角度拍摄标定板图像。拍摄图像时要确保棋盘格图像不超出图像边界,并记录对应的机械臂末端位姿。假设相机内参已知,每一张标定板图像都可以算出标定板(P)在相机(C)下的位姿 TPC;其逆变换为相机(C)在标定板(P)下的位姿 TCP。这里定义 TCE 为相机在末端工具坐标系下的表示,对于每一张图片有如下关系式成立(左右两边均为 TCB,即相机在 BASE 下的表示):
TEBTCE=TPBTCP
做下一步变换,消除 TPB。由于标定板相对 BASE 固定,所以对于任意一组标定数据,有(下标 i 表示第 i 个数据,j 类似):
TE,iBTCETP,iC=TE,jBTCETP,jC
两边左乘 TB,jE,有:
TB,jETE,iBTCETP,iC=TCETP,jC
再右乘 TC,iP,有:
TB,jETE,iBTCE=TCETP,jCTC,iP
其中 TB,jETE,iB 和 TP,jCTC,iP 都是已知的,方程就变为典型的 AX=XB 形式:
AijX=XBij
其中:
AijXBij=TB,jETE,iB,=TCE,=TP,jCTC,iP
这类方程有很多解法,比如 Tsai 方法、dual-quaternion 方法以及 Kronecker Product 方法等。将所需参数输入到具体算法中后,即可标定出 TCE 的结果,也就是相机在工具系下的表示。这样物体在相机系下的表示就可以转到末端工具系下进行表示了。比如相机识别了焊缝点位信息后,转到工具系下就可以直接做焊接相关的工作。
Fixed Camera
对 Fixed Camera 进行手眼标定时,主要关注相机(C)在 Base frame(B)下的变换,也可以是相机到 World frame(W)之间的变换。在人形机器人中一般会转到世界系下去做表示。这里简单说明从 C 到 B 之间的转换。标定时有一些区别:相机固定在某个位置,比如人形机器人的头部位置;标定板固定在手上,然后运动机械臂,使相机能从不同视角拍摄到标定板。每拍摄图像时,同时记录当时机械臂末端的位姿(用工具或者法兰表示都可以)。
不难发现如下关系:
TEBTPE=TCBTPC
用上述同样的方式,有(此时末端工具,比如手与标定板之间的 TPE 是不变的):
TB,iETCBTP,iC=TB,jETCBTP,jC
同样的操作,有:
TE,jBTB,iETCB=TCBTP,jCTC,iP
又变成了 AX=XB 的形式:
AijX=XBij
其中:
AijXBij=TE,jBTB,iE,=TCB,=TP,jCTC,iP
同样求解即可得到 TCB,即相机在 BASE 下的表示;如果把 BASE 换成 World,则可以得到相机在世界系下的表示。
求解可以直接调用成熟的库如open-cv, 原理还是很简单的,这样对手眼标定这个常用的技术就有了更深入的认识了。若想知道更多的有关相机内外参的标定 可以看看张正友标定法, 就明白为啥要引入棋盘格进行标定了。
参考
[1] 【一文弄懂】张正友标定法-完整学习笔记-从原理到实战