Нормируется ли кватернион, который Eigen извлекает из матрицы вращения Affine3d 3x3? - PullRequest
0 голосов
/ 07 ноября 2018

здесь https://docs.ros.org/kinetic/api/eigen_conversions/html/eigen__msg_8cpp_source.html#l00093

Я совершенно не понимаю синтаксис этой строки: Eigen::Quaterniond q = (Eigen::Quaterniond)e.linear();

Но в любом случае, если предположить, что e имеет тип Eigen::Affine3d (матрица вращения 3x3), где я могу выяснить, как кватернион строится из матрицы вращения в библиотеке Eigen , пожалуйста? Я не видел никаких методов в документе, кроме https://eigen.tuxfamily.org/dox/classEigen_1_1QuaternionBase.html#title25, но я настоящий нуб в c ++, поэтому я даже не понимаю, что один ...

Я надеюсь, что он делает что-то подобное https://arc.aiaa.org/doi/abs/10.2514/2.4654?journalCode=jgcd, потому что мне нужно, чтобы извлеченный кватернион должен быть нормализован, и я хотел бы обеспечить это.

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете убедиться, что ваш Eigen::Quaterniond нормализован, вызвав его normalize() метод.

Рассматриваемая строка явно преобразует все, что e.linear() возвращает в Eigen::Quaterniond.

Что касается перехода от матрицы вращения к кватерниону, Википедия описывает отношение . Это просто решение известного набора одновременных уравнений. Я ожидаю, что тело метода будет выглядеть (более или менее) как группа алгебры.

...