微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MATLAB 中的欧拉角差异

如何解决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])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。