Интегрирование угловых скоростей с помощью кватернионов
Снова весьма "оригинальный" материал, который найти не так-то просто. Автор поначалу и не нашёл - вывел сам, получил улучшение в 4000 раз, обрадовался, начал писать статью и искать подходящий рецензируемый журнал, а 3 дня спустя всё-таки нашёл этот материал в статье 1986 года. Ну тут сложно обижаться - автор не успел бы опубликоваться раньше при всём своём желании!
Методы второго порядка
Разумеется, нам всегда хочется большего. Попробуем дать чуть лучшую аппроксимацию истинному кватерниону поворота:
Осторожно, спойлеры!
Снова применим обозначение
(без него нам было бы совсем туго, с коэффициентами наподобие 3840)
Норма этого кватерниона составит:
Как мы видим, теперь норма будет возрастать значительно медленнее - ошибка по ней имеет четвёртый порядок вместо второго, как было в предыдущем методе. Тем не менее, норма монотонно растёт, и время от времени её необходимо корректировать.
Отнормируем кватернион:
Сравнивая с разложением синуса и косинуса в ряд, обнаруживаем, что первой будет проявляться ошибка в синусе - в нашем Μ2норм вообще нет слагаемого с третьей степенью! Ошибка в кватернионе составит:
Ошибка по углу будет вдвое больше (поскольку в кватернионах используются половинные углы) и составит
то есть ошибка уменьшилась всего лишь в два раза, сохранив ту же самую кубическую зависимость от шага интегрирования!
При использовании метода «первого порядка» нам было нужно 12 умножений и 12 сложений для перемножения кватернионов. Добавим сюда ещё три умножения на Δt/2 - получится 15m + 12a.
В данном методе 2-го порядка придётся использовать 16 умножений и 12 сложений для перемножения кватернионов, ведь скалярная часть больше не равна единице! К тому же, нам нужно найти квадрат модуля вектора конечного поворота, после чего поделить его на 8 - эти операции требуют ещё 4 умножения и 2 сложения, так что в итоге получаем 23 умножения и 14 сложений, что делает этот метод на 40..50% более затратным, чем предыдущий.
Но если мы, чтобы сохранить то же количество вычислений, увеличим шаг на 40%, то суммарная ошибка как раз и возрастёт в два раза, за которые мы боролись - игра не стоит свеч. Разве что норма почти остаётся на месте, да всё равно не до конца.
Проверка на нашем примере позволяет подтвердить изложенные оценки - ошибка действительно снижается в два раза, а норма за 72 шага становится равной 1,000033.
Модифицированный метод второго порядка Оценивая ошибки двух методов, приведённых выше, можно заметить интересную особенность: введение слагаемого второго порядка не влияет (разве что слагаемым четвёртого порядка) на скалярную (действительную) часть кватерниона после его нормировки, тогда как слагаемое третьего порядка в векторной части явно от него зависит. Так почему бы не найти такое слагаемое, чтобы и его «подогнать» под правильный ответ?
Ответ будем искать в виде:
Норма будет равна:
Отнормируем кватернион:
(здесь мы учитывали слагаемые до третьего порядка включительно)
Как и ожидалось, скалярная компонента не зависит от α, тогда как коэффициент при φ3 в векторной компоненте мы можем задать какой угодно. Выберем его так, чтобы векторная компонента соответствовала разложению синуса в ряд:
Искомая формула для модифицированного метода второго порядка выглядит так:
Всё отличие - вместо 1/8 у нас тут стоит 1/12.
И мы уже знаем, что ошибка третьего порядка (связанная с нелинейностью - с угловым ускорением мы здесь ничего сделать не можем!) у нас уйдёт. А как насчёт четвёртого порядка? Снова запишем норму кватерниона:
Разложим величину, обратную к норме, в ряд Тэйлора, до 4-го порядка включительно:
Теперь отнормируем кватернион, оставляя слагаемые до пятого порядка включительно:
Обнаруживается чудесная вещь: слагаемое четвёртого порядка тоже оказалось абсолютно верным, тогда как расхождение кроется в пятом порядке и составляет:
Ошибка по углу будет вдвое больше (поскольку в кватернионах используются половинные углы) и составит
потрясающий результат, ведь не только ошибка интегрирования при уменьшении шага вдвое падает в 16 раз, но и число в знаменателе стоит огромное!
В нашем примере, всё так же используя шаг 5 градусов и сделав 72 шага (полный оборот), получаем ошибку по углу 2,9×10-5 градуса, или 0,1''.
Улучшение по сравнению с методом «первого порядка» составило 7 500 раз (!). Норма кватерниона растёт втрое медленнее, чем в методе «первого порядка», в нашем примере она достигла значения 1,023 за весь оборот. Это не так хорошо, как в обычном методе «второго порядка», рассмотренного выше, но всё равно очень достойно.
Данный метод был предложен в статье [Захарин М.И., Сокол В.Ф., Вычисление координат вектора ориентации при переменном шаге получения квазикоординат // Кибернетика и вычислительная техника - 1986 - Вып. 69. - С. 52-57]. Если она у кого-то есть в бумажном или электронном виде - напишите, пожалуйста, в ЛС.
Эта статья и её основные результаты были упомянуты в книге "Введение в теорию Бесплатформенных Инерциальных Навигационных Систем (БИНС)" Бранца и Шмыглевского, 1992 года.
Осталось обсудить методы интегрирования более высоких порядков, и разобраться: а какой же из них применять? И практические примеры.