Ksp rss гайд
Такое решение было навеяно ещё и желанием воспроизвести, в некотором смысле, советскую космическую программу. А она, как известно, полагалась больше на автоматику, чем на ручное управление.
Самый, пожалуй, известный мод для автоматизации полетов - это MechJeb kOS - Kerbal Operating System . Он позволяет писать программы для автоматизации практически всего и управления кораблём почти так же, как вручную, только на автомате. При установленном RemoteTech это очень удобно, поскольку можно управлять аппаратом, не имея связи с космическим центром, только последовательность команд продумать и загрузить в крафт нужно заранее.
- Введение от Finn: Часть 1 , Часть 2 , Часть 3
- Автопилоты вывода на орбиту (RSS) от Max Zomrad
- Посадочный автопилот от Iavasdemsul
- Прочие статьи по тэгу kOS
- Wiki с примерами некоторых скриптов (для устаревшей версии)
- Видеосерия Kerbal Space Programming (на английском) - сильно рекомендую для знающих язык
- Естественно, официальная страница мода
Далее предполагается, что читатель знаком с основными понятиями, такими как апоцентр, перицентр, наклонение, дельта-V, удельный импульс и т.п.
- Asteroid Day
- Cryogenic Engines
- Cryogenic Tanks
- DMagic Orbital Science
- Docking Camera (KURS)
- Kerbal Atomics
- Kerbalism
- KSP Interstellar Extended
- RealChute
- RemoteTech
- SpaceY Heavy Lifters
- Universal Storage
- USI Kolonization
- Ven's Stock Part Revamp
- Community Tech Tree
- Kerbalism
- Kerbal Engineer
- Strategia
- Unmanned before Manned
Итак, приступим.
Первая задача космической программы - запустить хоть что-нибудь хоть куда-нибудь.
В простейшем случае, у нас есть ракета, которую нужно запустить вертикально вверх. В принципе, для этого не нужен ни автопилот, ни ручное управление - достаточно поставить спиральное хвостовое оперение, и ракета при взлёте стабилизируется вращением - и тут хватило бы дельты до космоса.
Но нам всё равно придётся управлять - так что уж поуправляем.
В kOS есть два метода управления - RAW CONTROL и COOKED CONTROL. Чтобы понять первый режим, представьте езду на автомобиле в роли штурмана, если у водителя завязаны глаза.
RAW CONTROL ("сырой" контроль) - это, по сути, ввод действий, которые производит игрок вроде: "Подождать 5 сек.; нажать Z (полная тяга); нажать пробел; включить SAS; подождать 20 сек.; зажать D; подождать 1 сек.; отпустить D; . ". Работа в этом режиме нужна обычно для контроля стыковки, также можно с помощью такого контроля написать собственный алгоритм САС (здесь - Система Автоматической Стабилизации, а не аварийного спасения). Для операций взлёта, посадки и орбитального маневрирования он не очень практичен, поскольку для каждого крафта придётся писать очень сложную последовательность команд.
COOKED CONTROL ("обработанный" контроль) - это использование аналога продвинутой SAS, которой можно задать любое направление для удержания, а также можно задать необходимый уровень тяги. Аналогично стоковой САС, для поворота в заданном направлении и удержании его используется ПИД контроллер. Для пилотирования этот режим гораздо практичнее.
Пробуем управлять ракетой.
Для этого нам нужно сделать ракету, в которой есть беспилотный модуль, модуль kOS, антенна, поскольку без работающего соединения мы не можем передавать команды, и батарейка для работы всего этого богатства.
Тестовая ракета. Модуль kOS подсвечен фиолетовым.
Открываем консоль kOS для интерактивного управления.
Контроль ориентации в "обработанном" режиме производится командой
Чтобы лететь вертикально вверх, пишем
Не забываем точку в конце команды - это особенность КербоСкрипта.
Эта команда "привязывает" рулёжку к направлению "вверх".
steering - это специальная структура в kOS, которая отвечает за то, в каком направлении должен быть ориентирован аппарат.
lock - выражение, которое привязывает переменную к выражению - т.е. каждый раз, когда системе требуется значение переменной, выражение expression перевычисляется и подставляется новое значение. Другое выражение для установки значения переменной -
up - одно из предзаданных направлений, которое означает ориентацию "носом вверх" (подробнее см. ниже).
Для запуска ступени пишем
Ракета взлетает, зачем-то разворачивается на 180 градусов и летит, как положено, вверх. На 4 км, к сожалению, всё равно теряет управление, т.к. слабенькая САС в зонде не справляется. Ну и ладно, задание "запустить первый аппарат" всё равно уже выполнено.
Теперь вопрос - а где же тут автоматизация? Мы же вручную вбили все команды.
Сейчас будет.
Заходим в папку, где установлена игра. Там появилась подпапка Ships/Script. В ней мы и будем хранить наши скрипты. Создаем файл test.ks такого содержания:
Этот скрипт делает всё то, что мы делали до этого. Последняя строчка добавляет команду wait - она работает в двух режимах:
Без последней команды скрипт считается выполненным после запуска ступени, и контроль управления передаётся игроку. wait until false в данном случае не даёт программе завершиться, а автопилоту отпустить руль.
Запускаем аппарат. В консоли пишем:
Первая строчка переключает диск на номер 0. Дисковое пространство организовано так, что для каждого kOS модуля диск 0 - это "мейнфрейм ЦУП" - то, что лежит в папке Ships/Script, диск 1 - это его собственное хранилище (размер его в байтах можно посмотреть в ЦВС или в полёте по правой кнопке, изменить в ЦВС), диски 2, 3 и т.д. - другие kOS модули на том же корабле. То есть у каждого модуля, если их в корабле несколько, нумерация дисков индивидуальная.
По умолчанию бортовой компьютер работает с диска 1. Командой switch мы его переключаем на работу с другого диска. Вместо переключения на другой диск можно указывать полный путь к файлу, который надо запустить:
Естественно, доступ к диску 0 имеется только при наличии работающего соединения. В отсутствие рабочего соединения kOS может запускать только те файлы, которые хранятся на корабле. Поэтому, в идеале, перед полётом нужно скопировать на бортовую ЭВМ всё, что может понадобиться.
Этап второй. Moar Boosterz, или двухступенчатая ракета с вертикальным полётом.
Добавляем вниз разделитель и ещё один бустер. В этот раз присопливим стабилизаторы, чтобы ничего не переворачивалось.
Тестовая ракета 2. Умеет в космос.
К этой ракете уже нужна программа посложнее, поскольку в нужный момент нужно сбросить первую ступень и запустить вторую. Разберём, как это сделать.
Условные переходы и цикл с условием
Перво-наперво, нужно понять, в каком случае требуется сброс ступени. Тут есть три варианта:
а) Рассчитать время работы первой ступени. После запуска уже известной командой wait подождать это время, после чего написать команду на запуск второй ступени.
б) Отслеживать количества топлива в первой ступени и сбросить, когда его там не останется.
в) Отслеживать тягу ракеты и запускать вторую ступень, когда пропадёт тяга.
Из этих вариантов выберем третий, потому что ещё Штирлиц знал, что лучше всего запоминается последняя фраза. (На самом деле, при определении остатков топлива kOS может выдавать ненулевую цифру даже когда ступень закончила работать, а пропадание тяги фиксируется безотказно). Полностью программа полёта получается такая: после взлёта дождаться пропадания тяги, после чего запустить новую ступень.
Получить данные о тяге можно, вызвав
ship - это переменная (типа VESSEL ), в которой хранятся данные об аппарате, на котором находится активный kOS модуль. Если рядом находятся два разных корабля, имеющих kOS на борту, то для каждого из них ship будет означать текущий корабль.
ship:availablethrust даёт тягу на "полном газу" (с учётом ограничителей, выставленных в ЦВС).
Теперь запишем программу полёта двухступенчатой ракеты в виде кода:
И. к сожалению, этот код может не сработать. Например, в ракете на картинке по одной команде stage лишь сбросится первая ступень, а вторая не запустится. Чтобы этого избежать, следует проверить, появилась ли реально тяга после "пробела". Добавим условный переход:
Здесь использован условный оператор if . else , работающий практически так же, как и в большинстве других языков. Чтобы по условию выполнялась последовательность команд, её необходимо заключить в фигурные скобки. Если выполнить нужно только одну команду (как после else в примере), скобки не обязательны, но здесь оставлены для единообразия. Ожидание полсекунды в if вставлено для того, чтобы команда на разделение точно прошла - при попытке сделать две команды stage подряд можно попасть внутрь одного "тика" (цикла расчета физики в игре), и две команды обработаются как одна, чего нам не надо.
Этот код, однако, тоже может не работать, если между сбросом одной ступени и стартом другой есть ещё что-то (например, сброс обтекателя). Естественным выглядит проверка тяги в цикле. В KerboScript имеется только цикл с предусловием until . К работе его нужно привыкнуть, т.к., в отличие от while в других языках, тело цикла в KerboScript выполняется в том случае, если условие цикла не выполнено (в переводе: "пока не будет выполнено условие, повторять действие"). Поэтому программа запуска ступеней нашей двухступенчатой ракеты с циклом будет выглядеть так:
Эту программу сохраняем в файл test.ks. Управления ориентацией для разнообразия тут нет - ракета стабилизирована вращением за счёт спиралевидного оперения.
До космоса эта конструкция добирается, но чтобы добиться стабильной орбиты, нужно тягу давать и в горизонтальном направлении. Как это сделать?
Чтобы в этом разобраться, не нужно понять, что в kOS представляет собой ориентация и каким образом её можно задать. Заодно это прояснит, почему первая ракета после взлёта разворачивалась на 180 градусов вокруг оси.
Нетрадиционная ориентация
Переходим в ангар.
У каждой детали, с которой можно управлять (достуен переключатель Control from here по ПКМ), есть встроенные оси тангажа (X), рыскания (Y) и крена (Z).
Они представляют собой векторы, причём для части в ангаре по умолчанию ось крена направлена "вперёд", к выходу, ось рыскания - вверх, ось тангажа - вправо.
Получить значения этих векторов в текущий момент времени можно через
Заметим, что эти оси образуют левую тройку, а не правую - если наблюдателя поставить на "кончик" вектора Z, то кратчайший поворот, переводящий ось X в ось Y, будет по часовой стрелке, а не против. Это, например, означает, что пикирование будет задаваться через положительный тангаж, а кабрирование - через отрицательный, отака фигня, малята.
Теперь мы поняли, что у капсулы Mk1 "перед" с острого конца, "верх" там, где иллюминатор, а "право" - там, где у сидящего в ней Джебедайи находится правая рука. Заодно заметим, что в ЦВС у неповёрнутой детали ось Z направлена вверх, ось X к выходу (на восток), ось Y на юг.
Для тех, кто не знает - вот в таком положении сидит в капсуле Джебедайя.
Вывод: чтобы задать ориентацию аппарата, нужно задать три взаимно ортогональных оси, с которыми надо совместить оси аппарата. Именно это и содержит структура DIRECTION - направления трёх осей. Важные ориентации:
Внезапно возникающие вопросы: а где право у северного направления? А у верха? И как это вообще понимать?
Давайте запустим аппарат из капсулы Mk1 (лучше с учёным на борту, поможет нам разобраться), какого-нибудь беспилотного модуля, антенны и kOS модуля.
Открываем консоль, пишем:
.
Видим какое-то R(270.097,315.717,0) . А это, братцы, углы Эйлера. Это значит, что для получения ориентации на север нужно базовую тройку векторов сначала повернуть на 0 градусов вокруг оси Z, потом на 270.097 градусов вокруг старой оси X и, наконец, на 315.717 градусов вокруг старой оси Y. О как! А где эта базовая тройка векторов? И куда смотрят всё-таки оси "севера"?
Поймём сначала, как получить оси.
По аналогии с ориентацией аппарата, у любого объекта типа DIRECTION можно получить поля
Можно убедиться, что у "севера" ось Z направлена по касательной к сфере в северном направлении, X - на восток, Y - вертикально вверх.
У направления "вверх" - ось Z смотрит вертикально вверх, ось Y - на север (по касательной к сфере), ось X, таким образом, на запад.
Вот как-то так мы ориентированы относительно верха, если немного скатиться по наклонной.
Контроль ориентации.
Хорошо, про определение ориентации понятно. А как её контролировать? Вариантов много.
Первый - задать в виде вращения R(a,b,c) . Проблема в том, что неизвестно, куда направлены оси базовой системы координат, поэтому напрямую этот метод использовать не очень-то получится.
Второй - можно суммировать две ориентации - т.е. написать, например, R(10,20,30) + R(35,25,15) - получится R(45,45,45). Тоже метод так себе, потому что не очень понятно, к какому итоговому вращению такое суммирование приведёт. Исключение - добавка к любому вращению R(0,0,a) приводит к дополнительному вращению на a градусов по крену.
Третий способ - перемножение поворотов - что будет, если последовательно применить повороты в порядке справа налево.
Четвёртый способ - функция heading(dir,pitch) , которая задаёт направление с азимутом dir градусов и углом к горизонту pitch градусов. Ось Direction:upvector в этом случае выбирается так, чтобы Direction:forevector , Direction:upvector и Up:forevector лежали в одной плоскости. heading(dir,pitch) + R(0,0,roll) даст вам нужные азимут, тангаж и крен для ориентации аппарата.
Пятый способ - функция lookdirup(forevec,upvec) - с ней Direction:forevector задаётся вдоль forevec , Direction:upvector - проекция upvec на плоскость, ортогональную Direction:forevector .
Шестой способ - функция angleaxis(degrees,axisvector) - задает вращение на угол degrees вокруг оси axisvector .
Седьмой способ - функция rotatefromto(vec1,vec2) - создаёт один из поворотов, переводящих vec1 в vec2 .
Вроде бы ясно, как задать ориентацию, остался вопрос - что собой представляет исходная координатная система, которая поворачивается для задания ориентации?
Координаты и векторы
Вектор в kOS можно задать в виде V(a,b,c) .
Компоненты вектора доступны по суффиксам V:x, V:y, V:z.
Исходная координатная система задана векторами Ex = (1,0,0), Ey = (0,1,0), Ez = (0,0,1). То есть по определению
-
Сложение и вычитание
Векторы складываются по известным из школьной геометрии правилам теугольника или параллелограмма. В координатном виде в прямоугольной декартовой системе координат
Сложение векторов: c = a + b
Из соображений производительности, если вам нужен квадрат длины, лучше пользоваться суффиксом :sqrtmagnitude
Из скалярного произведения можно вычислить косинус угла между векторами и восстановить сам угол. Это сделано уже за нас:
Проекция вектора на ось
Ортогональная составляющая вычисляется как
Тангенциальная проще всего так:
Дайте порулить
Теперь попробуем применить что-нибудь на практике.
Делаем ракету из Mk1 кабины с беспилотным командным модулем, kOS модулем и парашютом. Через разделитель прикрепляем к ней "Блоху" с крылышками. И не забудем об антенне.
Создаём файл Ships/Script/steeringtest.ks:
ракета должна автоматически взлететь, развернуться в сторону океана и приводнить капсулу.
На этом простое введение закончено. В следующей части - как выйти на орбиту.
До Луны и обратно
Прямо и без стыковок! По мотивам советской разработки 60-х годов.
Mariner 2 | Реплика | RSS
Реплика полета к Венере автоматической межпланетной станции Mariner-2
- gutolin
- 1 апр 2018 в 21:49
- 3 165
- 5
- Подробнее..
Летим на Луну по заветам Сергея Павловича. В стоке!
В гости к Плутону
Представь себе, что ты - Джеб Керман, и ты летишь на Плутон.
RS-16 "Stratim"
космический бомбардировщик для РСС/РО (или космоплан, чтобы запускать спутники 50 кг на низкую орбиту)
Constellation - Altair|Ares I & Ares V| Landing Moon| RSS
Видео с демонстрацией полета по программе Созвездие, миссия Альтаир.
Skylon. White knight in Space
Скайлон, это космоплан по типу одной ступень на орбиту, сделанный по проекту британской компании Reaction Engines Limited.
Отклонение от проекта минимальное. Сделано в RSS с обилием модов в моей с Максом сборке. Ссылка на скачивание сборки в посте.
SSTO-R4 "Треугольник", или космоплан в RSS.
Это мой первый космоплан-SSTO в RSS+RO. Вас порадует внешний вид, 20% ПН на НОО, 6,5 км/с на открытом цикле.
Все в посте ;)
Новость отредактировал: DamnMan - 7 мар 2016 в 14:33
Причина: мелкие орф. ошибки
Ну, тогда смотри ещё и как на садиста-педофила. "Мёртвых маленьких зверюшек он с собою приносил".
Нравится Показать список оценивших*задумчиво* Етить, ажно Иваныгин попался. Нежданчик. Воистину, закидывал на карася - щуку вытащил. Что ж, запишем..
А привод - он только понаружи стальной. Внутри - всё тот же галимый китайский пластик. Как современные школьники с бородой. Снаружи мужик - внутри пацан. Та же самая история с инфантилами в камуфле. Под сороковник человеку, а категоричностью суждений семнадцатилетку перебивает.
Нравится Показать список оценившихШутничок. Там вся защита построена на упреждении и отрицании. Даже тени такого вопроса не должно возникнуть.
А иначе всё, конец всему. Нельзя иначе. Как потом парням в глаза смотреть, как с ними дружить крепкой мужской дружбой?
Нравится Показать список оценивших Забавный бомбеж. Видимо человечка выше в своё время очень сильно обидели люди с автоматами, пусть и страйкбольными. Нравится Показать список оценивших*зевая, наливает себе кофейку* Что ж, раз желающие выступить закончились и ничего нового не предвидится..
Обрисуем ситуацию:
- Некий неизвестный заходит в сообщество и без здрасьте отвешивает с порога какую-то дичь
- Делаем пробивочку: а всерьёз он или так, шуткует? Мало ли, может, юмор такой.
Показать полностью.
- Получаем ответ: о, похоже, всё на зверском серьёзе.
- Начинаем его дёргать, может, ещё что интересного скажет. Но нет, молчит. Игра "Вытащи из человека питекантропа" затухла сама собой.
- Зато из кустов, просидев там полсуток, вылезает товарищ Иваныгин и начинает рассказывать анекдоты категории Б. Занавес.
Что имеем в сухом остатке. Неизвестный со своей пещерной дичью продолжает мотаться по высокоэллиптической орбите, то ли вернётся лет через двадцать, то ли так, проездом был. С Милославским тоже ничего нового. Пикироваться с ним скучно, он от пары кликов способен подорваться. Я - известный негодяй и безобразий нарушитель, в какой цвет ни покрась - ничего не теряю. По итогу, один только дядя Максим и вскрылся и полез межличностный конфликт разводить. Чего полез, спрашивается, умный же вроде человек. То ли от геев его тошнит, то ли за страйкбол обиделся. Оба варианта, как говорится, хуже.
Такой вот незамысловатый покер, дядя Макс. Тоже, в общем-то, такая себе игра.
Нравится Показать список оценивших*ехидно, в сторону* Не бомбит он, ишь ты. Коммент снеси - горит. Скринов пачку залей - горит..
Нравится Показать список оценивших А теперь этот человек расписался в невозможности определять где горит, а где нет. Так и запишем. С таким же успехом можно и эти комментарии записать под пожар. Глупость лютая так и хлещет. Нравится Показать список оценивших Поединок в стиле «говно съело мочу». Пойду-ка я, пока админы не приняли это за срач. С этим кадром все ясно. Нравится Показать список оценившихПоглядывая на оратора, как на гендерное недоразумение эволюции.
Поигрываю в KSP уже несколько лет, с тех времён, когда ещё всё было на вражеском инглише с версией 1.0.много цифер (на группу подписан уже тоже изрядное время).
Показать полностью.
Вот тебе дана ветка развития, в ней имеется определённый набор инструментов, перед тобой ставятся конкретные задачи - космос, планетарная система одной звезды, слетай туда, измеряй это, опусти на поверхность то: всё это замечательный конструктор, как из детства железный с болтами и гайками, только про космос.
И вот ты сидишь, уже который час методом "научного тыка" (методом проб и ошибок) корячишь очередной "пепелац без гравицапы", а тут внезапно вылезает высерок: "Вот посмотрите, я сделал, все планеты облетел со старта без крафтинга ресурсов, только использовал список MODов, который можно вместить на рулоне туалетной бумаги класса "Засранец"(1500-2000 метров мелким почерком в каждую клеточку)" - так блэд, посмотрим, что ты там придумал. нет, средь этих тон навоза я ковыряться не собираюсь, потому что у меня и житейских дел выше крыши.
Я тоже пережил тот период, когда хотелось наструячить что-то уже ныне или ранее сделанное: нарисую МИГ-31 или Су-29, а вот посмотрите я первый ИСЗ запустил: БИП-БИП-БИП.
Уж если делаете MOD, то не надо нам изобретать затычки переборки, бачки, кабинки. Уж если ты хочешь "Салют" нарисовать, то нарисуй его весь, целиком и полностью со всеми характеристиками в реалиях игрового движка:
- Запусти свой первый лунный трактор "Луноход-1"
- слетай на Луну на Аполлоне;
- собери станцию "Мир", а потом утопи её, в режиме, как это было;
- выполни миссию "Челенджер" - всем салют в нашу честь.
Поэтому, молодой человек, у вас есть выбор:
- лабызните уда сравмного;
- садитесь на кутак ;
- оприходуйте овцу.
As of now, RSSVE is not yet updated to 1.3.1 and my previous attempts to use it were plagued by bugs and all manner of bizarre issues. I know some have gotten it working - but for those like me, I have managed to get a rock-solid and very beautiful setup using the visuals from SSRSS (which is updated to 1.3.1) instead and thought I would share how I did it.
Steps: From a clean KSP1.3.1 directory:
Install the latest Kopernicus.
At this point I suggest a test run to verify that RealSolarSystem is working. Just create a new sandbox game and head to the tracking station and go have a look at a few planets to make sure it all looks good.
Install the "optional" mods listed on the page:
Environment Visual Enhancements
Distant Object enhancement
PlanetShine (with the RSS configs).
Use the latest KSP1.3.1 versions of all the above. I am not using Kronometer myself but you may want to add it. Now manually extract the SSRSS zip file somewhere. (Note that PlanetShine will show an incompatible version warnig at startup - this is harmless and it works fine)
Go into the clouds subfolder and choose one (I use the high-res version) and copy this into your GameData folder. Copy the SSRSS folder into your GameData folder as well.
Go into GameData/SSRSS/Configs
Delete everything except these files:
From here add whatever you want to, to your game. TextureReplacerReplaced with a new skybox ? Go for it :)
I hope this is useful to somebody. A.J.
Читайте также: