ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Eigen将四元素转换为旋转矩阵与matlab计算结果不一样

2021-04-19 22:04:33  阅读:366  来源: 互联网

标签:eigen 四元 计算结果 https 归一化 matlab Eigen


在用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

标签:eigen,四元,计算结果,https,归一化,matlab,Eigen
来源: https://blog.csdn.net/Will_Ye/article/details/115871798

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有