使用特征根据欧拉角旋转四元数

我试图创建一个四元数,旋转欧拉角并将其转换回欧拉角。 我正在使用Eigen。 从Euler转换到Quaternion反之亦然,但是当我使用角度轴旋转时,我的值约为20-50%。 例如,当我尝试从0,0,0旋转到90,50,60时,我得到x:75,5 y:103,13,z:78,46。 任何想法,我错了转弯? 我使用102 / YXZ惯例。 我试图像这里描述的那样实现它:通过欧拉角输入旋转四元数。

  Vector3f retVector;
    Matrix3f rotFromMat, qautRotMatrix;

const auto fromPitch = xFrom*M_PI/360;
const auto fromYaw = zFrom*M_PI / 360;
const auto fromRoll = yFrom*M_PI / 360;



rotFromMat = AngleAxisf(fromRoll,  Vector3f::UnitY())
    * AngleAxisf(fromPitch, Vector3f::UnitX())
    * AngleAxisf(fromYaw,   Vector3f::UnitZ());
Quaternionf fromQuat(rotFromMat);

    fromQuat.normalize();

    fromQuat = fromQuat * AngleAxisf(yTo, Vector3f::UnitY());
    fromQuat = fromQuat * AngleAxisf(xTo, Vector3f::UnitX());
    fromQuat = fromQuat * AngleAxisf(zTo, Vector3f::UnitZ());


    qautRotMatrix = fromQuat.toRotationMatrix();

    retVector = quatRotMatrix.eulerAngles(1, 0, 2);
    retVector *= 360 / M_PI;

    return retVector; 

你没有给出足够的细节来说明如何重现这一点。

但我可以看出两个错误:*度数和弧度之间的比率是180 / PI而不是360 / PI。 *您的轮换顺序错误! 左侧旋转右侧:

fromQuat = AngleAxisf(...) * fromQuat;

从我猜测你已经解决这个问题的日期开始,我在这里为新的观众评论

链接地址: http://www.djcxy.com/p/81865.html

上一篇: Rotate a Quaternion with Euler angles using Eigen

下一篇: famo.us quaternion rotation around z axis