Jump to content

Преобразование между кватернионами и углами Эйлера

Пространственные вращения в трех измерениях можно параметризовать, используя как углы Эйлера , так и единичные кватернионы . В этой статье объясняется, как преобразовать два представления. На самом деле это простое использование «кватернионов» было впервые предложено Эйлером примерно на семьдесят лет раньше Гамильтона для решения проблемы магических квадратов . По этой причине сообщество динамиков обычно называет кватернионы в этом приложении «параметрами Эйлера».

Определение

[ редактировать ]

Есть два представления кватернионов. В этой статье используется более популярный Гамильтон.

Кватернион имеет 4 скалярных значения: q w (действительная часть) и q x q y q z (мнимая часть).

Определение нормы кватерниона следующим образом:

Единичный кватернион удовлетворяет:

Мы можем связать кватернион с вращением вокруг оси следующим выражением

где α — простой угол поворота (значение угла поворота в радианах ), а cos(β x ), cos(β y ) и cos(β z ) — « направляющие косинусы » углов между тремя координатными осями. и ось вращения. (Теорема Эйлера о вращении).

Интуиция

[ редактировать ]

Чтобы лучше понять, как « направляющие косинусы » работают с кватернионами:

Если осью вращения является ось X :

Если осью вращения является ось Y :

Если осью вращения является ось z :

Если ось вращения представляет собой вектор, расположенный под углом 45° ( π / 4 радиан) между осями x и y :

Следовательно, оси x и y «разделяют» влияние на новую ось вращения .

Углы Тейта – Брайана

[ редактировать ]
Углы Тейта–Брайана. последовательность zy'-x″ (внутренние вращения; N совпадает с y' ). Последовательность поворота угла: ψ , θ , φ . Обратите внимание, что в этом случае ψ > 90° и θ — отрицательный угол.

Аналогично для углов Эйлера мы используем углы Тейта Брайана (с точки зрения динамики полета ):

  • Заголовок - : вращение вокруг оси Z
  • Подача - : вращение вокруг новой оси Y
  • Банк - : вращение вокруг новой оси X

где ось X направлена ​​вперед, ось Y вправо, а ось Z вниз. В приведенном выше примере преобразования ротация происходит в порядке: заголовок, шаг, банк.

Матрицы вращения

[ редактировать ]

Ортогональная матрица (после умножения вектора-столбца), соответствующая вращению по часовой стрелке/ влево (смотря вдоль положительной оси начала координат) на единичный кватернион. задается неоднородным выражением :

или, что эквивалентно, однородным выражением:

Если не является единичным кватернионом, то однородная форма по-прежнему является скалярным кратным матрицы вращения, тогда как неоднородная форма, как правило, больше не является ортогональной матрицей. Вот почему в числовых работах следует отдавать предпочтение однородной форме, чтобы избежать искажений.

Матрица направляющего косинуса (от повернутых координат XYZ Тела до исходных координат XYZ Lab для вращения по часовой стрелке/влево), соответствующая последовательности Тела 3-2-1 после умножения с углами Эйлера (ψ, θ, φ), определяется выражением : [1]

Углы Эйлера для последовательности Тела 3-1-3. Система xyz (исходная фиксированная лаборатория) показана синим цветом, система XYZ (повернутое окончательное тело) показана красным. Линия узлов, обозначенная N и показанная зеленым цветом, представляет собой промежуточную ось X Тела, вокруг которой происходит второе вращение.

Углы Эйлера (в последовательности 3-2-1) в преобразование кватернионов

[ редактировать ]

Комбинируя кватернионные представления вращений Эйлера, мы получаем последовательность Тела 3-2-1 , в которой самолет сначала выполняет поворот по рысканью (Body-Z) во время выруливания на взлетно-посадочную полосу, а затем наклоняет (Тело-Y) во время взлета. , и, наконец, перекатывается (Тело-X) в воздухе. Результирующая ориентация последовательности Тела 3-2-1 (вокруг заглавной оси на иллюстрации углов Тейта-Брайана) эквивалентна ориентации лабораторной последовательности 1-2-3 (вокруг строчной оси), где самолет сначала перевернулся (ось lab-x), затем повернулся вокруг горизонтальной оси lab-y и, наконец, вращался вокруг вертикальной оси lab-z ( lB = lab2Body ):

Другие последовательности вращения используют другие соглашения. [1]

Исходный код

[ редактировать ]

Ниже код на C++ иллюстрирует приведенное выше преобразование:

struct Quaternion
{
    double w, x, y, z;
};

// This is not in game format, it is in mathematical format.
Quaternion ToQuaternion(double roll, double pitch, double yaw) // roll (x), pitch (y), yaw (z), angles are in radians
{
    // Abbreviations for the various angular functions

    double cr = cos(roll * 0.5);
    double sr = sin(roll * 0.5);
    double cp = cos(pitch * 0.5);
    double sp = sin(pitch * 0.5);
    double cy = cos(yaw * 0.5);
    double sy = sin(yaw * 0.5);

    Quaternion q;
    q.w = cr * cp * cy + sr * sp * sy;
    q.x = sr * cp * cy - cr * sp * sy;
    q.y = cr * sp * cy + sr * cp * sy;
    q.z = cr * cp * sy - sr * sp * cy;

    return q;
}

Преобразование кватернионов в углы Эйлера (в последовательности 3-2-1)

[ редактировать ]

Существует прямая формула для преобразования кватерниона в углы Эйлера в любой из 12 возможных последовательностей. [2] формула для последовательности Тело 3-2-1 В оставшейся части этого раздела будет показана . Если кватернион правильно нормализован , углы Эйлера можно получить из кватернионов посредством соотношений:

Обратите внимание, что функции arctan , реализованные в компьютерных языках, дают результаты только между -π/2 и π/2 , поэтому atan2 используется для генерации всех правильных ориентаций. Более того, типичные реализации arctan также могут иметь некоторые численные недостатки вблизи нуля и единицы.

В некоторых реализациях используется эквивалентное выражение: [3]

Исходный код

[ редактировать ]

Следующая программа C++ иллюстрирует приведенное выше преобразование:

#define _USE_MATH_DEFINES
#include <cmath>

struct Quaternion {
    double w, x, y, z;
};

struct EulerAngles {
    double roll, pitch, yaw;
};

// this implementation assumes normalized quaternion
// converts to Euler angles in 3-2-1 sequence
EulerAngles ToEulerAngles(Quaternion q) {
    EulerAngles angles;

    // roll (x-axis rotation)
    double sinr_cosp = 2 * (q.w * q.x + q.y * q.z);
    double cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);
    angles.roll = std::atan2(sinr_cosp, cosr_cosp);

    // pitch (y-axis rotation)
    double sinp = std::sqrt(1 + 2 * (q.w * q.y - q.x * q.z));
    double cosp = std::sqrt(1 - 2 * (q.w * q.y - q.x * q.z));
    angles.pitch = 2 * std::atan2(sinp, cosp) - M_PI / 2;

    // yaw (z-axis rotation)
    double siny_cosp = 2 * (q.w * q.z + q.x * q.y);
    double cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);
    angles.yaw = std::atan2(siny_cosp, cosy_cosp);

    return angles;
}

Особенности

[ редактировать ]

Необходимо учитывать особенности параметризации угла Эйлера, когда угол наклона приближается к ±90° (северный/южный полюс). Эти случаи должны рассматриваться особым образом. Общее название этой ситуации — блокировка подвеса .

Код для обработки особенностей взят на этом сайте: www.euclideanspace.com .

Векторное вращение

[ редактировать ]

Определим скаляр и вектор такой, что кватернион .

Обратите внимание, что канонический способ вращения трехмерного вектора по кватерниону определение вращения Эйлера осуществляется по формуле

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

где указывает на трехмерное векторное произведение. Это требует меньшего количества умножений и, следовательно, быстрее в вычислительном отношении. Численные тесты показывают, что последний подход может достигать 30%. [4] быстрее, чем оригинал для вращения вектора.

Доказательство

[ редактировать ]

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

Используя это соотношение, находим для что

и при замене тройного произведения

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

получается

который после определения можно записать через скалярную и векторную части как

См. также

[ редактировать ]
  1. ^ Jump up to: Перейти обратно: а б Отдел планирования и анализа миссий НАСА (июль 1977 г.). «Углы Эйлера, кватернионы и матрицы преобразования» . НАСА . Проверено 24 мая 2021 г.
  2. ^ Бернардес, Эвандро; Виолле, Стефан (10 ноября 2022 г.). «Преобразование кватернионов в углы Эйлера: прямой, общий и эффективный в вычислительном отношении метод» . ПЛОС ОДИН . 17 (11): e0276302. Бибкод : 2022PLoSO..1776302B . дои : 10.1371/journal.pone.0276302 . ISSN   1932-6203 . ПМЦ   9648712 . ПМИД   36355707 .
  3. ^ Бланко, Хосе-Луис (2010). «Учебное пособие по параметризации преобразования se (3) и оптимизации на многообразии». Университет Малаги, техн. Представитель . CiteSeerX   10.1.1.468.5407 .
  4. ^ Янота, А; Шимак, В; Немец, Д; Хрбчек, Ю (2015). «Повышение точности и скорости вычисления углов Эйлера на основе данных недорогого датчика вращения» . Датчики . 15 (3): 7016–7039. Бибкод : 2015Senso..15.7016J . дои : 10.3390/s150307016 . ПМЦ   4435132 . ПМИД   25806874 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ffb48b59e9963186c5028731aa3d2ce5__1719801120
URL1:https://arc.ask3.ru/arc/aa/ff/e5/ffb48b59e9963186c5028731aa3d2ce5.html
Заголовок, (Title) документа по адресу, URL1:
Conversion between quaternions and Euler angles - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)