nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

Ликбез по кватернионам, часть 4: кватернионы и спиноры; порядок перемножения

Часть 1 - история вопроса
Часть 2 - основные операции
Часть 3 - запись вращения через кватернионы
Часть 4 - кватернионы и спиноры; порядок перемножения
Часть 5 - практическая реализация поворота
Часть 5 1/2 - введение метрики, "расстояния" между поворотами
Часть 6 - поворот по кратчайшему пути
Часть 6 1/4 - кратчайший поворот в общем случае
Часть 6 2/4 - поворот, совмещающий два направления
Часть 6 3/4 - кватернион из синуса и косинуса угла
Часть 7 - интегрирование угловых скоростей, углы Эйлера-Крылова
Часть 8 - интегрирование угловых скоростей, матрицы поворота
Часть 8 1/2 - ортонормирование матрицы и уравнения Пуассона
Часть 9 - интегрирование угловых скоростей с помощью кватернионов
Часть 10 - интегрирование угловых скоростей, методы 2-го порядка
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты

Огромная просьба - если кто-то знает анекдоты про кватернионы - напишите их здесь в комментариях! Они должны существовать - любая достаточно зрелая и сколько-нибудь важная область человеческой деятельности должна обрастать анекдотами. Как правило, вовсе не смешными, но они не для того существуют. Человек, "въезжающий" в тему, прочитав анекдот, ликует - теперь он понимает, над чем здесь полагается смеяться, и настроение его повышается!

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

Кватернионы и спиноры
Кватернионы получили большое распространение в космической технике,
поскольку обладают двукратным резервированием по углам


eq3_25.png

Формула (3.5) после её вывода может показаться вполне логичной и похожей на поворот в комплексной плоскости, а половинный угол кажется некоей незначительной технической уловкой, возникающей, поскольку мы вынуждены умножать вектор на кватернион «дважды».
TomDelayedReaction.jpg

И только через некоторое время, уже вполне успешно применяя эту математику на практике, начинаешь думать - ЧТО ЭТО ВООБЩЕ ЗА НАФИГ?

На комплексной плоскости величина i означала поворот на 90 градусов, при возведении её в квадрат мы получали -1, что соответствует повороту на 180 градусов, а ещё одно возведение в квадрат даст единицу – поворот на 360 градусов ничего не меняет.
Если же мы попробуем записать кватернион поворота вокруг оси x на 90 градусов по формуле (3.5), получится:
rot90quat.png

тогда как просто i выражает поворот вокруг оси x на 180 градусов. Вообще, кватернион с нулевой скалярной частью соответствует повороту на 180 градусов вокруг какой-нибудь оси.

Если же мы теперь возведём i в квадрат, то получим -1, и это будет соответствовать повороту на 360 градусов! То же самое выйдет, если подставить в (3.5) 360 градусов (2π) напрямую – из-за половинного угла в этой формуле период получается 4π, т.е два полных оборота!

По формулам приведения можно заметить, что добавление поворота на 360 градусов попросту меняет знак каждой компоненте кватерниона, помножает его на -1. Это никоим образом не влияет на осуществление поворота по формуле (3.2), поскольку сопряженный кватернион также окажется домноженным на (-1), и знаки «минус» сократятся.

Роджер Пенроуз в своей книге «Путь к реальности, или законы, управляющие вселенной» приводит «осязаемый» пример системы, которая ведёт себя подобным образом – это объект на ленточке, один конец которой зафиксировали.
Penrose1.png

Настоятельно рекомендуем вырезать тоненькую ленту из бумаги и повторить этот эксперимент самостоятельно. (Если кто спросит, можно отвечать – это новый тренд 2017 года, спиноры, их все подряд крутят)

Начинаем с прямой ленты (а). Начинаем вращать её кончик (книга Twist на рисунке – не обязательна для опыта, хватит одной лишь ленточки). Делаем первые пол-оборота – лента закручивается. Делаем вторые пол-оборота – лента продолжает закручиваться. Полный оборот явно не привёл ленту в исходное состояние. Делаем третьи и четвертые пол-оборота – лента кажется совсем закрученной, однако впечатление обманчиво. Аккуратно ухватим кончик с другой стороны, позволяя ленте обернуться вокруг своего кончика при том, что сам он остаётся на своём месте, никуда не повернувшись – и вуаля – мы вернулись к состоянию (а)!

И похожим образом ведут себя элементарные частицы со спином 1/2 . Настолько похожим, что матрицы Паули – это ни что иное, как другая форма записи кватернионов. Если мы рассматривали «базис» из действительной единицы и трёх мнимых единиц, то в формализме Паули базисом являются матрицы σ0 (единичная), σx, σy, σz, каждая из них – 2х2 с комплексными коэффициентами. Правда, для полного соответствия их надо поделить на i, в таком случае будут выполняться соотношения:

Pauli.png

Впрочем, для описания массивных частиц со спином ½ обычных кватернионов всё равно не хватило бы, потребуются бикватернионы, в которых каждое из четырёх чисел являются комплексными. Роль бикватернионов в физике – вопрос спорный, за подробностями отсылаем к [https://arxiv.org/abs/math-ph/0201058v5 ].

Порядок перемножения кватернионов
До сих пор у нас не возникало путаницы, что именно означает кватернион – он означает поворот в пространстве. Одна из положительных черт кватерниона – увидев его 4 компоненты, мы можем сразу же описать, какой именно поворот он описывает – его векторная часть даст нам ось поворота, а скалярная – его величину.

Мы приводили формулу (3.2) для поворота вектора и формулу (3.3) для композиции поворотов, в которой справа стоит кватернион первого поворота, а слева – последующего. Именно эти формулы мы должны применять, когда, находясь в некоторой системе координат, мы хотим повернуть вектор. Например, в компьютерной графике у нас есть вращающийся объект, и мы в каждом последующем кадре поворачиваем его на определенный угол.

Есть, однако, и другое применение кватернионам, особо часто встречающееся в системах ориентации. Там мы не поворачиваем вектор, а переходим из одной системы координат в другую. То есть мы считаем, что вектор (некоторое направление) остался неизменным (инвариантным), просто у нас есть его координатная запись в одной системе координат, а мы хотим найти его координаты в другой системе. С этого момента и начинается некоторая путаница.

К примеру, у нас есть инерциальная система координат ИСК (исходная) и есть связанная система координат ССК космического аппарата. Для простоты примем, что в момент времени t=0 они совпадали, и кватернион перехода Λиск-сск=1. Затем прошла одна секунда, и космический аппарат повернулся.

У нас есть две разные формы записи. Либо мы скажем, что Λиск-сск - это кватернион, выражающий поворот нашего космического аппарата в инерциальном пространстве. То есть, в начальный момент времени оси аппарата имели координаты (1;0;0), (0;1;0), (0;0;1) в ИСК, но теперь, чтобы найти новые координаты, мы должны эти векторы повернуть с помощью кватерниона Λиск-сск:

BasisVectorTransform.png

Как мы можем заметить, этот кватернион позволяет нам переходить из координат ССК в координаты ИСК. К примеру, ось X космического аппарата имеет жестко заданные координаты (1;0;0) в ССК (потому она и называется связанной!), а повернув этот вектор на Λиск-сск, мы найдём координаты той же оси в инерциальной системе координат.

Такой кватернион мы можем назвать ковариантным – он выражает вращение в ту же сторону, в которую вращается наш космический аппарат. Но когда мы преобразуем координаты, они должны вращаться в обратную сторону, чтобы «скомпенсировать» поворот базиса!

Для обратного преобразования, из координат ИСК в координаты ССК нам нужно взять сопряженный кватернион.

Если за следующую секунду космический аппарат снова совершил поворот, который в инерциальной системе координат описывается кватернионом Μиск, то мы можем обновить наш ковариантный Λиск-сск напрямую по формуле композиции поворотов:
Λ(1)иск-сск = ΜискΛиск-сск (4.1)
т.е самый последний (крайний) поворот расположен в формуле слева, «действует в последнюю очередь».

Однако куда чаще нам легче изобразить очередной поворот КА не в инерциальной системе координат, а в связанной. Скажем, на аппарате стоят датчики угловой скорости, жестко закрепленные на приборных осях X, Y, Z, поэтому мы легко можем записать вектор угловой скорости ω и соответствующий кватернион поворота
p4littleRot.png

где ΔT – период опроса датчиков угловой скорости.
Переведем его в инерциальную систему:
p4rotateQuatItself.png

а теперь подставим его в (4.1):
p4reverseOrder.png

Как мы видим, нам нет нужды специально пересчитывать компоненты угловой скорости в ИСК, чтобы обновить кватернион поворота – всё, что надо сделать, это лишь помножить «старый» кватернион не слева, как раньше, а справа!
Заметим, что мы применили формулу (3.2) для поворота не вектора, а кватерниона – это вполне допустимо. Поскольку операция поворота с помощью кватерниона линейна относительно входного вектора, то
p4QuatRotationLinearity.png

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

Как мы видим, ситуация уже несколько усложнилась. Чтобы жизнь мёдом не казалась, используют и контравариантные кватернионы – при повороте спутника в одну сторону эти кватернионы «поворачиваются» в другую. Игры с нижними и верхними индексами, как в тензорном анализе, здесь не прижились, и отличить одних от других можно лишь по описанию, если оно есть, в противном случае – экспериментально (методом тыка).
Контравариантные кватернионы вроде как удобнее для преобразования координат, поскольку их название подсказывает, что у нас было на входе и что получится на выходе:
p4contravariantRotation.png

т.е когда в его индексе первой стоит ИСК, а затем ССК, значит он принимает вектор записанный в ИСК, а выдаёт его координаты в ССК. Если же нам нужно преобразование «против шерсти», то надо вместо него взять сопряженный.

Соответственно, когда мы получаем вектор малых поворотов с датчиков угловых скоростей, мы можем составить из него контравариантный кватернион, взяв вектор с обратным знаком:
p4ContravariantSmallQuat.png

Ну и порядок умножения их тоже поменяется, что нетрудно показать, ведь контравариантный кватернион – это попросту сопряженный к ковариантному. В итоге получим такую формулу:
p4ContravariantComposition.png

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

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

Необходимо помнить, две ошибки со знаком скорее всего не скомпенсируются, потому как знаки могут быть при разных углах, при разных осях, при разных кватернионах. Комбинаций знаков настолько много, что прийти к правильной комбинации перебором практически нереально. Нужно запомнить: знак - самая важная часть числа.

В последней главе мы построим простейшую систему ориентации на датчиках угловой скорости.
Tags: кватернионы-это просто (том 1), математика, работа
Subscribe

  • Нахождение двух самых отдалённых точек

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

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 32 comments

  • Нахождение двух самых отдалённых точек

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

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…