【问题标题】:different results using quaternion and Euler angles使用四元数和欧拉角的不同结果
【发布时间】:2016-08-03 13:44:36
【问题描述】:

我正在使用两种方法在 3D 空间中旋转一个点 p0(一个向量)。我有以黑色显示的世界坐标系 (WCS) 和以蓝色显示的坐标系 1 (CS1),它被定义为围绕 z 轴旋转 10 度。我首先通过计算点积来计算 WCS 和 CS1 之间的方向余弦。现在我可以使用dcm2quatdcm2angle 轻松计算四元数和欧拉角。然后我可以使用四元数和欧拉角旋转点p0

p0  = [1 0 0]; % point in world CS
ijk = [1 0 0;0 1 0;0 0 1];
uvw1 = [0.9848 0.1736 0;-0.1736 0.9848 0;0 0 1.0000]; % CS1
DC01 = [dot(uvw1(1,:),ijk(1,:)) dot(uvw1(1,:),ijk(2,:)) dot(uvw1(1,:),ijk(3,:))
        dot(uvw1(2,:),ijk(1,:)) dot(uvw1(2,:),ijk(2,:)) dot(uvw1(2,:),ijk(3,:))
        dot(uvw1(3,:),ijk(1,:)) dot(uvw1(3,:),ijk(2,:)) dot(uvw1(3,:),ijk(3,:))];

[rz, ry, rx] = dcm2angle(DC01,'ZYX'); 
q1 = dcm2quat(DC01);

p1_1 = quatrotate(q1,p0);
p1_2 = (rotz(rz*180/pi)*roty(ry*180/pi)*rotx(rx*180/pi)*p0').';

但最后结果不同:

p1_1 = 
    0.9848   -0.1736         0
p1_2 =
    0.9848    0.1736         0

我知道使用欧拉角会导致云台锁定并产生歧义,但在这种情况下,使用四元数获得的结果是不正确的,而从欧拉角获得的结果是正确的。我错过了什么?

下图显示了 CS1(蓝色)、WCS(黑色)、p0(黑色)、p1_1(蓝色)、p1_2(红色)。

【问题讨论】:

    标签: matlab quaternions coordinate-systems euler-angles


    【解决方案1】:

    在 MATLAB 中:

    如果我使用方向余弦或四元数来旋转点,我实际上是在旋转参考系:

    pdc = (DC01*p0')'    % rotation using directional cosine matrix
    pdc =
    
        0.9848   -0.1736         0
    

    相当于:

    p1_1 = quatrotate(q1,p0);
    p1_1 = 
    
         0.9848   -0.1736         0
    

    另一方面,使用欧拉角和旋转矩阵,我可以旋转一个点(向量)w.r.t 一个坐标系:

    p1_2 = (rotz(rz*180/pi)*roty(ry*180/pi)*rotx(rx*180/pi)*p0').';
    p1_2 =
    
        0.9848    0.1736         0
    

    结论: 使用四元数或方向余弦矩阵,我们旋转坐标系,同时点(向量)保持固定。然而,使用旋转矩阵,我们可以旋转一个向量 w.r.t 一个坐标系。

    【讨论】:

      【解决方案2】:

      我遇到过和你一样的现象 我使用 dcm 和四元数来旋转矢量。

      我们可以将 WCS 视为唯一的参考。上述DCM逆时针旋转向量,四元数顺时针旋转向量。

      【讨论】:

        猜你喜欢
        • 2012-06-21
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 2013-06-22
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多