Наклон и отклонение от матрицы вращения с Eigen Library

Мне нужно извлечь углы наклона тангажа крена из матрицы вращения, и я хочу быть уверенным, что то, что я делаю, правильно.

    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

И я был немного смущен, когда в конце описания говорится, в каких интервалах определены углы.

5

Решение

Я думаю, это то, что вы ищете. В зависимости от того, как мы используем
m.eulerAngles (0, 1, 2);
вот оно, получить Rotx, Roty, Rotz, который реконструирован с помощью RotxROTYROTZ

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. Это просто сэкономит много работы!

9

Другие решения

Ответ Шона Ле правильный, но я думаю, что строка должна быть

Vector3f ea = m.eulerAngles(2, 1, 0);

затем ea будет удерживать значение тангажа и крена в этом порядке. Угол поворота эйлера ZYX эквивалентен вращению с фиксированной осью XYZ, которое представляет собой не что иное, как шаг крена и рыскание.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector