在用Eigen库计算时遇到很恶心的问题,同样是将四元素转换成旋转矩阵,使用Eigen和matlab会得到不同的结果,相当的恶心,让我一路排查了好久。
如,用Eigen计算: 四元数 q=[ -0.025, 0.097, 0.246, 0.964];/w x y z
#include <Eigen/Dense>
#include <iostream>
using namespace Eigen;
using namespace std;
int main(int argc, char **argv) {
Matrix3d R_w_o;
Quaterniond Qua_w_o(0.964, -0.025, 0.097, 0.246);//w x y z
//Qua_w_o.normalize();
R_w_o = Qua_w_o.matrix();
cout << "R_w_o" << endl << R_w_o << endl;
return 0;
}
得到的结果是:
R_w_o
0.860128 -0.479212 0.174743
0.46951 0.877699 0.0959388
-0.199347 -0.000476073 0.979929
有些人说导致eigen跟matlab计算结果不同的原因是归一化,我用eigen对比了,发现并没有区别,eigen应该是对四元数进行了归一化。
接下来对比matlab里面的计算结果,同样的四元数:
q=[0.964, -0.025, 0.097, 0.246];
R=quat2dcm(q)
结果是:
ans =
0.8601 0.4695 -0.1993
-0.4792 0.8777 -0.0005
0.1747 0.0959 0.9799
很明显,结果就不一样,我也想过是不是归一化的问题,用对这个四元数进行了归一化quatnormalize(q)
但是结果是一样的。不太像是归一化的问题。
很诡异,也有可能是对四元数虚数部分进行了归一化处理的导致。
所以,最后改用欧拉角,就没有出现过这么奇怪的情况。
Reference
eigen库四元数转化错误:https://zhuanlan.zhihu.com/p/99457743
EIgen四元数归一化:https://blog.csdn.net/weixin_38213410/article/details/89885700
再推荐一个四元数和欧拉角相互转换以及可视化的神器:https://quaternions.online/
matlab中四元数转换为旋转矩阵:https://blog.csdn.net/StrugglePeach/article/details/54318176