我试图创建一个四元数,围绕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;
答案 0 :(得分:1)
你没有详细说明如何重现这一点。
但我可以看出两个错误: *度和弧度之间的比率为180 / PI而不是360 / PI。 *你的轮换订单错了!左侧是右侧旋转:
fromQuat = AngleAxisf(...) * fromQuat;
从我猜猜你已经解决了这个问题,我在这里评论新观众