opencv4.2中求解手眼标定方程AX=XB

opencv函数:

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 )

前四个是输入参数,第五和第六是输出参数;

最后一个是手眼标定方式:

CALIB_HAND_EYE_TSAI:参考文献[1]

CALIB_HAND_EYE_PARK:参考文献[2]

CALIB_HAND_EYE_HORAUD:参考文献[3]

CALIB_HAND_EYE_ANDREFF:参考文献[4]

CALIB_HAND_EYE_ANDIILIDIS:参考文献[5]

参考文献:

【1】R. Tsai, R. Lenz A New Technique for Fully Autonomous and Efficient 3D Robotics Hand/EyeCalibration
【2】F. Park, B. Martin Robot Sensor Calibration: Solving AX = XB on the Euclidean Group
【3】R. Horaud, F. Dornaika Hand-Eye Calibration
【4】N. Andreff, R. Horaud, B. Espiau On-line Hand-Eye Calibration
【5】K. Daniilidis Hand-Eye Calibration Using Dual Quaternions

原文链接:https://blog.csdn.net/AlonewaitingNew/article/details/89430652

 

OpenCV手眼标定函数是`cv::calibrateHandEye()`。这个函数用于计算相机与机器人末端执行器之间的转换矩阵。下面是使用`cv::calibrateHandEye()`函数的基本步骤: 1. 准备手眼标定的数据,包括相机和机器人末端执行器的位姿数据。 2. 将位姿数据转换为相机和机器人末端执行器之间的变换矩阵。 3. 通过调用`cv::calibrateHandEye()`函数计算相机和机器人末端执行器之间的转换矩阵。该函数的参数包括4个向量和矩阵,分别是机器人末端执行器到相机的旋转和平移向量,相机到机器人基座的旋转和平移向量,以及相机内参数矩阵。 4. 根据计算得到的转换矩阵对相机和机器人末端执行器之间的关系进行验证。 下面是一个示例代码: ```cpp // 准备手眼标定的数据 std::vector<cv::Mat> Tc_vec, Tb_vec; // 将位姿数据转换为相机和机器人末端执行器之间的变换矩阵 for (int i = 0; i < num_samples; i++) { cv::Mat Tc, Tb; // 从相机和机器人末端执行器的位姿数据计算变换矩阵 ... Tc_vec.push_back(Tc); Tb_vec.push_back(Tb); } // 计算相机和机器人末端执行器之间的转换矩阵 cv::Mat R, t; cv::calibrateHandEye(Tc_vec, Tb_vec, eye_in_hand, R, t); // 验证手眼标定的结果 cv::Mat Tc, Tb; // 用相机和机器人末端执行器之间的变换矩阵计算变换矩阵 cv::Mat T = Tc.inv() * Tb; // 用手眼标定的结果计算变换矩阵 cv::Mat T_est = cv::Mat::eye(4, 4, CV_64F); R.copyTo(T_est(cv::Rect(0, 0, 3, 3))); t.copyTo(T_est(cv::Rect(3, 0, 1, 3))); // 比较两个变换矩阵是否相等 if (cv::norm(T - T_est) < threshold) { std::cout << "Hand-eye calibration succeeded!" << std::endl; } else { std::cout << "Hand-eye calibration failed!" << std::endl; } ``` 其,`Tc_vec`和`Tb_vec`分别存储相机和机器人末端执行器的变换矩阵,`eye_in_hand`是一个布尔值,表示相机是否安装在机器人末端执行器上。`R`和`t`是输出参数,分别存储相机和机器人末端执行器之间的旋转和平移向量。`Tc`和`Tb`是相机和机器人末端执行器之间的变换矩阵。`T`和`T_est`分别是用相机和机器人末端执行器之间的变换矩阵和手眼标定的结果计算得到的变换矩阵。`threshold`是一个阈值,用于判断两个变换矩阵是否相等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值