nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

Ликбез по кватернионам, часть 15 - среднее от двух кватернионов

Часть 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-го порядка
Часть 10 1/2 - интегрирование с поддержанием нормы
Часть 11 - интегрирование угловых скоростей, методы высших порядков (в разработке)
Часть 12 - навигационная задача
Часть 13 - Дэвенпорт берёт след!
Часть 14 - линейный метод Мортари-Маркли
Часть 15 - среднее от двух кватернионов
Часть 15 1/2 - проверка и усреднение кватернионов
Часть 16 - разложение кватерниона на повороты

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

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

Вопрос: если мы считаем, что оба кватерниона Λ, Μ были выданы с одинаковой точностью, как их правильно усреднить, получить из них новый кватернион Ν, который должен шуметь меньше?


Напрашивается взять среднее арифметическое:

но есть две проблемы. Первая: полученный кватернион не будет нормирован, и чем сильнее отличаются исходные два значения, тем больше будет ошибка. Так, если

а

(оба с единичной нормой), то



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

non-unit - ненормированное значение, полученное ранее)

Вторая проблема более серьёзная, причём всё может работать замечательно долгие годы, пока эта проблема наконец не проявится, когда этого никто не ожидал, когда "звёзды неудачно сложатся".

Речь идёт о том, что каждому повороту в пространстве соответствует два разных кватерниона, отличающихся знаком. К примеру, нулевому повороту соответствует как кватернион Λ=1, так и кватернион Μ=-1. И если два наших прибора выдадут один и тот же поворот разными способами, мы можем "на ровном месте" заполучить нулевой кватернион (или очень близкий к нему), вообще не выражающий какого-либо поворота!

Сценарий примерно такой: одно устройство было включено раньше, измеряло плавно меняющуюся ориентацию и насчитало один полный оборот (точнее, нечётное количество полных оборотов!). При этом кватернион выдавался плавно, без ступенек, и за один полный оборот поменял свой знак. Теперь мы включили второе устройство, и оно, не имея "предыстории", выдало тот же самый поворот, но без перемены знака кватерниона. Как говорится, приплыли.

Другой сценарий: на космическом аппарате стоят звёздные датчики, направленные в разные стороны (чтобы при произвольной ориентации в пространстве солнечная засветка или Земля могла бы нарушить работу одного из звёздных датчиков, но не всех сразу), и мы пересчитываем все кватернионы к одной системе координат, и там может в какой-то момент появиться знак "-".

К примеру, эти звёздные датчики развёрнуты на 180 градусов по оси X. Система координат первого из них совпадает с системой координат космического аппарата (КА), что соответствует единичному кватерниону, а кватернион, выдаваемый вторым аппаратом, необходимо помножать на кватернион i. Если звёздный датчик обнаружит, что направлен непосредственно на южный полюс, и кватернион ориентации равен i (т.е координаты КА совпадают со второй экваториальной системой - мы просто победители по жизни), то при умножении мы получим -1, легко и непринуждённо.

Чтобы обезопасить себя от этой ситуации, процедуру усреднения нужно самую малость усложнить. Она сформулируется так:

1. Считаем скалярное произведение кватернионов (см введение метрики, "расстояния" между поворотами),

(p от слова product - произведение)

2. Если p>0, то считаем ненормированный средний кватернион по формуле:

в противном случае - по формуле


3. Нормируем кватернион. Если между поворотами не должно быть большой разности, подойдёт приближенная формула, использующая только сложения и умножения:


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

Чтобы оценить эту метрику, выразим её через скалярное произведение кватернионов p:


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

Мы хотим убедиться, что различие между кватернионами не превышает некоторого угла, α. Это значит, метрика d не должна превышать . Возводим в квадрат выражение:


и в конце концов приходим к результату:



Алгоритм усреднения будет таков. Заранее определяемся, какое расстояние между поворотами будет считаться приемлемым, назовём его α. Сохраняем в память значение


Теперь, каждый раз получая кватернионы Λ и Μ, мы предпринимаем следующие шаги:
1. Считаем скалярное произведение кватернионов (см введение метрики, "расстояния" между поворотами),

(p от слова product - произведение)

2. Если

то показания нас устраивают. В противном случае бьём тревогу - данные не согласуются!
3. Если p>0, то считаем ненормированный средний кватернион по формуле:

в противном случае - по формуле


4. Нормируем кватернион. Подойдёт приближенная формула, использующая только сложения и умножения:



Доказать, что поступать надо именно таким образом - не так-то просто! Ещё сложнее расширить этот случай на N входных кватернионов с присвоенными им весами ωn. По сути, мы приходим к разновидности навигационной задачи. Подробности - в статье “Averaging Quaternions,” F. Landis Markley, Yang Cheng, John L. Crassidis, and Yaakov Oshman, Journal of Guidance, Control, and Dynamics, Vol. 30, No. 4, July–August 2007, pp. 1193–1196.

Subscribe

  • Формулы приведения, что б их... (и atan на ТРЁХ умножениях)

    Формулу арктангенса на 4 умножениях ещё немножко оптимизировал с помощью алгоритма Ремеза: Ошибка уменьшилась с 4,9 до 4,65 угловой секунды, и…

  • Алгоритм Ремеза в экселе

    Вот и до него руки дошли, причина станет ясна в следующем посте. Изучать чужие библиотеки было лениво (в том же BOOSTе сам чёрт ногу сломит), писать…

  • atan на ЧЕТЫРЁХ умножениях

    Мишка такой человек — ему обязательно надо, чтоб от всего была польза. Когда у него бывают лишние деньги, он идёт в магазин и покупает какую-нибудь…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments