【发布时间】:2016-02-03 21:03:33
【问题描述】:
我试图理解 Eigen 库的“eulerAngles”函数,但我有一些没有意义的测试代码。 我的测试包括确定欧拉函数调用“eulerAngles(0, 1, 2)”是否对应于静态帧的“XYZ”欧拉序列。对于 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度的范围内吗?
【问题讨论】:
标签: matrix transformation eigen euler-angles