1. ABB机器人可以通过如上三点,确立坐标系原点,其中x1到x2构成x方向,y1点到x1x2连线的垂线为y方向,z方向满足右手法则,即z方向为x方向叉乘y方向得到。
2. 之前已经介绍过如何通过x1x2和y1三点坐标,计算原点o的坐标。
3. 本文介绍如何通过x1x2和y1三点,计算坐标系原点o的方向。结果输出为欧拉角。也可使用ABB机器人函数OrientZYX将欧拉角转化为四元数q1-q4
4.计算思路为:
1)获取向量x1x2并单位化
2)获取向量x1y1并单位化
3)单位向量向量oz等于单位向量x1x2叉乘单位向量x1y1
4)单位向量向量oy1等于单位向量向量oz叉乘单位向量向量oy1
5)得到单位向量ox1,单位向量ox1, 单位向量oy1, 单位向量oz
6)将旋转矩阵[ox1,oy1,oz]T转化为欧拉角
7)利用OrientZYX函数将欧拉角转化为四元数
4. 创建计算程序cal_
代码如下:
proc cal_
_orient(pos px1,pos px2,pos py,inout num a,inout num b,inout num c) frame !A:Rot_z() , B:Rot_y() ,c: Rot_x()
VAR pos vpx;
VAR pos vpxy;
VAR pos vpy;
VAR pos vpz;
vpx:=px2-px1;
!获取向量x1x2
vpx:=vec_nor(vpx);!单位化向量vpx
vpxy:=py-px1;!获取向量x1y1
vpxy:=vec_nor(vpxy);!单位化向量vpx
vpz:=vpx*vpxy;!向量vpx叉乘向量vpxy
vpy:=vpz*vpx;!向量vpz叉乘向量vpx
!将单位向量存入数组nrT
=vpx.x; :
=vpy.x; :
=vpz.x; :
=vpx.y; :
=vpy.y; :
=vpz.y; :
=vpx.z; :
=vpy.z; :
=vpz.z; :
MatrixToRpy nrt,a,b,c;
!调用旋转矩阵转欧拉角函数
ENDproc
PROC MatrixToRpy(num nrT{*,*},INOUT num nrA,INOUT num nrB,INOUT num nrC)
!Transform Trafo-Matrix to RPY-Angle A, B, C
!T = Rot_z(A) * Rot_y(B) * Rot_x(C)
VAR num nrSinA;
VAR num nrCosA;
VAR num nrSinB;
VAR num nrAbsCosB;
VAR num nrSinC;
VAR num nrCosC;
nrA:=ATan2(nrT{2,1},nrT{1,1});
nrSinA:=Sin(nrA);
nrCosA:=Cos(nrA);
nrSinB:=-nrT{3,1};
nrAbsCosB:=nrCosA*nrT{1,1}+nrSinA*nrT{2,1};
!Value: -90 <:= B <:= +90 !!
nrB:=ATan2(nrSinB,nrAbsCosB);
nrSinC:=nrSinA*nrT{1,3}-nrCosA*nrT{2,3};
nrCosC:=-nrSinA*nrT{1,2}+nrCosA*nrT{2,2};
nrC:=ATan2(nrSinC,nrCosC);
ENDPROC
FUNC pos vec_nor(pos pos1)
VAR pos pos2;
=pos1.x/VectMagn(pos1); :
=pos1.y/VectMagn(pos1); :
=pos1.z/VectMagn(pos1); :
RETURN pos2;
ENDFUNC
- 下一篇:ABB机器人伺服电机解决13招!
- 上一篇:ABB机器人