Вот 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 потому что мне нужно, чтобы извлеченный кватернион был нормализован, и я хотел бы это обеспечить.
Вы можете убедиться, что ваш Eigen::Quaterniond
нормализуется, называя это normalize()
метод.
Рассматриваемая строка явно преобразует все e.linear()
возвращается к Eigen::Quaterniond
,
Что касается того, как вы переходите от матрицы вращения к кватерниону, Википедия описывает отношения. Это просто решение известного набора одновременных уравнений. Я ожидаю, что тело метода будет выглядеть (более или менее) как группа алгебры.
Других решений пока нет …