回転行列からロールピッチのヨー角を抽出する必要があり、自分の実行が正しいことを確認したいと思います。
Eigen::Matrix< simFloat, 3, 1> rpy = orientation.toRotationMatrix().eulerAngles(0,1,2);
const double r = ((double)rpy(0));
const double p = ((double)rpy(1));
const double y = ((double)rpy(2));
あれは正しいですか?私がここを読んでいたので: http://eigen.tuxfamily.org/dox/group__Geometry__Module.html#gad118fececd448d7485ffea4858775e5a
そして、説明の最後に、間隔が角度として定義されていると書かれているとき、私は少し混乱しました。
これがあなたが探しているものだと思います。 m.eulerAngles(0, 1, 2)
の使用方法によって異なります。 rotx*roty*rotz
で再構築されたrotx、roty、rotzを取得するコードは次のとおりです。
Matrix3f m;
m = AngleAxisf(0.25*M_PI, Vector3f::UnitX())
* AngleAxisf(0.5*M_PI, Vector3f::UnitY())
* AngleAxisf(0.33*M_PI, Vector3f::UnitZ());
cout << "original rotation:" << endl;
cout << m << endl << endl;
Vector3f ea = m.eulerAngles(0, 1, 2);
cout << "to Euler angles:" << endl;
cout << ea << endl << endl;
Matrix3f n;
n = AngleAxisf(ea[0], Vector3f::UnitX())
* AngleAxisf(ea[1], Vector3f::UnitY())
* AngleAxisf(ea[2], Vector3f::UnitZ());
cout << "recalc original rotation:" << endl;
cout << n << endl;
ご参考いただきありがとうございます!私も最初にEigenを使います。それは単に多くの作業を節約するだけです!
ショーン・ルの答えは正しいですが、私はその線が
Vector3f ea = m.eulerAngles(2, 1, 0);
次に、ea
はヨーピッチとロール値をこの順序で保持します。 ZYXオイラー角回転は、ロールピッチとヨーに他ならないXYZ固定軸回転と同等です。