Нормируется ли кватернион, который Eigen извлекает из матрицы вращения Affine3d 3×3?

Вот 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 (Матрица вращения 3х3), где я могу выяснить, как кватернион строится из матрицы вращения в библиотеке Eigen пожалуйста? Я не видел никакого метода на док, кроме https://eigen.tuxfamily.org/dox/classEigen_1_1QuaternionBase.html#title25 но я настоящий нуб в с ++, так что я даже не понимаю этого …

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

1

Решение

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]