1

这里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因为我需要提取的四元数必须标准化,我想确保这一点。

4

1 回答 1

0

Eigen::Quaterniond您可以通过调用它的normalize()方法来确保您的标准化。

有问题的行将任何e.linear()返回的内容显式转换为Eigen::Quaterniond.

至于如何从旋转矩阵变为四元数,维基百科描述了这种关系。它只是求解一组已知的联立方程。我希望该方法的主体看起来(或多或少)像一堆代数。

于 2018-11-07T13:46:24.753 回答