2
我正在尝试创建一个四元数,旋转欧拉角并将其转换回欧拉角。我正在使用Eigen。从Euler转换到Quaternion反之亦然,但是当我使用角度轴旋转时,我的值约为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);”在旋转之前。万向节锁应该没问题。 –