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])