Eigen :: Matrix 到Eigen ::四元数

问题描述 投票:0回答:1
Eigen::Matrix4d transformation_matrix; //assume this is initialized
Eigen::Matrix4d &matrix = transformation_matrix;   
Eigen::Quaterniond quat;
quat(matrix);

我正在尝试从变换矩阵中找到旋转矩阵。 Eigen :: Quaterniond库toRotationMatrix中已经有一个API。但是要使用此功能,我需要4x4四元数(如果错误,请更正)。

获取编译错误为错误:与“(Eigen :: Quaterniond {aka Eigen :: Quaternion})(const Matrix4d&)”的调用不匹配]

请帮助。Followed this link for conversion

Eigen::Quaterniond quat;
quat(matrix);    

在初始化四元数时,出现了另一个错误:

Eigen :: internal :: quaternionbase_assign_impl,4,4>”用于嵌套名称说明符内部的:: quaternionbase_assign_impl :: run(* this,xpr.derived());

c++ matrix eigen3
1个回答
-1
投票

您的代码存在一些问题。首先,这:

Eigen::Matrix4d &matrix;

是对Eigen::Matrix4d的未初始化引用。拆下&。其次,您在这里做什么:

Eigen::Quaterniond quat;
quat(matrix);

正在创建四元数,然后使用矩阵将其称为operator()。但据我所知,四元数甚至没有任何内容的operator()documentation

看看question you referred to中ggael的第一个答案。您可以使用四元数的构造函数:

Eigen::Quaterniond quat(matrix);

或者它是赋值运算符:

Eigen::Quaterniond quat;
quat = matrix;

两者都为矩阵定义。但是,我无法告诉您它们是否适用于4x4矩阵。如果未提取,则提取矩阵的3x3旋转部分。

编辑:

在计算机上进行快速测试后,您无法将4x4矩阵传递给四元数。请改用Eigen::Matrix3d或执行以下操作:

Eigen::Quaterniond quat(Eigen::Matrix3d(matrix.topLeftCorner(0, 0)));
© www.soinside.com 2019 - 2024. All rights reserved.