【发布时间】: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