本征C++;/Matlab四元数与旋转矩阵失配 P>>四元数计算时,注意到特征C++与Matlab的区别。 在本征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;
然而,在Matlab(使用wxyz)中,我得到了以下结果:本征C++;/Matlab四元数与旋转矩阵失配 P>>四元数计算时,注意到特征C++与Matlab的区别。 在本征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;,c++,matlab,eigen,quaternions,C++,Matlab,Eigen,Quaternions,然而,在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的位置是正确的 谢谢使用Matlab,您正在计算
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的位置是正确的
谢谢使用Matlab,您正在计算。它确实是一个与你的特征C++计算的一样,并且同样(所有的行和所有列都有1的范数,或者形成一个向量的垂直集合)。 现在,酉矩阵的逆等于其共轭转置(*),即: U*U=UU*=I 换句话说,必须发生的是,Matlab的约定与特征C++的相反。 发件人: 点p的坐标可能会因坐标系CS(别名)或点p(alibi)的旋转而改变 在大多数情况下,模糊度的影响等同于旋转矩阵反转的影响(对于这些正交矩阵,等价于矩阵转置)
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