手眼标定原理

手眼标定原理

Write By Champrin From 2022-11-03 To 2022-11-04.
GUET Evolution Team Visual Group
参考资料:
外文教程
5.2-手眼标定(外参标定)

要实现由 图像目标点 到 空间实际物体上抓取点 之间的坐标转换,就必须拥有 相机 与 机械臂 之间的位姿转换关系,即手眼关系,因此这种标定就称之为手眼标定。

根据相机固定的地方不同,标定的转换关系也不同,有两种:如果 相机 与 机械臂末端 固定在一起,就称之为“眼在手(eye in hand)”;如果 相机 与 机械臂以外 固定在一起,则称之为“眼在外(eye to hand)”。

总的来说:任意类型的相机标定一定是在标定一个相对不变的量,不会去标定一个变化的量,这会在两种手眼标定所标定的变换矩阵有所体现。

坐标系名称:

  • base:机械臂基地坐标系
  • gripper:机械臂末端坐标系(夹爪坐标系)
  • cam:相机坐标系
  • target:标定板坐标系(世界坐标系)

眼在手外(Eye To Hand)及其推导

相机固定在机械臂以外的地方,因此 相机 与 机械臂基底 在整个机械臂抓取过程中的相对位置保持不变,手眼标定求解的量为 相机坐标系 相对于 机械臂基底坐标系 的变换矩阵。

这种关系下,几次运动,标定板 和 机械臂末端 的位姿关系始终不变也就是 标定板坐标系 相对于 机械臂末端坐标系 的变换矩阵不变,可以以此建立方程组求解标定结果。

求解目标:

相机坐标系 相对于 机械臂基底坐标系 的变换矩阵 \({^{base}_{cam}T}\)

实现方法:

  1. 把标定板固定在机械臂末端
  2. 使用相机拍摄不同机械臂姿态下的标定板图片\(n\)\((n>3)\),建议\(n>10\)

已知对每张图片有:

\[{^{gripper}_{target}T} = {^{gripper}_{base}T}{^{base}_{cam}T}{^{cam}_{target}T} \]

  • \({^{gripper}_{target}T}\):未知量.由于标定板固定在机械臂末端,所以对每组图片,该变换矩阵都相同
  • \({^{gripper}_{base}T}\):可由机械臂末端位姿参数求得
  • \({^{cam}_{target}T}\):可由通过拍摄的标定板图片直接求解

设标定图为第 \(1 - n\) 张,那么有:

\[ {^{gripper}_{target}T^{(1)}} = {^{gripper}_{target}T^{(2)}} = \cdots = {^{gripper}_{target}T^{(n)}} \]

\[ {^{gripper}_{base}T^{(1)}} \, {^{base}_{cam}T} \, {^{cam}_{target}T^{(1)}} = {^{gripper}_{base}T^{(2)}} \, {^{base}_{cam}T} \, {^{cam}_{target}T^{(2)}} \\ {^{gripper}_{base}T^{(2)}} \, {^{base}_{cam}T} \, {^{cam}_{target}T^{(2)}} = {^{gripper}_{base}T^{(3)}} \, {^{base}_{cam}T} \, {^{cam}_{target}T^{(3)}} \\ \cdots \\ {^{gripper}_{base}T^{(n - 1)}} \, {^{base}_{cam}T} \, {^{cam}_{target}T^{(n - 1)}} = {^{gripper}_{base}T^{(n)}} \, {^{base}_{cam}T} \, {^{cam}_{target}T^{(n)}} \\ \]

整理得:

\[ {(^{gripper}_{base}T^{(2)})^{(-1)}} \, {^{gripper}_{base}T^{(1)}} \, {^{base}_{cam}T} = {^{base}_{cam}T} \, {^{cam}_{target}T^{(2)}} \, {(^{cam}_{target}T^{(1)})^{(-1)}} \\ {(^{gripper}_{base}T^{(3)})^{(-1)}} \, {^{gripper}_{base}T^{(2)}} \, {^{base}_{cam}T} = {^{base}_{cam}T} \, {^{cam}_{target}T^{(3)}} \, {(^{cam}_{target}T^{(2)})^{(-1)}} \\ \cdots \\ {(^{gripper}_{base}T^{(n)})^{(-1)}} \, {^{gripper}_{base}T^{(n - 1)}} \, {^{base}_{cam}T} = {^{base}_{cam}T} \, {^{cam}_{target}T^{(n)}} \, {(^{cam}_{target}T^{(n - 1)})^{(-1)}} \\ \]

令:

\[\begin{cases} {A_i} = {(^{gripper}_{base}T^{(i + 1)})^{(-1)}} \, {^{gripper}_{base}T^{(i)}} \\ {X} = {^{base}_{cam}T} \\ {B_i} = {^{cam}_{target}T^{(i + 1)}} \, {(^{cam}_{target}T^{(i)})^{(-1)}} \end{cases} \, , \, i \in [1, n - 1] \]

得到 \(n\) 个方程组,标定结果转为求解这 \(n\) 个方程组:

\[ {A_i} \, {X} = {X} {B_i} \, , \, i \in [1, n - 1] \]

眼在手上(Eye In Hand)及其推导

相机固定在机械臂末端,因此 相机 与 机械臂末端 在整个机械臂抓取过程中的相对位置保持不变,手眼标定求解的量为 相机坐标系 相对于 机械臂末端坐标系 的变换矩阵。

这种关系下,几次运动,标定板 和 机械臂基底 的相对位置始终不变,也就是 标定板坐标系 相对于 机械臂基底坐标系 的变换矩阵不变,可以以此建立方程组求解标定结果。

求解目标:

相机坐标系 相对于 机械臂末端坐标系 的变换矩阵 \({^{gripper}_{cam}T}\)

实现方法:

  1. 把标定板放到固定位置不动
  2. 移动机械臂末端,从不同角度拍摄 \(n\) 张标定板图片

已知对每张图片有:

\[ {^{base}_{target}T} = {^{base}_{gripper}T} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T} \]

  • \({^{base}_{target}T}\):未知量,但是由于标定板全程固定在一个位置不动,所以对每组图片,该变换矩阵都相同,所以以此建立方程
    • 因此要保证在标定时,机械臂基底与标定板的相对位置不变
  • \({^{base}_{gripper}T}\):可由机械臂末端位姿参数求得
  • \({^{cam}_{target}M}\):可由通过拍摄的标定板图片直接求解

设标定图为第 \(1 - n\) 张,那么有:

\[ {^{base}_{target}T^{(1)}} = {^{base}_{target}T^{(2)}} = \cdots = {^{base}_{target}T^{(n)}} \]

\[ {^{base}_{gripper}T^{(1)}} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(1)}} = {^{base}_{gripper}T^{(2)}} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(2)}} \\ {^{base}_{gripper}T^{(2)}} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(2)}} = {^{base}_{gripper}T^{(3)}} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(3)}} \\ \cdots \\ {^{base}_{gripper}T^{(n - 1)}} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(n - 1)}} = {^{base}_{gripper}T^{(n)}} \, {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(n)}} \\ \]

整理得:

\[ {(^{base}_{gripper}T^{(2)})^{(-1)}} \, {^{base}_{gripper}T^{(1)}} \, {^{gripper}_{cam}T} = {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(2)}} \, {(^{cam}_{target}T^{(1)})^{(-1)}} \\ {(^{base}_{gripper}T^{(3)})^{(-1)}} \, {^{base}_{gripper}T^{(2)}} \, {^{gripper}_{cam}T} = {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(3)}} \, {(^{cam}_{target}T^{(2)})^{(-1)}} \\ \cdots \\ {(^{base}_{gripper}T^{(n)})^{(-1)}} \, {^{base}_{gripper}T^{(n - 1)}} \, {^{gripper}_{cam}T} = {^{gripper}_{cam}T} \, {^{cam}_{target}T^{(n)}} \, {(^{cam}_{target}T^{(n - 1)})^{(-1)}} \\ \]

令:

\[\begin{cases} {A_i} = {(^{base}_{gripper}T^{(i + 1)})^{(-1)}} \, {^{base}_{gripper}T^{(i)}} \\ {X} = {^{gripper}_{cam}T} \\ {B_i} = {^{cam}_{target}T^{(i + 1)}} \, {(^{cam}_{target}T^{(i)})^{(-1)}} \\ \end{cases} \, , \, i \in [1, n - 1] \]

得到 \(n\) 个方程组,标定结果转为求解这 \(n\) 个方程组:

\[ {A_i} \, {X} = {X} {B_i} \, , \, i \in [1, n - 1] \]

也就是说,无论是眼在手外还是手在眼上,最终都是以 \(n - 1\) 个方程组(若标定图有 \(n\) 张),去求解 \(AX=XB\) 中的 \(X\) 即为手眼标定结果。

\(X\) 即为我们要求得的变换矩阵,里面有6个线性无关的变量;其中旋转 3 个自由度,平移 3 个自由度。

求解 \(AX=XB\)

OpenCV 4.1.0 及以上的版本,带有了求解 \(AX=XB\) 的方法——cv::calibrateHandEye(),调用方法求解即可。

posted @ 2023-08-19 19:57  Champrin  阅读(540)  评论(0编辑  收藏  举报