每个pose的生成,都包括TX,TY,TZ,RX,RY,RZ和一个旋转顺序 type决定。Halcon的描述中,type可以定义位’gba’,'abg’等常用模式,但是我们实际于机械手配合做项目时,不同厂家的机械手所 对应的RX,RY,RZ或A,B,C的值都不一样,并且和halcon的描述类型也无法直接对应,那如何解决这个问题呢?
RT矩阵,是包含了平移和旋转两个方面,其中3*3的R矩阵,就是旋转矩阵,也就是欧拉角RX,RY,RZ或A,B,C展开成矩阵形式的数值,这些数值都是由角度的sin或cos相乘相加得到的。欧拉角就是空间三维旋转的角度,一般会有很多种表达方式,XYZ,ZYZ,ZYX,XYX,XZY等,
这些字母表示绕着该轴旋转某个角度,然后按照字母的顺序,把三次的二位旋转矩阵相乘,最后得到一个三维的旋转矩阵。
理论上这些不同的type之间的角度都是可以转换的,从欧拉角到旋转矩阵R的转换无非就是把针对每个旋转轴进行旋转的角度和顺序不一致而已。按照不同的字母顺序,将这些矩阵分别相乘,即可得到对应的旋转矩阵。这样我们就得到了旋转矩阵跟具体旋转角度之间的关系。
Halcon的算子pose_to_hom_mat3d也是同样的原理,将pose的RX,RY,RZ通过不同的顺序相乘,得到矩阵。那么最重要的如何确认项目中的机械手坐标值和halcon的pose类型之间的关系呢?下面以我个人目前的项目经验给大家总结一下:常用的6轴机械手的坐标系(个人目前遇到的,希望其他朋友碰到能补充更多)为三种:XYZ;ZYX;ZYZ。其中,XYZ对应Halcon的gba,ZYX对用Halcon的abg,ZYZ暂时没有Halcon直接对应的pose类型,但是有固定公式可以转换,稍后可以直接给出代码。XYZ和ZYX两种类型只是矩阵相乘的顺序不同。当你知道自己使用的6轴机械手是XYZ时,你就可以在获取机械手坐标的时候,可以直接根据坐标值创建Halcon的pose变量,这样在做手眼标定或引导抓取的时候就可以一一对应而不会出现数值差别巨大的问题了。PS:目前市面上的大品牌机械手,ABB机械手对应的欧拉角为ZYZ, Denso机械手对应的欧拉角为ZYX,APE机械手对应的欧拉角为ZYZ。如何判断,其实可以根据机械手本身坐标的叫法,一 般叫做”RX,RY,RZ“这种可能是ZYX或XYZ;叫做”A,B,C“的可能是ZYZ。