Как получить углы Эйлера в форме 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]