为什么eul2quat和四元数函数的计算结果有何不同?

35视图(30天)
下面的讨论 外部旋转 ,对应于 点旋转 在matlab:
我使用了内置函数“eul2quat”和“四元数”四元数转换欧拉角相同的数据,但结果略有不同,信号也不同呢?我该如何解释,提前谢谢!
格式
欧拉描述= [-0.001180313 -0.1101197 -3.122032;
-0.001413606 -0.1086281 -3.119092;
-0.001928661 -0.1062565 -3.116415);
一个= eul2quat(欧拉描述,“XYZ”)%的第一个X, Y, Z的最后?
一个= 3×4
0.009797824155183 0.055023629743008 -0.001127456560182 -0.998436343315603 0.011271864801883 0.054275960421124 -0.001316453379056 -0.998461482549404 0.012621931438076 0.053086905293953 -0.001631383177894 -0.998508791109027
b =四元数(欧拉描述,“欧拉”,“XYZ”,“点”)%的第一个X, Y, Z的最后?
b =3×1四元数的数组
我0.00973287223990636 - 0.0550351559117731 + 5.1011347229122 e-05j我0.0111951287419489 - 0.0542918401622062 + 9.4978608694494 - 0.998436978586816 k e-05j - 0.99846234589158 k 0.0125195213825984 - 0.0531111499712373 + 0.000294403625928257 j - 0.998510080399586 k
但我eul2quat的顺序改为“ZYX股票”,似乎不同的值是相等的,但输出四元数是相反的顺序。
a_OK = eul2quat(欧拉描述,“ZYX股票”)%的第一个X, Y,最后Z,但输出的顺序有点反直觉的,形式的[w Z Y、X]
a_OK = 3×4
0.009732872239906 -0.998436978586816 0.000051011347229 -0.055035155911773 0.011195128741949 -0.998462345891580 0.000094978608694 -0.054291840162206 0.012519521382598 -0.998510080399586 0.000294403625928 -0.053111149971237

接受的答案

布莱恩Fanous
布莱恩Fanous 2022年5月26日
快速外卖:
  • 这两个eul2quat四元数类使用内在的旋转。
  • eul2quat ([a b c],“XYZ”)等价于四元数([a b c],“欧拉”、“XYZ”,“框架”)
一些关于四元数类的更多细节:
框架旋转
当你输入 四元数([a b c],“欧拉”、“XYZ”,“框架”) 这就意味着找到一个四元数问,这样
对于一个3×1 v和旋转矩阵r(显然v右边是一个纯粹的四元数与虚部等于v),右边是坐标系旋转四元数,因此 框架 四元数() 调用。还要注意, 旋转的旋转矩阵吗 的参照系 顺时针绕x轴 一个。 一个新的参照系每次旋转后实现,因为(如上所述),旋转是内在的。
点旋转
当你输入 四元数([a b c],“欧拉”、“XYZ”,“点”) 这就意味着找到一个四元数问,这样
对于一个3×1 v和旋转矩阵t . v(再一次,右边是一个纯粹的四元数与虚部等于v)。右边是四元数点旋转,所以 四元数() 调用。还要注意, 是旋转的旋转矩阵 一个点 顺时针绕x轴 一个。 这里需要注意的是

更多的答案(3)

山姆翟
山姆翟 2022年5月25日
@cui
我记得以前我们已经谈到,欧拉角和四元数并不是唯一的。你需要检查旋转矩阵。请参见下面的例子:
eul = (-0.001180313 -0.1101197 -3.122032)
qXYZ = angle2quat (eul (1) eul (2), eul (3),“XYZ”)
dcm1 = angle2dcm (eul (1) eul (2), eul (3),“XYZ”)
dcm2 = quat2dcm (qXYZ)
dcm1——dcm2
2的评论
山姆翟
山姆翟 2022年5月25日
angle2dcm转换旋转角度 方向余弦矩阵(即旋转矩阵) //www.tianjin-qmedu.com/help/aerotbx/ug/angle2dcm.html
angle2quat旋转角度转换为四元数,它的工作原理类似像eul2quat。

登录置评。



保罗
保罗 2022年5月25日
编辑:保罗 2022年5月26日
你好,崔,
我认为eul2quat和四元数(帧)都使用右手, 内在的旋转 和旋转的序列的顺序序列参数的函数。此外,eul2quat做一个框架旋转。
定义三个欧拉角
rng (100);
θ=兰德(1、3);
四元数使用eul2quat,内在角度是:第一在Z,第二Y ',第三在X”。
q1 = eul2quat(θ,“ZYX股票”)
q1 = 1×4
0.9404 0.1646 0.1866 0.2317
基于帧旋转四元数
q2 =四元数(θ,“欧拉”,“ZYX股票”,“帧”);
紧凑(q2)
ans = 1×4
0.9404 0.1646 0.1866 0.2317
所以这两个是相同的。
混乱,至少对我来说,当生成associatied方向余弦矩阵(DCMs)。我要生成一个DCM,我理解作为内在的坐标系旋转ZYX股票序列
Zrot = [cosθ(1)罪(θ(1))0;sin(θ(1))因为(θ(1)0;0 0 1);
Yrot = [cos(θ(2))0 sin(θ(2));0 1 0;sin(θ(2))0 cos(θ(2)));
Xrot = [1 0 0; 0 cosθ(3)罪(θ(3));0 sin(θ(3))因为(θ(3)));
DCMp = Xrot * Yrot * Zrot;
给定一个向量v解决在xyz坐标系表示列,同样DCMp解决矢量框架通过后乘,所以您最后使用x y z”v
v =兰德(3,1);
vp = DCMp * v;
使用第二季度工作相同
DCM2 = rotmat (q2,“帧”);
v2 = DCM2 * v
v2 = 3×1
0.6642 -0.2641 0.4664
然而,quat2rotm说的文档页面使用DCM1 pre-multiplying转置(v),这实际上是被称为“post-multiply格式” 在这里 !(注:我非常不喜欢这个想法pre-multiplication的行向量)。我们会这样做,然后转置结果回列向量进行比较
DCM1 = quat2rotm (q1);
v1 = (v。“* DCM1)。”;
比较的结果,他们非常非常接近。
格式长e
[副总裁副总裁- v1 - v2)
ans = 3×2
1.0 e + 00 * 1.110223024625157 e-16 0 5.551115123125783 -5.551115123125783 -1.110223024625157 -1.110223024625157 e-17 e-16 e-16 e-17
所以,我们看到,角输入eul2quat定义一个右撇子,框架旋转,但我们必须小心预处理和后乘大会所以您最后使用。
5个评论
保罗
保罗 2022年5月27日
既然你部,谢谢你这样做....
请记住,我不要求熟悉所有相关的工具箱和文档页面。但从....戳在应对这个问题
每个相关工具箱(导航、航空航天、无人机等)应该有一个独立的部分,描述工具箱的使用的约定和定义。
工具箱中的函数文档页面,与roation矩阵需要明确说明如果公约post-multiply列或pre-multiply行,除非工具箱只使用一个约定,可以清楚地说明在独立的部分。同样,对于点/框架。每个文档页面相关旋转应该有一个链接到单独的页面。
至少在一个实例中,pre-mutiply的意义由行被称为“post-multiply格式,这是令人困惑的。
它有利于独立部分明确写出单轴旋转(例如,R_x R_y, R_z上面你的答案)工具箱使用,可能采用不同的基本框架notaton (R)和点(T,如你的答案)。
回答特定的问题,是的,doc框架和旋转点定义为你所做的在你的回答将是非常有用的。
我意识到记录一切一贯和明确所有相关工具箱可以是一个艰巨的任务…

登录置评。