此处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的操作,因为我的需要是提取的四元数必须进行规范化,并且我想确保这一点。
答案 0 :(得分:0)
您可以通过调用Eigen::Quaterniond
方法来确保您的normalize()
被规范化。
所讨论的行正在将e.linear()
返回的任何内容显式转换为Eigen::Quaterniond
。
关于从旋转矩阵到四元数的方法Wikipedia describes the relationship。它只是在求解一组已知的联立方程组。我希望该方法的主体(或多或少)看起来像一堆代数。