2014-02-13 3 views
9

Matrix3d 회전을 Quaternion<double>으로 변환하려고하는데, 지금까지 이상한 컴파일러 오류가 있습니다. 내가 사용하는 코드는 다음과 같습니다Eigen : Matrix3d ​​회전을 Quaternion으로 변환

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" 

사람이 두 표현 사이를 변환하는 방법을 알고 있나요? AngleAxis에 대한

Matrix3f mat; 
Quaternionf q(mat); 

또는

Quaternionf q; 
q = mat; 

같은 : AngleAxis 또는 Matrix에서

답변

14

생성자는 다음과 같은 변환을 작성해야 의미 명시 적 있습니다.