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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值