我正在尝试理解Eigen库的“eulerAngles”函数,我有一些没有意义的测试代码。 我的测试包括确定Euler函数调用“eulerAngles(0,1,2)”是否对应于静态帧的“XYZ”Euler序列。对于Eigen的列主矩阵乘法,它应该对应于“Z * Y * X”。我已经通过一些简单的测试证实了这一点,但是对于围绕X轴的负角度,我不了解结果。我没有使用Euler 3 Angle构造函数,而是使用“AngleAxisd”函数:
rot3x3 = AngleAxisd( -M_PI, Vector3d::UnitX() );
Vector3d vec = rot3x3.eulerAngles(0, 1, 2);
对于围绕X轴的正角度,它按照我期望的方式工作。对于-M_PI角度(相当于180度),我看到以下内容:
Euler angles: -0, 3.14159, -3.14159
我希望数组中的第一个元素接近-π,另外两个接近于零。我期望第一个和最后一个角度的范围是±π,中间角度是±π/ 2。中间角度超出范围。 该计划如下:
#include "stdafx.h"
#include <iostream>
#include "<Eigen\Dense"
#include "<unsupported\Eigen\MatrixFunctions"
using namespace std;
using namespace Eigen;
int main(int argc, char* argv[])
{
Matrix3d rot3x3;
rot3x3 = AngleAxisd( -M_PI, Vector3d::UnitX() );
cout << "Here is rot3x3:" << endl << rot3x3 << endl << endl;
Vector3d vec = rot3x3.eulerAngles(0, 1, 2); // => 1-2-3 => XYZ => Z*Y*X
cout << "Euler angles: " << vec.x() << ", "
<< vec.y() << ", "
<< vec.z() << endl << endl;
system("pause");
return 0;
}
输出结果为:
Here is rot3x3:
1 0 0
0 -1 1.22465e-016
0 -1.22465e-016 -1
Euler angles: -0, 3.14159, -3.14159
该结果相当于X轴周围的-π(并且与围绕X轴的正π旋转相同)。中间角度不应该在相当于±90度的范围内吗?