Инвертировать трехмерную кватернионную последовательность вращения в собственных
Как я могу инвертировать последовательность трехмерного вращения, построенного в кватернионах, используя библиотеку 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);
Как я могу вернуться с конца?
РЕДАКТИРОВАТЬ: То, что я пытаюсь сделать, это преобразовать обратно отсканированные результаты на управляемом поворотном столе 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-е