Станцию не построить одним пуском: модули возят по частям и соединяют на орбите. Значит нужно уметь догонять — привести аппарат к другому аппарату, который летит со скоростью два с лишним километра в секунду.
Задача разбивается на четыре независимые: свести плоскости, поймать фазовое окно, выполнить переход, погасить относительную скорость. Каждая решается отдельно, и порядок менять нельзя.
Почему нельзя просто лететь к цели
Первое, что хочется сделать, — направить нос на станцию и дать тягу. На орбите это не работает: разгон в сторону цели поднимает вашу орбиту, период растёт, и вы начинаете отставать. Классический результат — аппарат уходит выше и назад, а цель убегает вперёд.
Работает обратная логика: чтобы догнать — опуститесь ниже. Нижняя орбита короче, период меньше, вы обгоняете цель по углу. Поднимаетесь — отстаёте.
Шаг 1. Плоскости
Если ваша орбита наклонена относительно орбиты цели, никакие манёвры «в плоскости» не помогут: вы будете пролетать мимо сверху или снизу.
Плоскости сводятся прожигом поперёк движения, и делать это надо строго в точке пересечения плоскостей — там, где орбиты «ножницами» проходят одна сквозь другую. Цена манёвра:
Δv = 2 · v · sin(Δi / 2)
При скорости 2280 м/с и расхождении в 2° это 80 м/с. При 20° — уже 790 м/с, дороже, чем вывести спутник на орбиту. Отсюда правило: наклонение задают на пуске, а не исправляют потом. Азимут пуска считается из нужного наклонения, об этом Автоматизация запуска по шагам.
Скриптом:
RUNONCEPATH("0:/lib/rendezvous.ks").
PRINT r_relInc(TARGET). // расхождение плоскостей, °
o_burn(r_nodeMatchPlanes(TARGET)). // свести
Про знак. Прожиг поперёк можно дать в две стороны, и «правильная» интуитивно не определяется: KSP работает в левой системе координат, где привычные формулы дают зеркальный результат. Мы на этом уже теряли полёт — разбор здесь. Поэтому модуль знак не вычисляет, а проверяет: строит узел дважды и оставляет тот, после которого расхождение плоскостей меньше. Проверка занимает доли секунды и не ошибается.
Шаг 2. Фазовое окно
Плоскости сведены, теперь вопрос времени. Переход с вашей орбиты на орбиту цели занимает полвитка переходной эллипса. За это время цель уйдёт вперёд на какой-то угол — и надо стартовать так, чтобы она пришла в точку встречи ровно тогда же, когда и вы.
Нужный угол опережения:
θ = 180° − ω_цели · t_перелёта
где t_перелёта = π · √(a³/μ) для переходной орбиты с большой полуосью a = (r₁ + r₂)/2.
Практически: если вы на 80 км, а станция на 250 км, ждать нужно, пока станция окажется примерно на 40–50° впереди вас. Если цель уже пролетела нужную точку — придётся ждать следующего совпадения, и чем ближе периоды орбит, тем дольше ожидание.
PRINT r_phase(TARGET). // где цель сейчас, °
PRINT r_phaseNeeded(TARGET). // где должна быть в момент старта
Ловушка одинаковых орбит. Если ваш период совпал с периодом цели, фаза не меняется никогда — окно не наступит, сколько ни жди. Модуль это ловит и говорит прямо: смени высоту на 5–10 км и повтори. Разные периоды — единственный способ сократить разрыв.
Шаг 3. Переход
Обычный хомановский прожиг: разгон в нижней точке поднимает противоположную апсиду до орбиты цели. Дальше вы летите по инерции, а расстояние до цели само сокращается.
o_burn(r_nodeTransfer(TARGET)).
Хороший переход приводит на 1–5 км от цели. Если промахнулись на десятки километров — почти всегда причина в том, что окно поймано неточно или плоскости сведены не до конца.
Шаг 4. Гашение скорости
Вы рядом, но летите мимо со скоростью в сотни метров в секунду. Дальше работают уже не орбитальные скорости, а относительные: разница векторов вашей скорости и скорости цели.
Чтобы затормозить, нос направляют по вектору относительной скорости — тяга гасит разницу. Дальше подход короткими импульсами, где скорость сближения держат пропорционально дистанции: за километр — метров двадцать в секунду, за сотню метров — один-два.
r_kill(TARGET, 0.5). // погасить относительную скорость
r_approach(TARGET, 100). // подойти на 100 м
Или всё сразу, от подгонки плоскости до подхода:
r_go(TARGET, 100).
Шаг 5. Стыковка — руками
Дальше скрипт из библиотеки останавливается, и это осознанное решение.
Причаливание — другая механика: нужно совместить оси двух портов, а не только позиции; порты имеют магнитный захват, который срывает выравнивание на последних метрах; аппарат надо разворачивать двигателями ориентации, не трогая маршевые. Автопилот для этого пишется отдельно и ломается от каждой нестандартной компоновки.
Практично так:
- MechJeb —
Docking Autopilot, надёжен на дистанциях до сотни метров; - руками — выбрать целевой порт (правый клик → «Установить как цель»), переключить управление на свой порт, дальше по навболу: удерживать маркер скорости на маркере цели, подходить со скоростью 0,5–1 м/с;
- RCS обязателен — без него причалить нельзя.
Магнит захватывает с полуметра, при скорости до 1 м/с. Быстрее — отскок или поломка.
Порядок для скрипта
RUNONCEPATH("0:/lib/rendezvous.ks").
IF NOT HASTARGET { PRINT "цель не выбрана". } ELSE { r_go(TARGET, 100). }
Готовый файл лежит в Ships/Script/missions/rendezvous.ks. Аппарат должен быть уже на орбите — это операция, а не запуск: вывод на орбиту делает отдельный скрипт.
Что важно помнить
- Скрипт работает только на аппарате в фокусе. kOS выполняет код на процессорах в радиусе 2,5 км от активного аппарата; всё остальное в игре заморожено. Рандеву нельзя «поставить в фоне» и заняться другим пуском.
- Монотопливо кончается быстрее, чем кажется. Подход и причаливание съедают его десятками единиц. Модуль бережёт резерв (
C_MONO_RESERVE), но запас закладывайте при постройке. - Стыковочные порты должны совпадать по размеру. Мелкий с крупным не соединится.
- У станции должен быть свободный порт, повёрнутый в удобную сторону. Об этом думают на этапе компоновки — Орбитальные станции.
Что вызывать и с какими параметрами — kOS: справочник библиотеки kerbal.ru. Как строится станция целиком — Орбитальные станции. Наземная сборка и снабжение — Наземные базы и снабжение.