【问题标题】:Eigen Library Euler Order Sequencing特征库欧拉顺序测序
【发布时间】: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


    【解决方案1】:

    欧拉角不是唯一定义的。在不明确的情况下,eulerAngles 总是选择最小化第一个角度的解决方案。另请参阅以下错误条目以进行相关讨论:609801947

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2021-01-01
      • 2021-07-28
      • 1970-01-01
      • 2013-04-28
      • 2012-02-14
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多