kal*_*ger 8 c++ matrix euler-angles eigen rotational-matrices
我需要从旋转矩阵中提取滚动俯仰偏航角度,我想确保我所做的是正确的.
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));
Run Code Online (Sandbox Code Playgroud)
那是对的吗?因为我在这里阅读:http: //eigen.tuxfamily.org/dox/group__Geometry__Module.html#gad118fececd448d7485ffea4858775e5a
当我在描述的最后说明在哪个区间定义角度时,我有点困惑.
TSL*_*SL_ 11
我想这就是你要找的东西.取决于我们如何使用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;
Run Code Online (Sandbox Code Playgroud)
谢谢你的参考!我也首先使用Eigen.它只是节省了大量的工作!
Shawn Le的答案是正确的,但我认为这条线应该是
Vector3f ea = m.eulerAngles(2, 1, 0);
Run Code Online (Sandbox Code Playgroud)
然后ea将按该顺序保持偏航俯仰和侧倾值。ZYX欧拉角旋转等效于XYZ固定轴旋转,无非就是侧倾和偏航。