140

Симулятор Союз-ТМА - Часть 1

Всем привет! Мы продолжаем публикации по разработке симулятора Союз-ТМА.

С момента последней публикации прошло довольно много времени и пока мы все (я очень на это надеюсь) остаемся дома, то мы решили предоставить Вам свежую информацию по симулятору. Работа кипит и кипит, а следовательно скоро будет первая версия, которую будет не стыдно показать.


Итак от слов к делу. Полностью обновилось СПО МиУ (Моделирование и Управление), которая разработана исключительно для отработки алгоритмов вычислительных процессов в БЦВК Союза и НЕ будет использоваться в симуляторе. Т.е. повторюсь - это не симулятор, а программа для отработки алгоритмов, которые потом будут перенесены уже непосредственно в сам симулятор.

Так что стоит про него рассказать еще немного, постараюсь вкратце, но получится лонг, как всегда...  В будущем я постараюсь составить полноценное руководство пользователя для МиУ, ссылку на которое дам в следующем посту.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

На скриншоте выше главный экран МиУ. Все что отладочное (т.е. в данном случае необходимое только для разработки самого МиУ) вынесли в отдельную группу, лишнее стараемся убирать по возможности. В процедуру инициализации добавили обмен с Юнити, так как уже начата работа по этому направлению и поэтому налаживаем ТСР и УДП обмен (пока только двусторонними квитанциями МиУ<->Unity) с Юнити.


Большинство команд в бортовые системы корабля Союз-ТМА выдаются с формата КСП (Командно-Сигнальное поле), который входит в состав информационного обеспечения (и программного то же) ИнПУ. У нас этот формат реализован как на тренажере ДОН-Союз и ТДК-7СТ (что бы не изобретать велосипед - все равно в работу не пойдет), в симуляторе конечно мы будем использовать ИО штатное, которое использовалось на кораблях 200й серии (Союз-ТМА). Вот как выглядят форматы КСП левое и правое (почему левое и правое - читайте тут) в МиУ:

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

А вот как выглядит формат КСПл на ИнПУ (версия для 213-го изделия)

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

разница незначительная.

ну и вдобавок КСП на штатном железе в ЦПК, эта фотка гуляет по сети много. и на центральном (ИнПУ 2) загружен формат КСПп. По поводу дикого различия в цветах расскажу отдельно, это еще та задачка, которую мы пока что так и не решили.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

У нас реализованы основные алгоритмы обработки выдачи этих команд и многие из них ( в основном касающиеся работы вычислительного комплекса Аргон-16) отрабатываются так же как если бы вы выдали их на реальном корабле (с учетом всех задержек и т.п.). Если вам будет интересно, расскажу как мы это реализовали с программной точки зрения...хотя чего рассказывать - вот репозиторий МиУ. Все что можно я комментировал там. Так же в разработке руководство пользователя по МиУ, о чем говорилось выше.

Логика КСП проста - в реальности команды с КСП - это релейные команды в бортовые системы, в коде это просто запись true в переменную команды (команда - это булевая переменная) и снятие ее (т.к. она релейная) прибором, в который она поступила. Как раз таки снятие ее после выдачи и есть квитанция от прибора, есть еще вариант с использованием short, где если возвращается 1, то это обозначает, что прибор "запитан", если возвращается 2 - команда отправлена, но нет квитанции и т.п.

Хочу привести небольшой пример скрипта одной команды КСПл - А1"ОТКР КРЫШКИ СКД" - Открытия защитной крышки Сближающе-Корректирующего Двигателя (СКД).

Оператор находится в спускаемом аппарате и выдает с ИнПУ с формата КСП команду А1, тем самым записывая в обработчик команд КСП (если будем переносит как алгоритм в Юнити, то скорее всего сделаем в виде отдельного скрипта), где написано, что если ksp_cmd[0][1]=true, тогда проверяем отсутствие признака "отстрел БО-ПО"(признак наличия/отсутствия отсека корабля на котором установлен СКД) и запускаем скрипт открытия крышки. Скрипт этот - анимационный скрипт на 15 секунд открывающий крышку двигателя. По окончанию циклограммы открытия скрипт выдает команду, которая в обработчике индикации КСП (горит/не горит транспарант)  зажигает команду А1, как факт ее отработки (срабатывание концевых выключателей). В МиУ этого не видно, но отрабатывается примерно так.

Продолжим.

Это было по поводу выдачи команд оператором в системы ТК, а теперь пару слов о возвращаемых (формируемых бортовыми системами) квитанциях для представления оператору в виде транспарантов. Мы так же использовали метод, используемый в тренажере ДОН-Союз. Так что для отладки был сформирован вот такой вот формат "ТС" (Табло Сигнальное), на который выводятся квитанции о состоянии систем. Структура проста - на форме стоит таймер, на тик которого записана обработка булевых значений квитанций, если true - тогда соответственно зажигаем транспарант и наоборот. Конечно в ПО ИнПУ это реализовано несколько сложнее, но для первоначального этапа подойдет.  На фото ниже представлен этот формат с активным состоянием некоторых транспарантов во время отработки команды на запуск Гибкого Цикла (довольно интересная штука - я обязательно о ней расскажу) 
Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Так вот космонавту на пульте "Нептун-МЭ" (с которым он работает большую часть времени) вся эта информация так же представляется. Вот постарался так стрелками показать, может получилось тупо, но как есть

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Последние две группы транспарантов  (под пультом на фото ниже) формируются непосредственно на форматах ПО ИнПУ. Кстати в ПО ИнПУ то же есть свой отладочный формат, где отображаются все ТС (даже больше чем у меня на формате), вот как он выглядит. Если будет интересно, расскажу значение этих транспарантов.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Сразу видно какие необходимы для выдачи, а какие только для отладки. Кстати обмен с ИнПУ мы уже наладили и у нас передаются пакеты от МиУ в штатное программное обеспечение пульта космонавтов "Нептун-МЭ", единственным минусом которого является его -16-ти битность и соответственно невозможность прямого запуска в современных ОС (без использования эмулятора), соответственно нам или придется его переписывать или как то (с шагом 0.100 с) снимать с него картинку и перенаправлять ее в Юнити, для того, что бы накладывать ее как динамическую текстуру, что бы реализовать вид от первого лица в спускаемом аппарате, как на этой фотке.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Так же для решения задач разработки алгоритмов для Симулятора сделали упрощенный вариант имитатора пульта БРУС (Блок Ручного Управления Спускаемым аппаратом) на фото ниже. Пока не прописали ни одного скрипта для него, думаю что так может получится, что он вообще не понадобится и отработку уже будем на 3d делать

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Остальные пульты и физические приборы с которыми взаимодействует космонавт пока что не трогали, но до них обязательно дойдет очередь, просто в связи с тем, что мы выбрали движок Юнити писать все равно придется на C#, поэтому это может даже и хорошо, что не делали. Единственные функции, которые может выполнять БУРС - логирование при переводе переключателя в другое положение (в коде так же просто запись true или false в bool"евую переменную и вызов процедуры логирования в журнал.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Ну на этом пока что из того, что относится к текущим обновлениям по МиУ всё. Есть конечно еще несколько форматов - штатные форматы лэптопа РС МКС для управления системой стыковки (точнее выдачи команд или запуска процедур) Служебного Модуля (узла по оси +Х, так как на первом этапе будем отрабатывать автоматическую стыковку именно к нему), но он пока без логики вообще. Только графический интерфейс и стандартный набор процедур и команд. Постарались передать максимально пользовательский интерфейс ОС Солярис (которая используется на лэптопах РС МКС). Так что про него и рассказывать то нечего, вот только скрин покажу и все.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Все с МиУ закончили, теперь перейдем к самому интересному - Юнити. Ранее никто из нас никогда с Юнити не работал - говорю сразу. Это первый опыт. Скажу свое мнение по поводу языка C# - после долгой работы на плюсах он очень неудобен. Думаю со временем это пройдет и мы подружимся, надеюсь на это.
Первоначальная задача проекта в Юнити на текущем этапе разработки такая -
МиУ интегрируя уравнения движения КА Союз-ТМА и МКС формирует на выходе нам вектора положения, скорости и ориентации относительно J2000, которые мы вместе с признаками для ТСЭ (горит/не горит) и другими командами упаковываем и посылаем в Юнити.

Но так как мы хотим полностью отойти от МиУ и перенести все алгоритмы в Юнити ,вместе с этим упростив ввод начальных условий, то вначале мы стараемся сформировать основную базу в самом Юнити.
Для этого мы создали первый элемент игры - главное меню (куда же без него) - пока без красивой графики (хотя были варианты) из задуманной анимации, а просто для отладки действия по клавишам.
Сделаю небольшую отсылочку отвечающую на вопрос, почему же мы налаживаем обмен Юнити с МиУ, а не переносим сразу все алгоритмы и не продолжаем разработку в Юнити - мы не знаем в каком виде перенести алгоритмы - то ли это будут динамические библиотеки, то ли это будет отдельное консольное ПО, то ли это останется МИУ - пока неизвестно, поэтому мы на первом этапе делаем обмен Юнити с МиУ.
Возвращаемся к нашим баранам (главному меню) - вот первый скрин главного меню для симулятора.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Ну тут все понятно и пояснений не требует - скажу только, что в настройках будет формат экрана, звук, выбор органов управления (с клавиатуры или джойстиком или может у кого есть штатные РУДы) и еще по мелочи. Так как пока непонятно как именно будут реализованы (в какой оболочке) алгоритмы систем Союза, то в Юнити так же как и в МиУ требуется предстартовая подготовка (как я понимаю во многих играх при загрузке именно это и происходит - не только загрузка в память моделей и др., но и выставка начальных параметров в заданное состояние) - процедура инициализации. Пока что в нее включено лишь создание ТСР и УДП клиентов для обмена с МиУ. Мы хотим на первом этапе реализовать простейшую логику - игра запускается, создает сокет подключения к МиУ и отправляет квитанцию о запуске в МиУ, где в журнале появляется соответствующее сообщение.

Для этого мы создали отдельную папку net, в которой разместили скрипт sockets в котором описана работа с сокетами. В корневой папке scripts лежим скрипт инициализации init_proc. В нем пока всего два метода - это Initialization (непосредственно сама процедура инициализации, которую я думаю м оставим тут насовсем, просто изменив ее структуру под требуемые задачи) и функция  i_test - возвращающая код ошибки результата инициализации.

Кстати пару слов о том в чем работаем - мы решили использовать Visual Studio Code т.к. он не требователен и не грузится как танк (по сравнению с VS).

Вернемся к меню. Что бы упростить по максимуму выставку начальных условий, мы решили поставить пользователю всего два выбора - выбрать корабль и выбрать непосредственно сам режим, так что по нажатию кнопки "Новая игра" пользователь переходит в меню выбора режима.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

Тут он может выбрать корабль и режим. Почему так? и почему выбор сценария, а не режима как я пишу в тексте выше? Да потому что вишенка на торте -  управление всеми бортовыми системами в полностью автоматическом режиме. Нет конечно пользователю надо будет выдать некоторые команды (те же что выдают космонавты для включения режима автоматики), а так как пользователь не параметры орбиты вводит, а выбирает корабль, то соответственно для этого корабля и режима полета уже заранее известны все интересующие нас параметры. К примеру схема сближения и стыковки корабля Союз-ТМА 9 (как раз на него у нас есть программное обеспечение пульта космонавтов, а так же некоторые алгоритмы)

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

По этой схеме мы можем получить море информации, необходимой для организации автоматического контура управления космическим аппаратом. Все эти параметры уже заранее рассчитаны были баллистиками в службе БНО ЦУП еще задолго до полета самого корабля и такие схемы есть на все корабли серии ТМА (правда найти их - все равно что иголку в стоге сена, а просить ЦУП - то же думаю что бесполезно, вряд ли они будут ради нас в архивах копаться). Так к чему же это я все, да к тому, что выбор режима полета сводится к выбору всего двух параметров - корабля и режима, а уже корабль подразумевает в себе очень и очень много информации - тут и дата/время и соответственно положении земли на начало режима (время Т0) и т.д. т.п. Тем самым мы даем возможность людям, которые в первый раз запустили симулятор без особого труда выбрать и запустить режим.

Небольшое примечание - на первом этапе разработки мы работаем только с орбитальным участком полета т.е. от момента отделения от РН Союз-ФГ и до момента стыковки, т.е. этапы спуска и выведения мы не рассматриваем пока вообще.

Но так же нам дается возможность ввести Начальные Условия (в виде Кеплеровых элементов орбиты Союза и МКС или векторов скорости и состояния в J2000.0)  и отработать их.

По нажатию кнопки "ПУСК" запускается процедура отработки начальных условий - загружаются из базы параметры и состояние выбранного корабля, загружается конфигурация МКС для данного корабля (да учитывайте, что конфигурации МКС менялись!), после чего на сцене планета Земля выставляется на начальное положение соответствующее моменту Т0 (t ноль - модельное "внутри игровое" время начала режима(полета)), выставляются согласно параметрам из базы корабль и станция, если в реальном полете были нештатные ситуации, то они так же отрабатываются (вообще про НшС у нас будет отдельный пост). После всех этих операций программа загружает вторую сцену, где у нас находится вся эта каша-мала и начинается интегрирование уравнений движения, преобразование результата в X, Y, Z, Vx, Vy, Vz, Qs, Qx, Qy, Qz и изменение положения центра масс объектов согласно этим данным. Пользователь находится внутри спускаемого аппарата и у него имеется два основных органа управления (если изначально введен режим ручного управления и выставлены соответствующие признаки, иначе ничего работать не будет) - Ручка управления Ориентацией и Ручка Управления Движением, которые задают угловые и линейные моменты соответственно.

Вот на этом пока и закончим. Еще несколько фото из Юнити Союза (текстуры в последнюю очередь).

Ниже представлен скриншот изделия 11Ф732 Союз-ТМА номер 219 (если кто заметил что ДПО нет одного и то, что они не для ТМА - знаем, исправим). Как видите оси соответствуют начальным строительным осям корабля и тут отсутствует смещение центра масс, согласно заданному, т.к. это смещение идет вместе с параметром корабля, когда его выбирает пользователь, ведь загрузка корабля всегда разная и положение центра масс всегда разное, конечно нам не удастся найти (что очень очень жаль) значения центра масс для всех кораблей, но у нас имеются кое-какие значения на 7-10 сценариев, что бы отработать их точно.

Симулятор Союз-ТМА - Часть 1 Союз-тма, Космический симулятор, Нептун-мэ, Длиннопост

P.S. С прошлого поста к нам в команду пришло несколько людей (за что им огромная благодарность) и у нас в команде сейчас 7 человек, но этого по прежнему очень очень мало, так что если вам интересен космос и пилотируемая космонавтика и вы желаете принять участие в нашем проекте - пишите в дискорд - #3179

или на почту - soyuz.developer@gmail.com
а так же в телегу - @SoyuzDeveloperTeam

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

7
Автор поста оценил этот комментарий
Бля.. Сколько у вас на часах? Вы в своем уме в третьем часу ночи такое писать?


А так да, пиши еще.
Космонавты. Клево.
Иллюстрация к комментарию
раскрыть ветку (1)
6
Автор поста оценил этот комментарий
Иллюстрация к комментарию
2
Автор поста оценил этот комментарий

Ох, можете меня минусить, но вот эти буквенные аббревиатуры из СССР.... чтоб их... Но зато "Питание Чайки" написано полностью...

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

не не все норм, я прекрасно вас понимаю! Но поймите и вы - без этого никуда, к примеру фраза  РО ДК в расшифрованном варианте будет выглядеть - Ручная Ориентация в Дискретном Контуре, что при размещении займет довольно много места.

показать ответы
0
Автор поста оценил этот комментарий

Ох, простите конечно, но лучше бы репозиторий не показывали. Мои глаза..

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

да да я знаю что полный ппц. простите, но поймите - это вообще первый опыт. Поймите, что все все это будет переписываться много кратко и доводиться до совершенства, а если у вас есть замечания/предложения по поводу репозитория, то напишите нам и мы обязательно учтем их.

Автор поста оценил этот комментарий

Ручн.Ориент.Дискр.Конт???.... да и вообще - что это, чёрт побери, такое??? Это при какой-то аварии используется, но то такое... Всё равно, почему нельзя упрощать?? Вспоминается анекдот, где в английском языке при отдачи приказа использовалось 6 слов, а в русском - 2... ='))) Или как в фильме Человек Эпохи возрождения, там герой припёрся на армейскую базу и спрашивает как пройти - надо пойти до ЧО, свернуть на ГС, обходя ПС пропустить НГ и за ЩС завернуть на ПРТ.... =')))) есть глубокое подозрение, что так "терминуются" вещи, которые простые люди не должны знать и понимать......

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ручн.Ориент.Дискр.Конт - Это когда космонавт используя ручки управления вращением и перемещением (поэтому и ручная ориентация) перемещает Союз в пространстве, при этом ему помогает компьютер (в случае ТМА - Аргон-16), поэтому и в дискретном контуре.

3
Автор поста оценил этот комментарий

С Ксиу на ипу оттуда на ику а потом в мпу.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

хехе, если бы я писал развернуто, то боюсь пост был бы в два раза больше)

2
Автор поста оценил этот комментарий

А по Бурану на драконе ничего случаем у вас нет?Друг интересуется.(Вот за что можно любить все эти биомусорные общественные паблики типа пикабу или яплакал.За алмазы в дерьме.Спасибо.)Я кстати уверен,когда допилите,сможете продать сами знаете куда.Аналогов нет.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ну скажу сразу по сути мы изобретаем велосипед - все это уже используется в Центре Подготовки Космонавтов, только по соответствующим причинам доступа к этому нет и информация не публикуется, поэтому все что мы делаем имеет аналоги и разрабатывается в Центре Тренажёростроения в Новочеркасске ,мы же просто делаем игровую версию ,доступную для людей.

По Бурану есть, но им заниматься мы будем очень не скоро.

показать ответы
2
Автор поста оценил этот комментарий

Даже просто прочитать это уже подвиг

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Все что вам непонятно, вы можете спросить и мы постараемся объяснить понятно и доступно.

1
Автор поста оценил этот комментарий

Если мне память не изменяет, то один из высокоуровневых симуляторов (Orbiter или что-то подобное) уже сейчас может предоставить крайне близкий к реальности опыт управления Союзом.

А при очень большом желании можно накатить на KSP с десяток модов на реализм и реалистичные же системы управления и приправить сверху VRом.

Правда для такого удовольствия нужно МНОГО оперативки, чтобы комп ею не обделался при первом же запуске.

Предпросмотр
YouTube58:59
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

да, я знаю что на Орбитере можно как-то реализовать, но мы пошли пока вот таким путем.

показать ответы
1
Автор поста оценил этот комментарий

Просто титаническая работа и внимание к деталям. Очередной респект и успехов в разработке!

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо большое!

показать ответы
0
Автор поста оценил этот комментарий
А чего Unreal Engine не взяли?
Он на C++
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

компьютер не потянул его.

0
Автор поста оценил этот комментарий

Мы чем-то подобным занимаемся на коммерческой основе. А у вас для чего проект? Волонтеры типа? Большинству сложно будет "играть", и думаю скучно... предлагаю заложить редактор заданий, и тянуть для веба по возможности, либо vr. Можно на Ютуб выложить чего сделали, обзор так сказать.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

На Ютубе обязательно ролик сделаем, как только будет нормальная динамика.
Редактор конечно будет - по сути ввод начальных условий - это и есть редактор.