【问题标题】:Getting Euler Angles from a Quaternion in Matlab在 Matlab 中从四元数中获取欧拉角
【发布时间】:2012-01-17 16:42:09
【问题描述】:

我有一个四元数的 X、Y、Z 和 W 分量随着时间的推移,在 4 个分离的向量中。

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

我想转换为欧拉角,以便在三个不同的子图中随时间绘制 3 个欧拉分量,所以 我需要有 3 个这样的向量

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

在 matlab 中是否有一种直接的方法来获得这个(我的意思是一个输入我的 4 个向量并输出上述 3 个向量的函数)还是我必须编写一些代码来为每个时间步进行转换?提前致谢。

【问题讨论】:

    标签: matlab quaternions euler-angles


    【解决方案1】:

    我认为没有内置的 Matlab 函数可以执行您想要的操作。

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

    请注意上述帖子中关于欧拉角集和您使用的旋转顺序的评论。

    将数据转换为欧拉角时,您必须确保 您正在翻译的方向并不靠近奇点。单数 欧拉集是不能唯一转换为 3 的方向 特定旋转顺序中的变量。奇异集合为 如下:

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

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

    【讨论】:

    • +1。感谢您的回答,看起来很有趣,明天我会彻底检查。我有关于四元数和旋转的很好的文档,所以我会小心的。如果您不知道,请查看此页面,您拥有关于 3D 空间的一切(除了一个好的索引或浏览器哈哈)! euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions
    • @Jav_Rock 另外作为关于 spinCalc 函数的说明:您要求航向、姿态和坡度,所以我认为您应该使用“QtoEA123”选项调用 spinCalc。因为这些应该对应于 x、y、z 旋转。
    • 我正在尝试代码,我喜欢这个功能,但我仍然无法获得与此链接中相同的转换结果:euclideanspace.com/maths/geometry/rotations/conversions/…
    • @Jav_Rock 我没有查看 spinCalc 转换过程的详细信息,但我的第一个想法是确保您以正确的顺序放置四元数。该函数采用 Q(x,y,z,w) 表示法。有些人使用 Q(w,x,y,z) 表示法。那么,您是否将 Q 定义为 Q = [QX(:) QY(:) QZ(:) QW(:)]; 如果您是……则需要检查 spinCalc 的方法。还可以尝试将 QtoEA321 作为 QtoEA123 的替代品......我可能在之前的评论中将顺序倒退了。
    • 不是那个,是角度,它设置在0到360之间,而不是-180到180之间。标准的问题,但我可以改变功能,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-21
    • 2019-10-27
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多