Предположим, что у меня 3-мерная рамка с поворотным валом = 0, шаг = 0 и yaw = 0 вокруг x, y и z соответственно.Об EulerAngles Преобразование из собственной библиотеки C++
Я хочу, чтобы рамка вращалась вокруг оси x для 3.14159 (Pi) или roll = Pi.
Ниже приведен код указанной ситуации.
Проблема заключается в том, что когда я хочу преобразовать матрицу вращения назад в рулон, шаг и рыскание, код дает другой ответ.
Вместо рулона = Pi результат равен roll = 0, pitch = pi и yaw = pi.
Я думаю, что набор инструментов RVC от Peter Corke на Matlab дает правильный ответ.
Возможно, что-то не так с моей программой или eulerAngles в Eigen работает по-другому? Пожалуйста помоги.
Код:
#include <iostream>
#include <Eigen/Dense>
const double PI = 3.14159265359;
int main()
{
using ::Eigen::AngleAxisd;
using ::Eigen::Matrix3d;
using ::Eigen::Vector3d;
using ::std::cout;
using ::std::endl;
Matrix3d R,Rx;
R = AngleAxisd(PI, Vector3d::UnitX())
* AngleAxisd(0, Vector3d::UnitY())
* AngleAxisd(0, Vector3d::UnitZ());
Rx = AngleAxisd(PI, Vector3d::UnitX());
cout << R << endl << endl;
cout << Rx << endl << endl;
Vector3d ea = R.eulerAngles(0,1,2);
Vector3d eax = Rx.eulerAngles(0,1,2);
cout << ea << endl << endl;
cout << eax << endl << endl;
std::cin.ignore();
return 0;
}
вывода (I округлять числа, которые слишком малы нулю):
1 0 0
0 -1 0
0 0 -1
1 0 0
0 -1 0
0 0 -1
0
3.14159
3.14159
0
3.14159
3.14159
Спасибо, что ответили на мой вопрос, но я думаю, что вы указали неверную информацию, и это может ввести в заблуждение. Взгляните на мой код еще раз. –
Извините! Я должен был попробовать код. Я отредактировал ответ соответственно. – Saurav
Спасибо, ваше предложение работает! –