Как оптимизировать время воспламенения для фазы горения на орбите и/или фазы выбега при всплытии?

Я играл с линейными законами наведения на основе касательной (в частности, со старым руководством Atlas-Centaur Surveyor, кодом Apollo IGM и Space Shuttle PEG), и хотя у PEG есть опция для фазы движения перед окончательным прожигом, я не знаю никаких режимов. где предиктор-корректор будет оптимизировать этот берег. Похоже, это внешний параметр.

Я нашел такие документы, как, например:

Пинг Лу, Брайан Дж. Гриффин, Грегори А. Дьюкман и Фрэнк Р. Чавес. «Планирование и руководство быстрым оптимальным многократным восхождением», Journal of Guidance, Control and Dynamics, Vol. 31, № 6 (2008), стр. 1656-1664.

Но вырвать внутренности алгоритма PEG и заменить его подобным подходом будет довольно агрессивно (и я не уверен, что сейчас на это способен). Я также не обязательно требую оптимальности вплоть до последнего dV топлива, а простота и конвергенция были бы для меня более важными — поэтому алгоритмы, которые в настоящее время использует НАСА, вероятно, более обширны, чем то, о чем я прошу.

Я подозреваю, что есть несколько простых алгоритмов эпохи конца 60-х / начала 70-х годов для получения по крайней мере достаточно хороших ответов на:

  • береговая фаза перед окончательным выходом на орбиту
  • время зажигания перед маневром конечной тяги на орбите
  • время воспламенения до схода ожога до посадки на тело (безвоздушное)

И это, в конечном счете, вопрос космической программы Кербала. И, к сожалению, мой последний курс вариационного исчисления был около 20 лет назад, так что я немного заржавел в математике.

Я смутно понимаю теорию праймер-векторов, и, безусловно, мне кажется, что функция переключения типа «бах-бах» — это то, к чему я хотел бы добраться, но я не знаю, как вытащить ее из ПЭГ или как прикрутить ее к ПЭГ. .

Некоторое возможное уточнение: я не думаю, что меня интересует оптимизация с обратной связью. Я подозреваю, что то, что я хочу, ближе к алгоритму OPGUID и алгоритму SWITCH, определенному в:

Браун, К.Р., Харрольд, Э.Ф. и Джонсон, Г.В. 1969. Быстрая оптимизация полетов ракет с многократным сжиганием. Технический отчет NASA CR-1430, НАСА, Центр космических полетов им. Маршалла.

Чего я не знаю, так это того, есть ли более простые подходы, которые я мог бы использовать, которые могли бы использовать более современные готовые алгоритмы (точнее, я уже ссылаюсь на http://www.alglib.net/optimization/ для Levenberg-Marquardt). оптимизатор, и у него есть много других оптимизаторов, которые могут сделать решение проблемы оптимизации траектории намного проще, но у меня нет опыта, чтобы знать, что может быть полезно).

И я думаю, что мой вопрос сводится к тому, должен ли я погрузиться в алгоритмы OPGUID и SWITCH — и в десятки страниц кода на Фортране, который старше меня — или есть более простой и современный способ сделать это, который я пропал? С учетом внешнего ограничения, что до сих пор мне удавалось более успешно реализовывать старые ТД НАСА, чем алгоритмы, описанные в литературе.

Уточнения полезны!+1

Ответы (1)

Здесь доступны блок-схемы для кода PEG-4, которые относятся к маневрам на орбите и сходу с орбиты:

https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19760024151.pdf

В коде TURNR необходимо, чтобы максимальное значение phi ограничивалось < 45 градусами. А также необходимо реализовать ограничение величины lambdaDot_xz до 0,35 частоты Шулера при записи. Более подробная информация содержится в статье 1979 года об алгоритме PEG:

https://ntrs.nasa.gov/search.jsp?R=19790048206

Код шаттла использовал некоторые подпрограммы, называемые LTVCON и TRANSTIME, для управления нацеливанием на выгорание-побережье для интеграции через выгорание и побережье, включая эффекты J2 сжатия Земли, чтобы поразить цель ar, v.

Я обнаружил, что достаточно (в KSP) реализовать в корректоре:

  1. нормально проецировать rp в целевую плоскость iy
  2. установить rd = rp (без ограничений по позиции прогара)
  3. вычислить угол со знаком между rd и перицентром целевой орбиты, чтобы получить истинную аномалию положения выгорания (пересечение перицентра rd должно быть в направлении -iy; скалярное произведение этого с -iy должно быть положительным; или же изменить знак под углом)
  4. установите vd равным скорости целевой орбиты при этой истинной аномалии
  5. установите коэффициент усиления равным 1,0 (поскольку нет интегрирования по какой-либо фазе выбега)

Большая часть сложности LTVCON и TRANSTIME, по-видимому, связана с использованием точного предиктора в коде челнока для учета эффектов J2 во время фазы выбега (или большей части фазы выбега — поскольку положение выгорания изменяется из-за PEG времени выбега). варьируется в зависимости от побережья дельты, и я думаю, что это происходит через точное предсказание с J2 = 0 - вероятно, либо по причинам численной эффективности, либо по причинам численной стабильности?). Я также все еще несколько озадачен константами C1 и C2 в подпрограмме LTVCON (особенно тем, для чего используется C1).

Что касается времени выполнения, то я обнаружил, что просто опережать процесс записи с помощью tgo/2 работает нормально, хотя это может быть и не совсем оптимально. Я подозреваю, что позволить PEG работать непрерывно, а затем выполнить прожиг на J/L перед прожигом, может быть немного более точным (в отсутствие лучшего планировщика траектории на основе исчисления вариаций).

ОБНОВЛЕНИЕ: я думаю, что теперь я немного лучше понимаю, что ограничения lambdaDot_xz в подпрограмме TURNR используются для аварийного прекращения и спуска с орбиты. В итоге я использовал стандартную процедуру TURNR, которая вычисляет rgo изrgo = rd - ( r + v * tgo + rgrav ) + rbias(который использует rd, где, как я полагаю, ограничение положения возвращается в процедуру), а затем вычисляет lambdaDot в обычном режиме и использует интегралы тяги rthrust и vthrust. Я столкнулся с трудностью в том, что даже через 50-60 секунд после окончания записи вычисление lambdaDot становится совершенно нестабильным. Я зафиксировал lambdaDot до 0,35 * значение частоты Шулера, поэтому ограничение применяется к lambdaDot, и оно становится равным нулю, когда tgo стремится к нулю. Принудительное использование этого зажима на протяжении всего горения (как это происходит при сходе с орбиты или AOA) означало, что место выгорания имело большое значение смещения, поэтому оно было неточным.

C1 и C2 являются коэффициентами в линейном уравнении, которое устанавливает соотношение между горизонтальной и вертикальной скоростью: V(vert) = C2 * V(horiz) + C1. Для горения шаттлов OMS1 или OMS2 целевой точкой всегда была точка апогея или перигея, что означало, что вертикальная скорость равна нулю. Следовательно, C1 и C2 должны быть равны нулю. Для схода с орбиты вертикальная скорость должна быть отрицательной в точке El, которая является целевой точкой. Для маневров ухода с орбиты C1 будет большим положительным числом, а C2 будет между 0 и -1. Сход с орбиты 150 морских миль может иметь C1 = 15 434 и C2 = -0,6200.
Я все еще кое-что упускаю, потому что почему бы просто не иметь C2, а затем ввести горизонтальную скорость цели, а затем считать вертикальную скорость и установить C1 = 0?
Я что-то помню о «наведении» Tgo?Vgo? идет несошедшимся к концу записи OMS Shuttle. Посмотрим, что я могу найти.
Чтобы было ясно, существует обычная нестабильность конечного наведения, которая происходит с PEG и требует освобождения зажима положения (rd = rp) за 40 секунд до окончания записи, а затем все активное наведение, кажется, действительно должно быть прекращено за 10 секунд до конца. ожога. Это была дополнительная нестабильность вдобавок ко всему. (Я также нашел больше ссылок на C1 и C2 и думаю, что начинаю лучше их понимать)
@OrganicMarble на стр. 40 Джаггерс обсуждает проблемы последних 40 секунд записи OMS в интегралах J и Q: ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19760020204.pdf
Обнаружил, что я случайно удалил из своего кода блокировку остановки обновления lambdaDot за последние 40 секунд, но это все еще не совсем объясняет, почему lambdaDot сходит с ума за 40 секунд до конца, хотя я начинает подозревать, что 40 секунд были настроены на шаттл и его двигатели.
Также наткнулся на утверждение в документе, что PEG полагается на правильное определение ускорения в конечной фазе, чтобы избежать нестабильности, и я отследил ошибку из ошибок, которые у меня были вокруг этого. Я не считал vgo вниз во время реальной терминальной фазы, используя только воспринимаемый dV и реализуя это (чтобы я мог видеть, как он работает без исправления PEG) и исправлял ошибки, пока vgo не достиг 0,1, когда tgo не достиг 0,0, все стало намного стабильнее и орбиты стал точнее.