|
@@ -0,0 +1,126 @@
|
|
|
+### Введение в KSP и kOS
|
|
|
+
|
|
|
+**Kerbal Space Program (KSP)** — это симулятор космических полетов, который позволяет игрокам проектировать и запускать свои собственные космические корабли, исследовать планеты, планировать миссии. Игра предлагает высокую степень свободы, позволяя создавать не только простые ракеты и самолёты, но и сложные космические перерабатывающие станции.
|
|
|
+
|
|
|
+
|
|
|
+Для расширения возможностей игры существует мод **Kerbal Operating System (kOS)**, который позволяет игрокам писать скрипты для управления своими космическими кораблями. Это позволяет автоматизировать многие процессы в игре, создавая автопилоты, систему автоматических запусков, стыковок, вычислять точное время выполнения орбитальных манёвров и даже сложные многозадачные операции, которые обычно требуют вмешательства игрока.
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### Пример применения kOS в KSP
|
|
|
+
|
|
|
+Построен простой научный аппарат, управление будет осуществляться при помощи заранее написанного скрипта.
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+Разберём основные функции подробнее.
|
|
|
+
|
|
|
+Объявление функции AROUND которая сравнивает 2 числа в заданном диапазоне.
|
|
|
+```kos
|
|
|
+FUNCTION AROUND
|
|
|
+{
|
|
|
+PARAMETER NUM1. // Первое число
|
|
|
+PARAMETER NUM2. // Второе число
|
|
|
+PARAMETER NUM3. // Диапазон, в котором они должны находиться
|
|
|
+IF ((NUM1 - NUM2) < NUM3) AND ((NUM1 - NUM2) > - NUM3)
|
|
|
+ RETURN TRUE. // Если NUM1 и NUM2 находятся в диапазоне NUM3, возвращаем TRUE
|
|
|
+ELSE
|
|
|
+ RETURN FALSE. // Если нет – FALSE
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+функция LOGTEMP активирует научный блок с указанным именем.
|
|
|
+```kos
|
|
|
+FUNCTION LOGTEMP
|
|
|
+{
|
|
|
+PARAMETER ThermName. // Принимаем имя термометра
|
|
|
+PARAMETER Transmit. // Транслировать или coхранить данные эксперимента
|
|
|
+set gradusnik to ship:partsTagged(ThermName) [0]. // Hаходим соотв. деталь корабля и помещаем в переменную gradusnik
|
|
|
+set ScienceModule to gradusnik:GetModule("ModuleScienceExperiment"). // Hаходим внутри этой части модуль, отвечающий за "науку"
|
|
|
+ScienceModule:DEPLOY. // Запускаем эксперемент
|
|
|
+IF Transmit
|
|
|
+{
|
|
|
+WAIT UNTIL ScienceModule:HASDATA. // Ждём когда в модуле появиться данные эксперемента
|
|
|
+ScienceModule:TRANSMIT. // Передаём данные об эксперементе по радиосвязи
|
|
|
+PRINT "Temperature at altitude " + ALT:RADAR + " transmitted to KSC".
|
|
|
+}
|
|
|
+ELSE PRINT "Temperature at altitude " + ALT:RADAR + " stored in " + ThermName.
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+Перейдём к основному скрипту:
|
|
|
+
|
|
|
+```kos
|
|
|
+WAIY 1.
|
|
|
+LOGTEMP("gradusnik0", FALSE). // Меряем температуру на стартовом столе
|
|
|
+
|
|
|
+PRINT "Cowntdown initiated:". // Обратный отсчёт
|
|
|
+WAIT 1.
|
|
|
+PRINT "3".
|
|
|
+WAIT 1.
|
|
|
+PRINT "2".
|
|
|
+WAIT 1.
|
|
|
+PRINT "1".
|
|
|
+WAIT 1.
|
|
|
+PRINT "Launch!".
|
|
|
+
|
|
|
+LOCK STEERING TO HEADING(90,90). // Привязываем руление вертикально вверх
|
|
|
+STAGE. // Стартуем ступень
|
|
|
+
|
|
|
+WAIT UNTIL STAGE:SOLIDFUEL < 0.1. // Ждём, пока в ракетном ускорителе не выгорит топливо
|
|
|
+PRINT "Solid booster exhausted".
|
|
|
+
|
|
|
+WAIT UNTIL ETA:APOAPSIS < 1. // Ждём, пока до апоцентра останется меньше секунды
|
|
|
+PRINT "Decoupling solid booster". // Отстыковка ракетного ускорителя
|
|
|
+WAIT 1.
|
|
|
+STAGE.
|
|
|
+PRINT "Solid booster decoupled".
|
|
|
+
|
|
|
+SET CHECK_80000 TO TRUE.
|
|
|
+SET CHECK_40000 TO TRUE.
|
|
|
+SET CHECK_20000 TO TRUE.
|
|
|
+SET CHECK_5000 TO TRUE.
|
|
|
+SET CHECK_LANDED TO TRUE.
|
|
|
+
|
|
|
+UNTIL ((ALT:RADAR < 320) AND (SHIP:AIRSPEED < 200)) // Выполняем цикл до условий: высота < 320 метров, скорость воздушного потока < 200 м/с
|
|
|
+{
|
|
|
+// На каждой из высот выполняем измерение температуры
|
|
|
+IF AROUND(ALT: RADAR, 80000, 1000) AND CHECK_80000
|
|
|
+ {LOGTEMP("gradusnikl", FALSE). SET CHECK_80000 TO FALSE.}
|
|
|
+IF AROUND(ALT: RADAR, 40000, 1000) AND CHECK_40000
|
|
|
+ {LOGTEMP("gradusnik2", FALSE). SET CHECK 40000 TO FALSE.}
|
|
|
+IF AROUND(ALT: RADAR, 20000, 1000) AND CHECK_20000
|
|
|
+ {LOGTEMP("gradusnik3", FALSE). SET CHECK_20000 TO FALSE.)
|
|
|
+IF AROUND(ALT: RADAR, 5000, 1000) AND CHECK_5000
|
|
|
+ {LOGTEMP("gradusnik4", FALSE). SET CHECK_5000 TO FALSE.}
|
|
|
+
|
|
|
+// А еще создаем лог-файл для просмотра в эксель
|
|
|
+LOG TIME:SECONDS + ";" + SHIP:ALTITUDE + ";" + SHIP:VERTICALSPEED + ";" + SHIP:SENSORS:TEMP + ";" to log1.txt.
|
|
|
+WAIT 0.5. // Это задерка внутри цикла
|
|
|
+}
|
|
|
+
|
|
|
+// После окончания цикла, активируем ступень с парашютом
|
|
|
+STAGE.
|
|
|
+PRINT "Parachute deployed".
|
|
|
+
|
|
|
+// Освобождаем руление, пусть спутник висит на парашюте свободно.
|
|
|
+UNLOCK STEERING.
|
|
|
+WAIT UNTIL (STATUS = "LANDED") OR (STATUS = "SPLASHED"). // Ждем приземления или приводнения
|
|
|
+LOGTEMP("gradusnik5", FALSE) . // Меряем температуру после приземления
|
|
|
+SWITCH Tо 0. // Переключаемся на диск базы.
|
|
|
+COPY logl.txt FROM 1. // Копируем лог на базу. Файл появится в папке "Kerbal Space Program/Ships/Script/"
|
|
|
+```
|
|
|
+
|
|
|
+Фотография консоли kOS после приземления.
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### Практические советы и рекомендации
|
|
|
+
|
|
|
+- **Отладка скриптов**: Использование команды `PRINT` или `ALT:RADAR` для отслеживания значений переменных в процессе работы программы помогает легче выявить ошибки.
|
|
|
+- **Модулярность**: Разбивайте свои скрипты на функции и блоки для упрощения отладки и улучшения читаемости кода.
|
|
|
+- **Ресурсы сообщества**: На форумах и в онлайн-ресурсах можно найти много примеров скриптов, которые помогут помочь вам программировать на kOs. Можно найти как простые решения, так и сложные алгоритмы от опытных игроков.
|
|
|
+
|
|
|
+### Заключение
|
|
|
+
|
|
|
+Использование языка программирования kOS в Kerbal Space Program открывает игрокам новые горизонты для автоматизации процессов и углубленного понимания механик космических полетов. В частности, создание скриптов для суборбитальных и орбитальных полетов позволяет не только значительно упростить рутинные задачи, но и дает возможность экспериментировать с программированием в реальном времени. Автоматизация сбора данных, таких как температура в разных слоях атмосферы, может стать ценным инструментом для исследования физических процессов, происходящих во время полета. Такой подход не только повышает увлекательность игры, но и предоставляет игрокам ценные знания о программировании и астрофизике. С kOS каждый полет может стать уникальным экспериментом, открывающим новые возможности для творчества и аналитики.
|