Матрица поворота к углам Эйлера (Static RPY) с использованием библиотеки C++ EigenC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Матрица поворота к углам Эйлера (Static RPY) с использованием библиотеки C++ Eigen

Сообщение Anonymous »

TLDR:
Как получить углы Эйлера в форме RPY из матрицы вращения с помощью библиотеки Eigen. Я попробовал ChatGPT, поиск Google и документацию. Предполагается, что это будет так: mat.eulerAngles(0, 1, 2). Но, похоже, это не работает.

Учитывая матрицу вращения, я хочу получить углы Эйлера в форме «sxyz». Другими словами, я пытаюсь получить ax, ay, az для данной матрицы вращения, так что матрица вращения может быть получена как Rx * Ry * Rz, где каждое Ri представляет собой вращение вокруг оси i на угол ai.
Для этого я использую библиотеку C++ Eigen версии 3.7.
Я попробовал следующее (см. код ниже), где я генерирую матричный мат из углов Эйлера ax, ay, az путем вращения по тангажу и рысканию (RPY) вокруг статического кадра. Я проверил, что эта матрица верна. После этого я получил углы Эйлера (предположительно в формате RPY) из mat и использовал эти углы Эйлера, чтобы получить mat2 путем
вращения RPY вокруг статического кадра. Я ожидаю, что эти две матрицы будут одинаковыми. Но они очень разные. Что здесь не так?

Код: Выделить всё

#include 
#include 

using namespace std;

int main() {
// Initialize euler angles.
double ax, ay, az;
ax = M_PI / 2;
ay = M_PI / 2;
az = 0;

// Quaternion from Euler angles.
Eigen::Quaterniond q = Eigen::AngleAxisd(az, Eigen::Vector3d::UnitZ()) *
Eigen::AngleAxisd(ay, Eigen::Vector3d::UnitY()) *
Eigen::AngleAxisd(ax, Eigen::Vector3d::UnitX());

Eigen::Matrix3d mat = q.toRotationMatrix();

// Print rotation matrix to verify.
cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79139877/rotation-matrix-to-euler-angles-static-rpy-using-the-c-eigen-library[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»