在Matlab中从四元数获取欧拉角

3

我有一个四元数的X,Y,Z和W分量随着时间变化而变化,分别以4个独立的向量形式存在。

  QW             1x346             2768  double       
  QX             1x346             2768  double
  QY             1x346             2768  double
  QZ             1x346             2768  double              

我希望将欧拉角转换为三个欧拉分量,以便通过时间在三个不同的子图中绘制这三个欧拉分量,因此我需要有像这样的3个向量

  heading(t)          1x346 
  attitude(t)         1x346 
  bank(t)             1x346 

在Matlab中是否有一种即时的方法可以获得这个(我的意思是一个输入我的4个向量和输出上述3个向量的函数),还是我必须编写一些代码来为每个时间步骤进行转换?谢谢。

1个回答

6

我认为Matlab没有内置函数可以执行你所需的操作。

不过,Mathworks用户社区中有一个功能,我相信这正是你要找的。 spinCalc 这将在各种旋转类型(DCM、欧拉角、欧拉向量和四元数)之间进行转换。

请注意,上述帖子中关于欧拉角集和您使用的旋转序列的注释。

在将数据转换为欧拉角时,必须确保您正在翻译的方向不接近奇异性。奇异欧拉集是无法以特定旋转顺序唯一地转换为3个变量的方向。以下是奇异集:

第1型旋转:123 - 132 - 213 - 231 - 321 - 312 如果第二个旋转角度为-90或90度,则为奇异性。

第2型旋转:121 - 131 - 212 - 232 - 313 - 323 如果第二个旋转角度为0或180度,则为奇异性。


谢谢你的回答,听起来很有趣。明天我会仔细查看它。我对四元数和旋转有很好的文档,所以我会小心处理。如果你不知道的话,请查看这个网页,你可以找到关于三维空间的一切(除了一个好的索引或浏览器哈哈)!http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/ - Jav_Rock
1
@Jav_Rock 还有关于 spinCalc 函数的说明:你请求了航向、姿态和俯仰角,所以我认为你应该使用 'QtoEA123' 选项调用 spinCalc 函数。因为它们应该对应于 x、y、z 旋转。 - Aero Engy
我正在尝试这些代码,我喜欢这个函数,但是我仍然无法获得与此链接中转换结果相同的结果: http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/ - Jav_Rock
@Jav_Rock 我还没有仔细研究 spinCalc 转换过程的细节,但我的第一个想法是确保您将四元数放在正确的顺序中。该函数假定 Q(x,y,z,w) 表示法。有些人使用 Q(w,x,y,z) 表示法。所以你是否将 Q 定义为 Q = [QX(:) QY(:) QZ(:) QW(:)]; 如果是这样的话...需要检查 spinCalc 的方法。另外,尝试使用 QtoEA321 作为 QtoEA123 的替代方案...我可能在之前的评论中把顺序搞反了。 - Aero Engy
不是那个问题,而是角度的设置范围在0到360之间,而不是-180到180。这只是一个标准问题,但我可以更改函数,谢谢! - Jav_Rock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接