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