【问题标题】:Rotate a Quaternion with Euler angles using Eigen使用 Eigen 旋转具有欧拉角的四元数
【发布时间】:2015-09-25 18:51:04
【问题描述】:

我正在尝试创建一个四元数,将其围绕欧拉角旋转并将其转换回欧拉角。我正在使用本征。从欧拉转换为四元数,反之亦然工作正常,但是当我使用角度轴旋转时,我的值关闭了大约 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; 

【问题讨论】:

  • 当您在欧拉角的任意轴上旋转 90 度时,会出现一种名为“万向节锁定”的现象,这会产生意想不到的行为。你处理了吗?
  • 我用“Quaternionf fromQuat(rotFromMat);”将旋转矩阵转换成四元数旋转之前。云台锁应该没问题。

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


【解决方案1】:

你没有提供足够的细节来说明如何重现。

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

fromQuat = AngleAxisf(...) * fromQuat;

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

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2012-06-21
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多