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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...