四轴平面机器人手眼标定方法,eye-in-hand,亲测可用(草稿,后期整理)

之前阅读博客:机器人手眼标定 (四轴六轴都适用):https://blog.csdn.net/Stones1025/article/details/90664168

发现有如下问题,所写方法并不适用于四轴的情况,

在传统六轴情况下式12是超定方程,可解。但是,四轴情况下相邻机械臂只有纯平移,Rc12应该等于单位矩阵,(Rc12-I)=0,也就是说M3全是0,是没办法求解t的。 从另一个角度看:四轴时,公式2在求R时已经用过了,即公式9,那么由公式2推导出的公式11是恒成立的。公式11左边项为0 ,右边项在公式9可以保证为0。所以没办法求解t。 从直观的角度看:eye-in-hand情况下,机械臂末端和相机相当于一个刚体上的两个点,如果一个刚体只是进行平移,不旋转,那么他上面所有点的平移量是相同的,我们永远无法知道刚体上两点之间的相对距离是多少。 所以个人认为这种方法是没办法求解平移t的。

于是再想别的方法:

这是从PnP中想到的一个方法
PnP(Perspective-n-Point)是求解 3D 到 2D 点对运动的方法。它描述了当我们知道n 个 3D 空间点以及它们的投影位置时,如何估计相机所在的位姿。 

PnP是已知一些点在世界坐标系的3d坐标,和他在相机坐标系下的像素坐标(2d),求解出相机相对世界坐标系的变换矩阵T
那我们把机械臂基座标系当做世界坐标,只要求出一系列点在基座标系下的坐标以及这些点的像素坐标,就可以应用pnp求解基座标系和相机坐标系的变换矩阵T了
这些点就是标定板上的那些角点,先让相机在一个位置拍摄标定板照片,使用OpenCV的cv::findChessboardCorners()和cv::find4QuadCornerSubpix()函数求出角点的亚像素坐标
记录下拍照时机械臂各关节的读数,用来求解机械臂末端到基座标的变换矩阵T_b_w
然后,控制机器人运动,控制机器人末端依次指向标定板的角点,记录下此时机械臂末端的坐标(x,y,z),这就是PnP的3d点
由这些3d点和拍摄图像中求出的亚像素坐标2d点,就构成了一系列PnP的3d_2d点对,使用pnp就 可以求出相机到机器人基座标的变换矩阵T_b_c,拍摄照片时机械臂末端到基座标系的变换矩阵T_b_w已知,则相机到机械臂末端变换矩阵T_w_c=T_b_c.transpose*T_b_w。

你可能感兴趣的:(图像)