Ещё одна практическая задачка. В космической технике любят всё дублировать, ставить в двух экземплярах. Если прибор при этом потребляет немного и имеет приличный ресурс, то никто не мешает запустить оба прибора сразу, что позволит повысить точность выдаваемых значений и вовремя распознать ошибку, если они вдруг стали выдавать принципиально различные данные.
Допустим, что оба прибора выдают кватернион - это могут быть звёздные датчики (астроориентаторы), выдающие ориентацию космического аппарата, или это могут быть приборы стыковки, выдающие взаимную ориентацию космического корабля относительно космической станции (вот совсем не палюсь сейчас).
Вопрос: если мы считаем, что оба кватерниона Λ, Μ были выданы с одинаковой точностью, как их правильно усреднить, получить из них новый кватернион Ν, который должен шуметь меньше?
Напрашивается взять среднее арифметическое:
но есть две проблемы. Первая: полученный кватернион не будет нормирован, и чем сильнее отличаются исходные два значения, тем больше будет ошибка. Так, если
а
(оба с единичной нормой), то
Как видно, проблема не так уж велика: даже при различии в 10 градусов (не забываем, что в кватернионе используются половинные углы) норма уменьшается всего на одну тысячную. Здесь вполне хватит нашего приближенного метода коррекции нормы:
Вторая проблема более серьёзная, причём всё может работать замечательно долгие годы, пока эта проблема наконец не проявится, когда этого никто не ожидал, когда "звёзды неудачно сложатся".
Речь идёт о том, что каждому повороту в пространстве соответствует два разных кватерниона, отличающихся знаком. К примеру, нулевому повороту соответствует как кватернион Λ=1, так и кватернион Μ=-1. И если два наших прибора выдадут один и тот же поворот разными способами, мы можем "на ровном месте" заполучить нулевой кватернион (или очень близкий к нему), вообще не выражающий какого-либо поворота!
Сценарий примерно такой: одно устройство было включено раньше, измеряло плавно меняющуюся ориентацию и насчитало один полный оборот (точнее, нечётное количество полных оборотов!). При этом кватернион выдавался плавно, без ступенек, и за один полный оборот поменял свой знак. Теперь мы включили второе устройство, и оно, не имея "предыстории", выдало тот же самый поворот, но без перемены знака кватерниона. Как говорится, приплыли.
Другой сценарий: на космическом аппарате стоят звёздные датчики, направленные в разные стороны (чтобы при произвольной ориентации в пространстве солнечная засветка или Земля могла бы нарушить работу одного из звёздных датчиков, но не всех сразу), и мы пересчитываем все кватернионы к одной системе координат, и там может в какой-то момент появиться знак "-".
К примеру, эти звёздные датчики развёрнуты на 180 градусов по оси X. Система координат первого из них совпадает с системой координат космического аппарата (КА), что соответствует единичному кватерниону, а кватернион, выдаваемый вторым аппаратом, необходимо помножать на кватернион i. Если звёздный датчик обнаружит, что направлен непосредственно на южный полюс, и кватернион ориентации равен i (т.е координаты КА совпадают со второй экваториальной системой - мы просто победители по жизни), то при умножении мы получим -1, легко и непринуждённо.
Чтобы обезопасить себя от этой ситуации, процедуру усреднения нужно самую малость усложнить. Она сформулируется так:
2. Если p>0, то считаем ненормированный средний кватернион по формуле:
в противном случае - по формуле
3. Нормируем кватернион. Если между поворотами не должно быть большой разности, подойдёт приближенная формула, использующая только сложения и умножения:
Когда мы говорим "не должно быть большой разности", это означает - мы измеряем эту разность (точнее, метрику), и когда она слишком велика, "бьём тревогу" и вовсе не надеемся, что усреднив два абсурдно отличающихся значения, мы умудримся попасть в точку.
Чтобы оценить эту метрику, выразим её через скалярное произведение кватернионов p:
в главе введение метрики, "расстояния" между поворотами мы прошли мимо этого результата, потому что хотели показать сходство с обычной эвклидовой метрикой, а вот для практических целей данная формула очень хороша!
Мы хотим убедиться, что различие между кватернионами не превышает некоторого угла, α. Это значит, метрика d не должна превышать . Возводим в квадрат выражение:
и в конце концов приходим к результату:
Алгоритм усреднения будет таков. Заранее определяемся, какое расстояние между поворотами будет считаться приемлемым, назовём его α. Сохраняем в память значение
то показания нас устраивают. В противном случае бьём тревогу - данные не согласуются! 3. Если p>0, то считаем ненормированный средний кватернион по формуле:
в противном случае - по формуле
4. Нормируем кватернион. Подойдёт приближенная формула, использующая только сложения и умножения: