MATLAB 中的欧拉角差异
Euler angles discrepancy in MATLAB
我有一个从一个基到另一个基的旋转矩阵:
Rot = [0.1227 0.0269 -0.9921;...
0.8635 -0.4956 0.0934;...
0.4892 0.8681 0.0840];
我使用 MATLAB rotm2eul
函数按照 'ZYZ' 约定获得欧拉角:
eulZYZ = rotm2eul(Rot,"ZYZ")
即 -0.0938 -1.4867 -1.0577
。如果我使用反函数 eul2rotm
:
RotMATLAB = eul2rotm(eulZYZ,"ZYZ");
结果与Rot
不同(第三列除外):
RotMATLAB =
-0.0406 0.1189 -0.9921
-0.8712 0.4819 0.0934
0.4892 0.8681 0.0840
这是怎么回事?我以为一旦你指定了 'ZYZ' 就只有一个旋转。
通常假设旋转矩阵具有行列式 1
,但您的“旋转”矩阵 Rot
具有行列式 det(Rot) = -1
,这意味着您的矩阵还包含一个(奇数)数的反射,而不仅仅是旋转。
所以 rotm2eul
没有希望为这个矩阵产生任何有意义的输出。尝试通过例如做同样的事情首先将自己的矩阵乘以反射矩阵,以确保 Rot
具有行列式 1
,例如
diag([1,1,-1])
我有一个从一个基到另一个基的旋转矩阵:
Rot = [0.1227 0.0269 -0.9921;...
0.8635 -0.4956 0.0934;...
0.4892 0.8681 0.0840];
我使用 MATLAB rotm2eul
函数按照 'ZYZ' 约定获得欧拉角:
eulZYZ = rotm2eul(Rot,"ZYZ")
即 -0.0938 -1.4867 -1.0577
。如果我使用反函数 eul2rotm
:
RotMATLAB = eul2rotm(eulZYZ,"ZYZ");
结果与Rot
不同(第三列除外):
RotMATLAB =
-0.0406 0.1189 -0.9921
-0.8712 0.4819 0.0934
0.4892 0.8681 0.0840
这是怎么回事?我以为一旦你指定了 'ZYZ' 就只有一个旋转。
通常假设旋转矩阵具有行列式 1
,但您的“旋转”矩阵 Rot
具有行列式 det(Rot) = -1
,这意味着您的矩阵还包含一个(奇数)数的反射,而不仅仅是旋转。
所以 rotm2eul
没有希望为这个矩阵产生任何有意义的输出。尝试通过例如做同样的事情首先将自己的矩阵乘以反射矩阵,以确保 Rot
具有行列式 1
,例如
diag([1,1,-1])