【问题标题】:Euler angles discrepancy in MATLABMATLAB中的欧拉角差异
【发布时间】:2021-03-29 23:24:26
【问题描述】:

我有一个从一个基础到另一个基础的旋转矩阵:

 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”,就只存在一个旋转。

【问题讨论】:

  • 我不相信 rotm2eul 是 Octave 或任何我知道的包的一部分。是否有理由将其标记为 Octave?如果在哪里可以买到?在这种情况下它的行为是否相同?
  • 这是我幼稚的假设,删除它,谢谢。

标签: matlab math rotational-matrices


【解决方案1】:

通常假定旋转矩阵具有行列式 1,但您的“旋转”矩阵 Rot 具有行列式 det(Rot) = -1,这意味着您的矩阵还包含(奇数)个反射,而不仅仅是旋转。

所以rotm2eul 没有希望为这个矩阵产生任何有意义的输出。尝试做同样的事情,例如首先将自己的矩阵乘以反射矩阵,以确保Rot 具有行列式1,例如

 diag([1,1,-1])

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多