眼在手外标定

该文介绍了如何通过OpenCV库来实现手眼标定的过程,具体是机器人在触碰工作空间内的五个非共线点后,获取这些点在基座和相机坐标系下的坐标,然后利用线性代数的解方程方法(如SVD分解)求解手眼矩阵,从而完成坐标系之间的转换。
摘要由CSDN通过智能技术生成

手眼标定之眼在手外
标定机器人末端工具坐标系,操作机器人触碰机器人工作空间内不共线的五个点,得到这五个点在机器人基座坐标系下的坐标。双目相机or深度相机对应读取这五个点在相机坐标系的坐标,解方程AX=B,得到手眼矩阵X。
解方程的方法可借助opencv::solve()函数,
示例代码见下:

#include <opencv2/imgproc/imgproc.hpp> 
#include<opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
using namespace std;


int main{

Mat A = (Mat_<double>(5, 4) <<
	InputOriPosition1[0], InputOriPosition1[1], InputOriPosition1[2], 1,
	InputOriPosition2[0], InputOriPosition2[1], InputOriPosition2[2], 1,
	InputOriPosition3[0], InputOriPosition3[1], InputOriPosition3[2], 1,
	InputOriPosition4[0], InputOriPosition4[1], InputOriPosition4[2], 1,
	InputOriPosition5[0], InputOriPosition5[1], InputOriPosition5[2], 1
	);
Mat B = (Mat_<double>(5, 3) <<
	OutputNewPosition1[0], OutputNewPosition1[1], OutputNewPosition1[2],
	OutputNewPosition2[0], OutputNewPosition2[1], OutputNewPosition2[2],
	OutputNewPosition3[0], OutputNewPosition3[1], OutputNewPosition3[2],
	OutputNewPosition4[0], OutputNewPosition4[1], OutputNewPosition4[2],
	OutputNewPosition5[0], OutputNewPosition5[1], OutputNewPosition5[2]
	);
Mat matrix = Mat(4, 3, CV_32F);
solve(A, B, matrix, DECOMP_SVD);
matrix = matrix.t();
Mat RT_h = (Mat_<double>(1, 4) << 0, 0, 0, 1);
vconcat(matrix, RT_h, matrix);//4*4
std::cout << "matrix: " << matrix << std::endl;

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲寻可解万物之法ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值