1. 眼在手上

OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶


标定过程

标定板放置在固定位置,机器人变换不同的姿态,相机获取不同姿态下标定板图像目标
上图中描述了闭环的坐标系空间关系,包含以下部分:

  • OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_02 机器人末端的工具坐标系到机器人基坐标系的变换矩阵。
    可变量
  • OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_03 机器人末端的工具坐标系相机坐标系的变换矩阵。
    不变量
  • OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_04 标定板坐标系相机坐标系的变换矩阵。
    可变量
  • OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_05 标定板坐标系到机器人基坐标系的变换矩阵。
    不变量

闭环关系
OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_06

机器人每移动一个位姿,就能得到一个上述的闭环关系,又由于OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_07是不变量,可在多个姿态下得到的关系中任选两个将其消除。这里选择相邻的两次。
OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_08
相邻两次对OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_07进行消除:
OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_10
由于OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_11是不变的
OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_12

OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_13

等式两边分别左乘OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_14与右乘OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_15
OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_16
转换成
OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_17
其中:
OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_18

2. 眼在手外


标定过程

相机安装在机械手外的固定位置标定板安装在机器人末端位置,标定过程中机器人变换不同的位姿,相机分别拍摄在不同位姿下的标定板图像

目标
在下图中描述了闭环的坐标系空间关系,包含以下部分:

  • OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_02 机器人末端的工具坐标系到机器人基坐标系的变换矩阵。
    可变量
  • OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_20 标定板坐标系到机器人末端的工具坐标系的变换矩阵。
    不变量
  • OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_21 相机坐标系到标定板坐标系的变换矩阵。
    可变量
  • OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_22 机器人基坐标系到相机坐标系的变换矩阵。
    不变量

闭环关系
OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_23

由于$ ^{tool}H_{cal}$是不变量,可通过前后两次姿态的结果对其进行消除。
OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_24
等价于
OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_25
相邻两次消除OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_26
OPENCV中AKAZE和BRISK opencv calibratehandeye_OPENCV中AKAZE和BRISK_27

等价于
OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_28
等价于
OPENCV中AKAZE和BRISK opencv calibratehandeye_自动驾驶_29
等价于
OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_30
其中
OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_31

3. OpenCV

根据以上分析,无论是眼在手上还是眼在手外,都最终转换成对方程AX=BX的求解。OpenCV提供了手眼标定求解的算子calibrateHandEye

void
cv::calibrateHandEye(InputArrayOfArrays 	R_gripper2base,
                  InputArrayOfArrays 	t_gripper2base,
                  InputArrayOfArrays 	R_target2cam,
                  InputArrayOfArrays 	t_target2cam,
                  OutputArray 	        R_cam2gripper,
                  OutputArray 	        t_cam2gripper,
                  HandEyeCalibrationMethod method = CALIB_HAND_EYE_TSAI)
  • 眼在手上
    这种情况下,算子参数名称的描述与真实输入相对应。
void
cv::calibrateHandEye(InputArrayOfArrays 	R_gripper2base, // <=> R_tool2base
                     InputArrayOfArrays 	t_gripper2base, // <=> T_tool2base
                     InputArrayOfArrays 	R_target2cam,	// <=> R_cal2cam
                     InputArrayOfArrays 	t_target2cam,	// <=> T_cam2cam
                     OutputArray 	        R_cam2gripper,	// <=> R_cam2tool
                     OutputArray 	        t_cam2gripper, 	// <=> T_cam2tool
                     HandEyeCalibrationMethod method = CALIB_HAND_EYE_TSAI)

OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_32OPENCV中AKAZE和BRISK opencv calibratehandeye_opencv_32

  • 眼在手外
    这种情况下,算子参数名称的描述与真实输入有所不同
void
cv::calibrateHandEye(InputArrayOfArrays 	R_gripper2base,	// <=> R_base2tool
                     InputArrayOfArrays 	t_gripper2base,	// <=> T_base2tool
                     InputArrayOfArrays 	R_target2cam,	// <=> R_cal2cam
                     InputArrayOfArrays 	t_target2cam,	// <=> T_cam2cam
                     OutputArray 	        R_cam2gripper,	// <=> R_cam2base
                     OutputArray 	        t_cam2gripper,	// <=> T_cam2base
                     HandEyeCalibrationMethod method = CALIB_HAND_EYE_TSAI)

OPENCV中AKAZE和BRISK opencv calibratehandeye_计算机视觉_34