Eigen C++ / Matlab 四元数和旋转矩阵不匹配

3
我注意到在计算四元数时,Eigen C++和Matlab存在差异。 在Eigen C++中,代码为:

Eigen::Quaterniond q;
q.x() = 0.270598;
q.y() = 0.653281;
q.z() = -0.270598;
q.w() = 0.653281;

Eigen::Matrix3d R = q.normalized().toRotationMatrix();
std::cout << "R=" << std::endl << R << std::endl;

提供旋转矩阵:

R=
-2.22045e-16     0.707107     0.707107
           0     0.707107    -0.707107
          -1            0 -2.22045e-16

在Matlab中(使用wxyz),我得到了以下结果:
q =

    0.6533    0.2706    0.6533   -0.2706

>> quat2dcm(q)

ans =
   -0.0000         0   -1.0000
    0.7071    0.7072         0
    0.7072   -0.7071   -0.0000

这是转置操作!有人能解释一下发生了什么吗?我确保wxyz的位置是正确的。

谢谢

1个回答

1
使用Matlab,你正在计算方向余弦矩阵。它确实像你用Eigen C++计算的旋转矩阵一样,因此也是幺正的(所有行和所有列都具有长度为1的范数,并形成一组垂直的向量)。
现在,幺正矩阵的逆等于其共轭转置(*),即:
U*U = UU* = I
换句话说,Matlab的约定与Eigen C++相反。
来自维基百科

由于坐标系(别名)的旋转或点P(不在场证明)的旋转,点P的坐标可能会发生变化。

在大多数情况下,这种歧义的影响相当于旋转矩阵的逆矩阵的效果(对于这些正交矩阵等价于矩阵转置)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接