c++ - 使用 Eigen 以欧拉角旋转四元数

标签 c++ rotation eigen quaternions euler-angles

我正在尝试创建一个四元数,将其围绕欧拉角旋转并将其转换回欧拉角。我正在使用艾根。从欧拉转换为四元数,反之亦然,效果很好,但是当我使用角度轴旋转时,我的值偏离了大约 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; 

最佳答案

您没有提供有关如何重现此问题的足够详细信息。

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

fromQuat = AngleAxisf(...) * fromQuat;

从我猜你已经解决这个问题的那一天起,我在这里为新观众发表评论

关于c++ - 使用 Eigen 以欧拉角旋转四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672597/

相关文章:

c++ - 是否可以将函数参数存储为某种列表

c++ - C++中的PLC功能 block 库

c++ - DBF文件并行读取

c++ - 向 DLL 公开应用程序 API 和数据

java - 在打开新 Activity 之前等待旋转动画在 Android 中完成?

c# - 围绕中心旋转图像 C#

javascript - 如何在不旋转整个 Canvas 的情况下旋转三 Angular 形?

c++ - 发布版本不起作用 - Eigen 库出错?

CMake找不到Eigen3

c++ - 使用 Eigen 密集矩阵数据结构时应该期待什么?