本征:将Matrix3d旋转转换为四元数 [英] Eigen: convert Matrix3d rotation to Quaternion

查看:266
本文介绍了本征:将Matrix3d旋转转换为四元数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 Matrix3d 旋转转换为 Quaternion< double> ,但是我只有很奇怪到目前为止的编译器错误。我使用的代码是:

I'm trying to convert a Matrix3d rotation to a Quaternion<double>, but I got only weird compiler errors so far. The code I'm using is:

Quaternion<double> getQuaternionFromRotationMatrix(const Matrix3d& mat)
{
    AngleAxisd aa; 
    aa = mat;
    Quaternion<double> q = aa;// conversion error

    return q;
}

编译器错误:

path/src/Utils.cpp: In function ‘Eigen::Quaternion<double> Utils::getQuaternionFromRotationMatrix(const Matrix3d&)’:
path/src/Utils.cpp:55:26: error: conversion from ‘Eigen::AngleAxisd {aka Eigen::AngleAxis<double>}’ to non-scalar type ‘Eigen::Quaternion<double>’ requested
In file included from /usr/local/include/eigen3/Eigen/Core:283:0,
                 from /usr/local/include/eigen3/Eigen/Dense:1,
                 from path/include/Utils.h:4,
                 from path/src/Utils.cpp:1:
/usr/local/include/eigen3/Eigen/src/Core/Assign.h: In member function ‘Derived& Eigen::DenseBase<Derived>::lazyAssign(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, 3, 1>, Derived = Eigen::Block<Eigen::Matrix<double, 4, 4>, 4, -0x00000000000000001, true, true>]’:
/usr/local/include/eigen3/Eigen/src/Core/Assign.h:534:123:   instantiated from ‘static Derived& Eigen::internal::assign_selector<Derived, OtherDerived, false, false>::run(Derived&, const OtherDerived&) [with Derived = Eigen::Block<Eigen::Matrix<double, 4, 4>, 4, -0x00000000000000001, true, true>, OtherDerived = Eigen::Matrix<double, 3, 1>]’
/usr/local/include/eigen3/Eigen/src/Core/Assign.h:574:89:   instantiated from ‘Derived& Eigen::MatrixBase<Derived>::operator=(const Eigen::DenseBase<OtherDerived>&) [with OtherDerived = Eigen::Matrix<double, 3, 1>, Derived = Eigen::Block<Eigen::Matrix<double, 4, 4>, 4, -0x00000000000000001, true, true>]’
path/src/Utils.cpp:34:20:   instantiated from here
/usr/local/include/eigen3/Eigen/src/Core/Assign.h:504:3: error: static assertion failed: "YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES"

有人知道如何在两种表示形式之间转换吗?

Does someone know how to convert between both representations?

推荐答案

AngleAxis Matrix 显式的,这意味着您必须按如下所示编写转换:

The constructors from an AngleAxis or Matrix are explicit meaning you have to write the conversion as follow:

Matrix3f mat;
Quaternionf q(mat);

Quaternionf q;
q = mat;

AngleAxis 相同。

这篇关于本征:将Matrix3d旋转转换为四元数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆