Как я могу инвертировать последовательность трехмерного вращения, построенную в кватернионах, используя библиотеку Eigen?
Я строю кватернионы с точки зрения рыскания, крена, шага, как показано ниже:
Eigen::AngleAxisf yawAngle(thetaZ, Eigen::Vector3f::UnitZ());
Eigen::AngleAxisf rollAngle(thetaY, Eigen::Vector3f::UnitY());
Eigen::AngleAxisf pitchAngle(thetaX, Eigen::Vector3f::UnitX());
Eigen::Quaternionf qauternion = pitchAngle * rollAngle * yawAngle;
Eigen::Vector3f offset = Eigen::Vector3f(0.0f, 0.0f, 0.0f);
pcl::transformPointCloud(*pclCloud, *pclCloud, offset, qauternion);
Как мне вернуться с конца?
EDIT:
То, что я пытаюсь сделать, это преобразовать обратно отсканированные результаты на управляемом поворотном столе XZ.
Разработанный код ниже
Eigen :: Quaternionf _quaternion;
pcl :: PointCloud :: Ptr pclCloud;
void initTransformation(float yaw, float pitch){
_transformation = Eigen::Affine3f::Identity();
_yaw = yaw;
_pitch = pitch;
}
void updateTransformation(float newYaw, float newPitch){
// Warning!
// Don't change both axis at the same time
// Yaw: Z // Pitch: X
float yawDif = _yaw - newYaw;
float pitchDif = _pitch - newPitch;
float yawRad = M_PI * yawDif / 180.0f;
float pitchRad = M_PI * pitchDif / 180.0f;
Eigen::AngleAxisf yawAngle(yawRad, Eigen::Vector3f::UnitZ());
Eigen::AngleAxisf rollAngle(0.0f, Eigen::Vector3f::UnitY());
Eigen::AngleAxisf pitchAngle(pitchRad, Eigen::Vector3f::UnitX());
Eigen::Quaternionf quater = pitchAngle * rollAngle * yawAngle;
_quaternion = quater * _quaternion;
_yaw = newYaw;
_pitch = newPitch;
}
void inversetheCloud();
Eigen::Quaternionf invQuaternion = _quaternion.inverse();
Eigen::Vector3f offset = Eigen::Vector3f(0.0f, 0.0f, 0.0f);
pcl::transformPointCloud(*pclCloud, *pclCloud, offset, invQuaternion);
}
// Sample Usage
void main(){
initTransformation(45.0f, 0.0f);
updateTransformation(45.0f, 90.0f);
updateTransformation(0.0f, 90.0f);
inversetheCloud();
}
В результате второе обратное преобразование истинно, но более поздние неверны, как видно на изображении.
Белое облако: 1-е
Пурпурное облако: 2-е
Зеленое облако: 3-е