Przeglądaj źródła

Merge branch 'master' of u21-25peshehodko/ISRPO into master

ypv 2 miesięcy temu
rodzic
commit
86d558c204

BIN
Лекции/kOS/Craft_Gradusnik.png


+ 126 - 0
Лекции/kOS/kOS.md

@@ -0,0 +1,126 @@
+### Введение в KSP и kOS
+
+**Kerbal Space Program (KSP)** — это симулятор космических полетов, который позволяет игрокам проектировать и запускать свои собственные космические корабли, исследовать планеты, планировать миссии. Игра предлагает высокую степень свободы, позволяя создавать не только простые ракеты и самолёты, но и сложные космические перерабатывающие станции.
+![1](ksp_1.jpg)
+
+Для расширения возможностей игры существует мод **Kerbal Operating System (kOS)**, который позволяет игрокам писать скрипты для управления своими космическими кораблями. Это позволяет автоматизировать многие процессы в игре, создавая автопилоты, систему автоматических запусков, стыковок, вычислять точное время выполнения орбитальных манёвров и даже сложные многозадачные операции, которые обычно требуют вмешательства игрока.
+
+![2](kos_logo_small.png)
+
+### Пример применения kOS в KSP
+
+Построен простой научный аппарат, управление будет осуществляться при помощи заранее написанного скрипта.
+
+![3](Craft_Gradusnik.png)
+
+Разберём основные функции подробнее.
+
+Объявление функции 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 после приземления.
+
+![3](kOS_CLI.png)
+
+### Практические советы и рекомендации
+
+-   **Отладка скриптов**: Использование команды `PRINT` или `ALT:RADAR` для отслеживания значений переменных в процессе работы программы помогает легче выявить ошибки.
+-   **Модулярность**: Разбивайте свои скрипты на функции и блоки для упрощения отладки и улучшения читаемости кода.
+-   **Ресурсы сообщества**: На форумах и в онлайн-ресурсах можно найти много примеров скриптов, которые помогут помочь вам программировать на kOs. Можно найти как простые решения, так и сложные алгоритмы от опытных игроков.
+
+### Заключение  
+
+Использование языка программирования kOS в Kerbal Space Program открывает игрокам новые горизонты для автоматизации процессов и углубленного понимания механик космических полетов. В частности, создание скриптов для суборбитальных и орбитальных полетов позволяет не только значительно упростить рутинные задачи, но и дает возможность экспериментировать с программированием в реальном времени. Автоматизация сбора данных, таких как температура в разных слоях атмосферы, может стать ценным инструментом для исследования физических процессов, происходящих во время полета. Такой подход не только повышает увлекательность игры, но и предоставляет игрокам ценные знания о программировании и астрофизике. С kOS каждый полет может стать уникальным экспериментом, открывающим новые возможности для творчества и аналитики.

BIN
Лекции/kOS/kOS_CLI.png


+ 8 - 0
Лекции/kOS/kOS_вопросы.md

@@ -0,0 +1,8 @@
+Что позволяет делать kOS?
+Автоматизировать управление кораблями.
+
+Что делает команда LOCK STEERING?
+Устанавливает управление кораблем.
+
+Что делает функция AROUND?
+Сравнивает два числа в диапазоне.

BIN
Лекции/kOS/kos_logo_small.png


BIN
Лекции/kOS/ksp_1.jpg