本征从Affine3d 3x3旋转矩阵中提取的四元数是否已归一化?

时间:2018-11-07 13:17:15

标签: c++ eigen ros quaternions homogenous-transformation

此处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旋转矩阵),在哪里可以找出如何在本征库中的旋转矩阵上构造四元数请?除了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 :(得分:0)

您可以通过调用Eigen::Quaterniond方法来确保您的normalize()被规范化。

所讨论的行正在将e.linear()返回的任何内容显式转换为Eigen::Quaterniond

关于从旋转矩阵到四元数的方法Wikipedia describes the relationship。它只是在求解一组已知的联立方程组。我希望该方法的主体(或多或少)看起来像一堆代数。