使用Eigen旋转带有欧拉角的四元数

时间:2015-07-28 09:37:42

标签: c++ rotation eigen quaternions euler-angles

我试图创建一个四元数,围绕Euler-Angles旋转它并将其转换回Euler Angles。我正在使用Eigen。从Euler转换为Quaternion,反之亦然,但是当我使用Angle Axis旋转时,我的值大约为20 - 50%。例如,当我尝试从0,0,0旋转到90,50,60时,我得到x:75,5 y:103,13,z:78,46。 我走错了路的任何想法?我使用102 / YXZ惯例。 我试图像这里描述的那样实现它:Rotate a quaternion by Euler angles input

  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; 

1 个答案:

答案 0 :(得分:1)

你没有详细说明如何重现这一点。

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

fromQuat = AngleAxisf(...) * fromQuat;

从我猜猜你已经解决了这个问题,我在这里评论新观众