2.我已经告诉你们如何从三点坐标 x1x2和 y1计算原点 o。
3.本文介绍了如何通过x1x2和y1计算坐标系的原点o的方向。输出为欧拉角..您还可以使用ABB机器人函数Orient ZY X将欧拉角转换为四元数Q1-Q4。
4
计算思路为:
1)以获得矢量和X1X2单元化
2) 获取向量x1y1并对其进行单位化
3)单位矢量 oz 等于单位矢量 x1x2叉积单位矢量 x1y1
4)单位向量yy 1等于单位向量oz交叉乘法单位向量yy 1。
5)以得到单位矢量OX1,单位矢量OX1,OY 1单位矢量,单位矢量盎司
6) 将旋转矩阵[OX1,oy1,oz]t转换为欧拉角
7)利用定向函数将欧拉角转换为四元数
4.创建程序CAL_
代码如下:
PROC cal_
! A: rotate z(), B: rotate y(), C: rotate x()
VAR pos vpx;
VAR pos vpxy;
VAR pos vpy;
VAR pos vpz;
vpx:=px2-px1;
!获取向量x1x2
VPX:= vec_nor(VPX);!单元向量VPX
vpxyx/pyx/px 1!得到向量x1y1
vpxy:= vec_nor(vpxy);!矢量VPX单位
Vpz:=VPX*vpxy;!向量VPX交叉积向量vpxy
Vpz * vpx; ! 矢量十字乘积矢量矢量
!将单位矢量存储在阵列NRT中
NRT {1,1}: = vpx.x;
nrT{1,2}:=vpy.x;
1,3} : vpz.x;
NRT {2, 1}: = VPX.Y;
NRT {2,2}: = vpy.y;
nrT{2,3}:=vpz.y;
NRT {3,1}: = vpx.z;
NRT {3, 2}: = Vpy.z;
NRT {3,3}: = vpz.z;
Matrix NRT, a, B, C;
! 调用旋转矩阵的欧拉角函数
ENDproc
proc MatrixToRpy(num NRT{*,*},InOut num NRA,InOut num NRB,InOut Num NRC)
! TRAFO RPY angle transformation matrix A, B, C
! t = rotate Z (a) * rotate y (b) * rotate x (c)
VAR num nrSinA;
VAR num nrCosA;
VAR num nrSinB;
Var num nrabscosb;
VAR num nrSinC;
VAR num nrCosC;
NRA: = ATan 2 (NRT {2,1}, NRT {1,1});
nrSinA: = SIN (NRA);
NrCosA:=Cos(nrA);
3,1} ;
NRABSCOSB:=NRCOSA*NRT {1, 1} NRSNA*NRT {2, 1};
! Value: -90 <: = B <: = 90!
nrB:=ATan2(nrSinB,nrAbsCosB);
Nrsinc: nrsina * nrt {1,3}-nrcosa * nrt {2,3} ;
NRCOSC:=-NRSNA*NRT {1, 2} NRCOSA*NRT {2, 2};
NRC: = ATAN2 (nrSinC, nrCosC);
ENDPROC
FUNC pos vec_nor(pos pos1)
VAR pos pos2;
pos2.x:=pos1.x/VectMagn(pos1);
pos2.y:=pos1.y/VectMagn(pos1);
POS2.z: = pos1.z/ VecMagn (POS 1);
RETURN pos2;
ENDFUNC