В остальной части этой статьи JPLкватернион соглашение[1] должны использоваться. Единица кватернион можно описать как:
Мы можем связать кватернион с вращением вокруг оси следующим выражением
где α - простой угол поворота (значение в радианах угол поворота ) и cos (βИкс), cos (βу) и cos (βz) являются "направляющие косинусы «определение оси вращения (теорема Эйлера о вращении).
Углы Тейта – Брайана
Углы Тейта – Брайана. z-y′-x ″ последовательность (внутренние вращения; N совпадает с ты). Последовательность поворота на угол: ψ, θ, Ф. Обратите внимание, что в этом случае ψ> 90 ° и θ - отрицательный угол.
где ось X направлена вперед, ось Y - вправо, а ось Z - вниз. В приведенном выше примере преобразования вращение происходит в следующем порядке: заголовок, шаг, банк.
Если не является единичным кватернионом, тогда однородная форма по-прежнему является скалярным множителем матрицы вращения, в то время как неоднородная форма, как правило, больше не является ортогональной матрицей. Вот почему в числовой работе предпочтительнее однородная форма, чтобы избежать искажений.
Матрица направляющего косинуса (от повернутых координат XYZ тела до исходных координат Lab xyz для вращения по часовой стрелке / влево), соответствующая постмножению Тело 3-2-1 последовательность с Углы Эйлера (ψ, θ, φ) определяется выражением:[2]
Углы Эйлера для последовательности Body 3-1-3 - система xyz (исходная фиксированная лаборатория) показана синим цветом, система XYZ (повернутое конечное тело) - красным. Линия узлов, обозначенная N и показанная зеленым цветом, является промежуточной осью X тела, вокруг которой происходит второе вращение.
Преобразование углов Эйлера в кватернионы
Комбинируя кватернионные представления вращений Эйлера, мы получаем для Тело 3-2-1 последовательность, в которой самолет сначала выполняет поворот (Body-Z) во время руления на взлетно-посадочную полосу, затем наклоняется (Body-Y) во время взлета и, наконец, катится (Body-X) в воздухе. Результирующая ориентация последовательности Body 3-2-1 (вокруг оси с заглавными буквами на иллюстрации углов Тейта-Брайана) эквивалентна ориентации последовательности лабораторных работ 1-2-3 (вокруг оси с нижним регистром), где самолет сначала прокатился (ось lab-x), затем повернулся вверх вокруг горизонтальной оси lab-y и, наконец, повернулся вокруг вертикальной оси lab-z (фунт = lab2Body):
В других последовательностях вращения используются другие соглашения.[2]
Исходный код
Код ниже на C ++ иллюстрирует приведенное выше преобразование:
структураКватернион{двойнойш,Икс,у,z;};КватернионToQuaternion(двойнойрыскание,двойнойподача,двойнойрулон)// рыскание (Z), тангаж (Y), крен (X){// Сокращения для различных угловых функцийдвойнойСай=потому что(рыскание*0.5);двойнойсы=грех(рыскание*0.5);двойнойcp=потому что(подача*0.5);двойнойзр=грех(подача*0.5);двойнойcr=потому что(рулон*0.5);двойнойSR=грех(рулон*0.5);Кватернионq;q.ш=cr*cp*Сай+SR*зр*сы;q.Икс=SR*cp*Сай-cr*зр*сы;q.у=cr*зр*Сай+SR*cp*сы;q.z=cr*cp*сы-SR*зр*Сай;возвращатьсяq;}
Преобразование кватернионов в углы Эйлера
Углы Эйлера можно получить из кватернионов с помощью соотношений:[3]
Обратите внимание, однако, что арктан и Arcsin функции, реализованные на компьютерных языках, дают результаты только между −π / 2 и π / 2, а для трех поворотов между −π / 2 и π / 2 не получаются все возможные ориентации. Чтобы сгенерировать все ориентации, нужно заменить функции arctan в компьютерном коде на atan2:
Исходный код
Следующая программа на C ++ иллюстрирует приведенное выше преобразование:
#define _USE_MATH_DEFINES#включают<cmath>структураКватернион{двойнойш,Икс,у,z;};структураЭйлераУглы{двойнойрулон,подача,рыскание;};ЭйлераУглыToEulerAngles(Кватернионq){ЭйлераУглыуглы;// крен (вращение по оси x)двойнойsinr_cosp=2*(q.ш*q.Икс+q.у*q.z);двойнойcosr_cosp=1-2*(q.Икс*q.Икс+q.у*q.у);углы.рулон=стандартное::atan2(sinr_cosp,cosr_cosp);// шаг (вращение по оси Y)двойнойсинп=2*(q.ш*q.у-q.z*q.Икс);если(стандартное::пресс(синп)>=1)углы.подача=стандартное::копия(M_PI/2,синп);// использовать 90 градусов, если вне допустимого диапазонаещеуглы.подача=стандартное::как в(синп);// рыскание (вращение по оси Z)двойнойsiny_cosp=2*(q.ш*q.z+q.Икс*q.у);двойнойcosy_cosp=1-2*(q.у*q.у+q.z*q.z);углы.рыскание=стандартное::atan2(siny_cosp,cosy_cosp);возвращатьсяуглы;}
Особенности
Следует помнить об особенностях параметризации угла Эйлера, когда шаг приближается к ± 90 ° (северный / южный полюс). К этим случаям нужно обращаться специально. Обычное название этой ситуации - карданный замок.
Обратите внимание, что канонический способ поворота трехмерного вектора кватернионом определение Вращение Эйлера находится по формуле
куда - кватернион, содержащий вложенный вектор , это сопряженный кватернион, и повернутый вектор . В вычислительных реализациях это требует умножения на два кватерниона. Альтернативный подход - применить пару соотношений
куда обозначает трехмерное векторное произведение. Это требует меньшего количества умножений и, следовательно, быстрее в вычислительном отношении. Численные тесты показывают, что последний подход может составлять до 30%. [4] быстрее, чем оригинал для вращения вектора.
где антикоммутивность перекрестного произведения и был применен. Следующей эксплуатацией свойства, которое это кватернион единиц так что вместе со стандартным векторным тождеством
можно получить
который при определении можно записать в терминах скалярной и векторной частей как
^Бланко, Хосе-Луис (2010). "Учебное пособие по параметризации преобразования se (3) и оптимизации на многообразии". Университет Малаги, Tech. Представитель. CiteSeerX10.1.1.468.5407.