Кватернионы. Решение одной навигационной задачи
История
Некоторое время назад я занимался одной интересной задачей, относящейся к спутниковой навигации. Используя фазовый фронт сигнала, объект навигации (ОНВ) измеряет координаты навигационных спутников (НС) в своей системе координат (локальная система, ЛСК). Также ОНВ получает значения положений НС в глобальной системе координат (ГСК), и измеряет время получения сигнала НС (рис. 1). Требовалось вычислить координаты ОНВ в ГСК и системное время, то есть решить навигационную задачу.
Рис. 1. Системы координатЗадача была интересна тем, что её решение теоретически позволяет уменьшить число НС в сравнении с тем, сколько НС требуется в методах, реализованных в спутниковых системах навигации. Своё внимание в то время я в основном уделял исследованию качества измерений фазового фронта и получению навигационных уравнений для координат и времени, полагая при этом, что вычисление ориентации и координат ОНВ не вызовет особых проблем. Тем более, что на плоскости задача решалась быстро и просто.
Однако, когда я построил модель в трёхмерном пространстве, неожиданно выяснилось, что вычислить значения ориентации ОНВ при неизвестных его координатах в ГСК не получается. Несколько предпринятых попыток определить ориентацию с помощью матриц направляющих косинусов и поворотов привели к такому нагромождению тригонометрических функций, что продвигаться дальше к решению у меня не получалось. Какое-то время даже казалось, что аналитического решения вообще не существует.
Но оно, конечно, существует. Мне удалось найти решение этой задачи, используя свойства кватернионов. В этом материале я хочу описать саму задачу, ход и её решение, уделяя внимание ориентации и координатам ОНВ, и пока оставляя за рамками измерения координат по фазовому фронту.
Входные данные
Итак, входные данные:
: вектор-столбец положения -го НС в ГСК, : номер НС,
: вектор-столбец положения -го НС в координатах ЛСК; векторы и полагаем известными; ГСК, ЛСК: правые декартовы системы координат в 3-х мерном евклидовом пространстве с разнонаправленными базисами и соответственно; начала координат ГСК и ЛСК не совпадают. Нижний индекс дальше будет обозначать номер вектора, верхний — номер элемента в векторе, если только не указано явно, что это степень.
Задача
Рис. 2. Основные величиныНужно найти:
: вектор-столбец положения ОНВ в ГСК,
: оператор перехода от ЛСК к ГСК, который я условно назвал «оператором ориентации» (рис. 2)
Решение
Теперь ход моих рассуждений и решения.
Разложение векторов и в своих базисах: , где — номер НС. Базисные векторы ЛСК
где , — множество вещественных чисел, . Выписывая эти коэффициенты в матрицу
получаем
полагая, что , , . Следовательно, координаты вектора в базисе ГСК . Можно сказать, что является матрицей некоторого линейного оператора (или «оператора ориентации»), такого, что , определённого в базисе ГСК. Такой матрицей может быть матрица направляющих косинусов или любая из матриц поворотов.
Свойства произвольного евклидового пространства позволяют записать уравнение для вычисления вектора положения ОНВ:
(1)
Неудачный поиск решения
Уравнение (1) содержит две неизвестные матричные величины и , и имеет поэтому бесконечное число решений. Аналогичное соотношение для трёх различных НС в виде
где
квадратные невырожденные матрицы, также содержат две неизвестные матричные величины и . Можно переписать (1) и (2) так, чтобы избавиться от величины :
откуда
или
где .
Если бы я смог как-нибудь найти из (3) и подставить в (1), то задача была бы решена. К примеру, была сделана попытка расписать (3) по трём НС аналогично с (2), но в итоге матрицы получались вырожденные и уравнение единственного решения поэтому не имело. Попытки расписать и решить систему уравнение вроде
приводили к тому самому нагромождению синусов и косинусов, о котором я упомянул во вступлении.
Здесь я и подумал, а получится ли найти , если (3) или (4) записать в кватернионном виде. В итоге получилось, но продолжу по порядку.
Теория о кватернионе поворота
Два теоретических момента, которые, думаю, стоит упомянуть.
Кватернионом, как мы знаем, является математический объект вида , где , , , , — скалярная часть (множитель вещественной единицы), — векторная часть; 1, i, j, k — вещественная и три разные мнимые единицы с таблицей умножения:
Кватернион даёт удобную возможность представления трёхмерных преобразований (вращений), определяя одновременно и ось поворота, и угол вращения. Если взять некоторый кватернион , такой, что , то можно записать, что , и значит , где , . Здесь индекс в скобках обозначает номер элемента, а верхний индекс без скобки — возведение в степень. Если вектор представить как
где , , , то кватернион запишется так:
где . Если теперь взять произвольный кватернион с нулевой скалярной частью и вектором , то результатом операции
будет вектор с той же длиной, что и , но повёрнутый на угол против часовой стрелки вокруг оси, направляющим вектором которой является . Дальше будут встречаться фразы вроде «кватернион выполняет поворот вектора », которые, конечно, подразумевают применение кватерниона к вектору и получение в соответствии с (5).
Последний теоретический момент. Для обозначения разных видов умножения используются такие общеизвестные значки: или : скалярное произведение, : кватернионное произведение, : векторное произведение.
На этом с теорией всё.
Описание решения с кватернионами
Вернёмся к векторам и . Три замечания об их характере, которые потребуются дальше. Примем пока k = 1, i = 2.
Нужные замечания
Во-первых, эти векторы являются свободными векторами, которые можно перемещать в пространстве, соблюдая параллельность перемещений.
Во-вторых, они неколлинеарны. Действительно, если бы они были коллинеарными, то (3) обращалось бы в истинное высказывание только при единичной матрице и задачу решать не нужно было.
И, в-третьих, . В самом деле, так как — это ортогональная матрица, которая не меняет длину вектора , то из (3) следует, что длины векторов и равны.
Tак как в (3) длины векторов не имеют значения, для упрощения записей и решения дальше заменю векторы и их нормированными эквивалентами:
и в виде кватернионов:
Кватернионная форма основных уравнений
Выражение (3) в кватернионной форме выглядит теперь так:
где — неизвестный кватернион, эквивалент , а выражение (1) так:
где , .
Рис. 3. Основные векторыТак как векторы и свободны, неколлинеарны, то можно совместить их концы таким образом, чтобы и образовали угол на плоскости, натянутой на эти векторы (пусть эта плоскость будет ). Начало координат поместим в точку, общую для и (рис. 3), и будем полагать, что значение известно.
Уравнение (6), аналогично уравнению (3), по-прежнему имеет бесконечное множество решений: можно найти сколько угодно различных , которые удовлетворяют (6). Геометрически это обозначает, что можно найти бесконечное число различных прямых, вокруг которых можно выполнить вращение, совмещающее с . На рис. 3 приведён пример, в котором поворот выполняется по кратчайшему пути вокруг прямой с направляющим вектором , ортогональным плоскости . Очевидно, что .
На рис. 4, а) и б) приведён пример, в котором вокруг некоторой оси с направляющим вектором построен круговой конус с направляющими прямыми и . Ясно, что вокруг такой оси можно сделать поворот, совмещающий с , который будет выполнен не по кратчайшему пути (не в плоскости ), и угол , измеряемый в плоскости основания конуса , не будет равен , измеряемый в плоскости .
Рис. 4. Поворот r к p вокруг произвольной осиЧтобы найти неизвестное значение , я добавил два новых объекта и , получаемые из векторов и . Выражение (6), аналогично (4), расширяется до системы уравнений
Теперь можно утверждать, что кватернион , найденный из этой системы уравнений (8), является единственным решением, и он выполняет такой поворот в пространстве, который совмещает тройку векторов базиса ЛСК с векторами ГСК. Следовательно, его можно подставить в выражение (7) и вычислить искомое — положение ОНВ.
Когда я записал (8), отчего-то стало ясно, что здесь безразмерная куча тригонометрии может не возникнуть, и аналитическое решение поэтому можно будет найти более-менее просто.
Геометрия задачи
Рис. 5. Геометрия задачиГеометрически задача теперь выглядит так. Нужно найти в пространстве такую ось, вокруг которой можно выполнить поворот, совмещающий вектор с вектором , и вектор с вектором . Прямые, направляющими векторами которых являются (или ) и (или ), образуют два различных круговых конуса , . Эти конусы имеют общую ось, направляющим вектором которой является искомый . При этом повороты к , i = 1, 2, будут выполняться не по кратчайшему пути, и поэтому углы , измеренные в плоскости оснований конусов , будут отличаться от углов (рис. 5).
Здесь и далее нам понадобятся два таких утверждения.
Утверждение 1. Угол поворота вокруг биссектрисы такого, который совмещает с , равен (рис. 4, в), г)).
Утверждение 2. Поворот, который совмещает с , i = 1, 2, вокруг некоторой прямой можно сделать тогда и только тогда, когда эта прямая лежит в плоскости, натянутой на и (плоскость ), рис. 6). Вокруг любой другой прямой такой поворот выполнить нельзя.
Рис. 6. Плоскости векторов b и dДля доказательства этих утверждений нужно рассмотреть свойства кругового конуса , образованного линией, направляющий вектор которой равен (или ), а ось лежит в плоскости .
Очевидно, что ось, вокруг которой можно сделать такой поворот, который совместит с , i = 1, 2, будет одновременно принадлежать обеим плоскостям , то есть будет совпадать с линией их пересечения. Поэтому вектор будем искать из уравнения линии пересечения плоскостей (рис. 7).
Рис. 7. Линия пересечения плоскостейЭта прямая не будет совпадать с прямыми, определяемые направляющими векторами . Проходя через начало координат, она образует некоторый угол с вектором , и угол с вектором (рис. 8). Оба этих угла нам пока неизвестны и .
Рис. 8. Все векторыПосмотрим на рис. 8. Если взять некоторый кватернион , который поворачивает вектор на в плоскости , т.е.
и повернуть его вокруг начала координат на угол в плоскости , то из
мы получим вектор , который в свою очередь является кватернионом поворота на угол для вектора , причём при этом будет описывать дугу в пространстве. Поворот к может быть выполнен кватернионом , который мы найдём чуть позже из условия его ортогональности к плоскости .
Из утверждения 2 следует, что вектор может быть совмещён с вращением вокруг оси с направляющим вектором на некоторый угол , который, очевидно, функционально зависит от . Поэтому, зная и зависимость , мы сможем построить из кватерниона кватернион , являющийся решением задачи.
Зависимость мы найдём немного позже из простых тригонометрических соотношений.
Угол будем искать из следующих соображений. Так как ортогонален одновременно и , то результат векторного произведения будет сонаправлен с . Обозначим
и запишем такое скалярное произведение: . Отметим, что направление не зависит ни от , ни от . Поэтому для вычисления примем и , то есть угол, при котором . Следовательно, в записанном выше скалярном произведении остаётся одна переменная , которую можно вычислить, решив уравнение
полагая, что . Теперь, зная , зависимость и вектор , искомый кватернион будет выглядеть так:
Осталось найти каждый из описанных выше элементов, чтобы решить задачу. Заметим, что объекты , , , , , определяются аналогично. Поэтому далее нижний индекс »1» или »2» буду заменять на » i », подразумевая, что i = 1, 2 .
Кватернионы, которые будем искать
Ещё раз перечислим кватернионы и векторы, которые мы сейчас будем строить для получения решения:
кватернион : совмещает вектор с по кратчайшей траектории,
кватернион : направляющий вектор биссектрисы угла между векторами и ; векторы и определяют плоскость , в которой лежит искомый кватернион ,
кватернион : сонаправлен с ; модуль векторной части равен 1,
кватернион : поворачивает вектор в плоскости на угол ; значение неизвестно,
зависимость : вычисляет для построения искомого кватерниона из ,
кватернион : получен поворотом вектора в плоскости на угол ; из будет получено решение,
кватернион : нужен для вычисления угла ,
и, наконец, результирующий кватернион : получается из , учитывая найденные и .
Кватернион
Найдём кватернион , который совмещает с по кратчайшей траектории. Вектор перемещае