В борьбе меня с кватернионами одержана полная победа кватернионов!
Ту арифметику, что я писал раньше, опробовал на симуляторе.
Интересовала меня плывучесть единичности векторов и их ортогональности за счёт накопления ошибок вычисления за десятки тысяч циклов счёта.
Плывёт, сволочь!
Скорость плывучести пропорциональна квадрату входных сигналов. Что и ожидалось.
Заодно проверил, какую ошибку дают приближённые формулы для синусов и косинусов. В сравнение с настоящими. Оказалось, примерно в тысячу раз меньше плывучести.
Что хорошо. Но непонятно, кому хорошо.
Так-то в грандиозных планах было сделать пилота, который всё знает и умеет, ему только сказать "лети туда", и он всё сам посчитает.
Но магнитное поле Земли у меня в МК засунуть не получилось.
Арифметика ориентации плывучая и тяжёлая.
И борьба с этим стала как-то поднадоедать!
Другой вариант — сделать пилота, который смотрит на датчики и на уставки и тупо поддерживает сигналы датчиков равными уставкам.
Без никакого интеллекта.
=====
По секстанту и компасу.
Датчик солнца (1D) даёт угол между направлением на солнце и осью z ракеты.
Направление на солнце — очень точная величина, за 5 минут полёта уплывёт всего на стотысячную.
Так что всё определяется точность самого датчика.
Датчик приделан к одному боку ракеты и смотрит примерно в направлении оси x ракеты.
Чтоб датчик работал, ракета должна быть всё время повёрнута к солнцу боком x. Ну, ± лапоть, не точно, градусов 10...20.
Возможно (но не обязательно) поставить ещё один датчик солнца уже в поперечном направлении, который будет рулить креном ракеты.
Неточный, лишь бы влево/вправо показывал и поддерживал где-то посередине.
Пилот должен смотреть на разницу измеренного угла к уставке и вращать ракету вокруг оси y.
Чтоб углы совпали.
Датчик магнитного поля (3D) даёт вектор направления поля к осям ракеты.
Магнитное поле не очень стабильно, в течение суток из-за солнечного ветра колеблется примерно
на тысячную. Если магнитной бури нет.
Одна тысячная — это, примерно 7 км высоты орбиты. Будет, понятно, в несколько раз хуже, но терпимо.
Начало нижнего графика на картинке — три компоненты спокойного поля (величина поля около 60000 nT):
Кроме колебаний во времени, поле ещё и разное в разных точках пространства.
Так что надо будет заранее узнать поле в важных точках траектории и сделать правильные уставки.
Для этого есть арифмометры, например:
(
http://serv.izmiran.ru/cgi-bin/igrf-11a.py)
(
IGRF Synthesis Form)
Пилот должен векторно умножить измеренное поле на уставку.
Получится вектор вращения в правильную сторону.
Потом этот вектор надо умножать скалярно на вектора осей ракеты и получатся сигналы для управления.
Поскольку всё происходит в системе ракеты, надо просто взять соответствующие компоненты вектора.
Если есть поперечный датчик солнца, то по крену можно управлять только от него.
А если нет — только по магнитному.
Итого: самое сложное действие (вместо всех кватернионов) — одно векторное умножение.
Ну, ещё нормализация вектора поля. Но необязательно.
Гироскопы нужны управлению, чтоб знать скорость вращения. Для правильного затухания колебаний.
Ну и надо интегрировать вектор скорости.
Чтоб не интегрировать гироскопы, можно просто вместе с уставками положить ориентацию ракеты.
И использовать эту теоретическую ориентацию для интегрирования ускорений от акселерометров.
Потому что ракета же должна быть ориентирована куда надо.
И всё.