Разработчики SpaceX делятся опытом создания программного обеспечения для космических аппаратов

В сообществе на Reddit сотрудники SpaceX провели открытую сессию вопросов и ответов. Разработчики поделились, в чем заключается специфика их работы по сравнению с обычной IT-деятельностью, и рассказали о трудностях, с которыми они сталкиваются при создании программного обеспечения для техники, предназначенной для полетов в космос, осуществляемых с экипажем.

Несколько дней назад SpaceX в твиттере анонсировала мероприятие в формате AMA («спроси меня о чем угодно») с привлечением своих программистов на просторах Reddit. На крупнейшем англоязычном интернет-форуме сотрудники компании активно отвечали на вопросы пользователей в официальном сообществе, охватывая широкий спектр тем, включая разработку пользовательских интерфейсов для кораблей Crew Dragon и Starship до условий работы и тестирования ПО спутников Starlink.

Ответы предоставил эксперт, занимающийся разработкой программного обеспечения для судна Dragon Джарретт Фарнитано (Jarrett Farnitano), глава группы прикладного ПО Starlink Кристин Хуан (Kristine Huang), разработчик низкоуровневого программного обеспечения для системы лазерной связи Жанетт Миранда ( Jeanette Miranda), глава группы, занимающейся ПО для Starship Эшер Данн (Asher Dunn) и руководитель группы, разрабатывающей тестовые системы для спутников, Натали Моррис ( Natalie Morris).

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

Разработка ПО для космонавтики в целом

Наиболее распространенный вопрос, который задавали сотрудникам SpaceX — чем отличается разработка программного обеспечения для ракет и космических кораблей от аналогичного труда в других областях» IT-для Жанетт оказалось неожиданным открытие двух моментов. Во-первых, различия между этими компаниями незначительны. Во-вторых, разработка программного обеспечения для спутников часто сопряжена с ограничениями, обусловленными физическими и математическими принципами. В отличие от этого, при создании приложений для земных нужд подобные трудности возникают крайне редко.

И, конечно же, практически сразу возник вопрос об отказоустойчивости и безопасности. Поскольку при разработке кода неизбежно возникают ошибки, и даже в коммерческих и критически важных программах на их исправление уходят годы – а некоторые остаются нерешенными навсегда. Причина не только в недостаточной внимательности программистов или стремлении заказчиков сократить расходы на тестирование. Дело в том, что стоимость подобных ошибок редко бывает действительно значительной.

Использование технологий, работающих на границе человеческих возможностей, сопряжено с риском: единый сбой может привести к разрушению и потере миллионов долларов или даже человеческих жизней. Джаррет подчеркивает, что разработка программного обеспечения для систем, требующих повышенной безопасности, существенно отличается от написания кода в ситуациях, когда отказ допустим и не повлечет за собой катастрофические последствия. Главное отличие заключается в подходе программиста, к которому необходимо быстро адаптироваться.

Для снижения вероятности сбоев в программной инфраструктуре используется определенная стратегия. Все программные компоненты разрабатываются как небольшие и независимые модули, обладающие ясными ограничениями и определенными зонами ответственности. Благодаря этому, каждый участок кода может быть протестирован в широком спектре условий до его интеграции в системы. Которые, в свою очередь, уже тестируются целиком множество раз. Основная цель – обеспечить предсказуемость, понятность и узнаваемость поведения программного обеспечения для разработчика в любых возможных сценариях.

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

Автоматизация тестирования и контроля также находит широкое применение. Большой объем телеметрических данных, получаемых от каждого компонента программной системы, позволяет отслеживать параметры всех ее частей. Это способствует повышению эффективности не только при разработке программного обеспечения для ракет или кораблей, но и при эксплуатации обширной сети спутников Starlink. По его словам, этот показатель увеличивается ежемесячно и значительно возрастет в ближайшие годы. Натали также отметила, что внедрение автоматизации позволяет избежать необходимости в большом штате операторов для управления орбитальной группировкой.

Она также объяснила, что в SpaceX процессы разработки и тестирования не разделены. Каждый программист обязательно участвует в поиске проблем с тем, что он написал, проверяет чужую работу и помогает решать обнаруженные недочеты. Причем такой подход применяется на всех этапах: не только при ревизии исходного кода, но и во время тестирования на моделях, стендах, прототипах, а также вместе с инженерами аппаратного обеспечения, когда ПО подгоняется к «железу». Помимо специалистов, занимающихся разработкой компонентов или целых систем для ракет, спутников и кораблей, в компании есть отельные рабочие группы, создающие инструменты для тестирования решений.

Симуляции, тесты, стенды, лаборатории

По словам Натали, у работающих со Starlink программистов есть возможность провести финальное тестирование прямо на орбите. Спутников много, у них есть развитые системы защиты от отказов, так что некоторые аппараты можно использовать в качестве «канареек». На них «заливают» новое ПО, смотрят, как все работает и взаимодействует с остальным созвездием, а затем разворачивают обновление на остальные аппараты. Если что-то пойдет не так во время тестирования, спутнику отправляют команду на перезагрузку и он просто восстанавливает прежнюю «прошивку».

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

После успешного завершения таких проверок и устранения всех выявленных недостатков наступает этап испытаний с использованием реального оборудования. В это время в работу включаются отдельные компоненты авионики, а также полноценные узлы и агрегаты ракеты и космического корабля. Завершающий этап включает в себя моделирование всей полетной задачи. Натали приводит в пример Dragon, для специалистов, которым выполнение этого процесса отнимает десятки часов или даже дни, крайне важно обеспечить бесперебойное выполнение всех этапов миссии. Лишь после завершения всех вышеперечисленных действий результат работы программистов (а также инженеров-конструкторов) может быть интегрирован в конечное изделие SpaceX, что стоит на стартовом столе.

Жанетт поделилась своим опытом разработки «космических лазеров». Учитывая высокую сложность организации надежной оптической связи между спутниками, она принимала участие в нескольких совещаниях между различными отделами. Эти встречи проходили не только в формате традиционных конференций, но и включали видеомозговые штурмы, а также встречи программистов и инженеров непосредственно в лаборатории. В ходе совместной работы они неоднократно собирали и разбирали блок лазерной связи, стремясь к его усовершенствованию.

Dragon

С первых снимков пилотируемого варианта этого космического корабля SpaceX посыпались претензии в излишней «гламурности» интерьера. Напомним, инженеры компании практически полностью отказались от «традиционных» кнопок, приборов и рычажков, разместив в капсуле три огромных сенсорных панели с небольшим количеством самых важных кнопок под ними. Для чек-листов и дополнительной информации в комплект оборудования добавили несколько планшетов Apple iPad (в авиации широко распространена такая практика, которую, по мнению многих экспертов, делает акцент на дизайне, а не на надежности и устойчивости к сбоям.

Рассказывая о пользовательском интерфейсе Crew Dragon Джарретт подчеркивает, что в первую очередь корабль обладает полной автономией и способен самостоятельно осуществлять все операции в процессе полета, не требуя вмешательства со стороны команды. Кроме того, даже такую «гламурную» систему в SpaceX сделали максимально отказоустойчивой. При неполадке с любым дисплеем, оставшиеся компенсируют его функции. А если выйдут из строя все сразу, у астронавтов остаются аппаратные кнопки, на которые выведены ключевые функции.

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

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

Важным фактором комфорта для космонавтов также является подход, выбранный разработчиками SpaceX, который они называют «quiet-dark» (что-то вроде «тихо-темно»). При нормальной работе космического корабля интерфейс выглядит лаконично, отображая основные параметры всех систем. Однако, при обнаружении автоматикой каких-либо отклонений, проблемные показатели выделяются, акцентируя внимание на наиболее важной информации. Кроме того, в интерфейс постоянно внедряются улучшения, разработанные на основе практического опыта работы астронавтов на борту Crew Dragon.

Starship

Эшера, ответственного за разработку программного обеспечения для самого масштабного проекта Илона Маска, особенно интенсивно расспрашивали. По словам программиста, процесс создания кода для космического корабля из нержавеющей стали не сильно отличается от методов, используемых инженерами SpaceX в Бока-Чика. То есть — сделал, проверил, запустил (взорвал), собрал данные, проанализировал, вернулся в начало цикла. В отличие от команд, занимающихся Falcon 9 и Dragon, у Эшера и его коллег больше возможностей для самостоятельных действий. В частности, они могут реализовать программное обновление всего за несколько часов до начала испытаний Starship. Если уверены, что это поможет, конечно.

Постоянно осуществляется модернизация программного и аппаратного обеспечения этого космического корабля. И хотя Starship использует немало оборудования и кода, отработанного на Falcon 9, для него требуется разработка множества новых систем. Работа ведется непрерывно и в тесном сотрудничестве с инженерами, отвечающими за аппаратное обеспечение. Особенно важно, что каждое испытание, даже не связанное с полетом, предоставляет значительный объем данных, позволяющий специалистам постоянно совершенствовать свои знания. Благодаря этому, они способны оперативно внедрять инновационные идеи и сразу же оценивать их эффективность.

Неожиданные технологии в ракетно-космической отрасли

Помимо сенсорных экранов, в космическом корабле также имеются, SpaceX использует множество не менее спорных на первый взгляд технологий, которые не заметны со стороны. Очень любопытный с технической точки зрения вопрос задали по поводу отказа от систем реального времени ( real-time operating system, RTOS). В сущности, программное обеспечение, используемое в таких системах, всегда и в любых ситуациях отвечает на события за строго фиксированное время. Если выполнение задачи не удается завершить в установленный срок, система отменяет ее, чтобы не тратить ресурсы. Это критически важно в авиации, ракетостроении и других сферах, где приоритетными являются безотказность, надежность и безопасность RTOS считаются стандартом.

А программисты SpaceX написали весь софт для своих ракет на базе специализированного Linux-дистрибутива. Да, для этого семейства операционных систем существуют расширения, обеспечивающие функциональность, необходимую для работы в реальном времени. Однако это компромиссное решение, и полноценной RTOS не получается. Почему так — вопрос спорный и дискутировать можно долго. Скорее всего, дело в ограниченности функционала RTOS и сложности разработки ПО для них. Джарретт рассказал, как программисты компании решили проблему реального времени.

Что самое главное — SpaceX почти все программное обеспечение создает самостоятельно. В результате компоненты всех систем протестированы любым возможным способом и разработчики точно знают, как они себя поведут в разных условиях. То есть время выполнения каждой операции не ограничено сверху, а просто известно заранее. Если что-то идет не так, срабатывают защитные компоненты. Выглядит похоже, но разница в механизмах контроля — в RTOS они встроены в ядро, а в решении SpaceX реализованы отдельными программами. Как показывает многолетний опыт успешных полетов, работает надежно.

В качестве приятного дополнения стоит отметить широкое применение веб-интерфейсов. Эшер подчеркивает, что именно с их помощью создана вся функциональность, которую видят астронавты на дисплеях внутри капсулы Crew Dragon и большая часть информационных панелей для операторов центра управления полетами. Абсолютно «не-космическая» технология оказалась невероятно надежной, быстрой и, что немаловажно, гибкой для таких целей. Естественно, Starship тоже получит дисплеи управления, на которые будет выводиться веб-интерфейс, только его существенно доработают, по сравнению с тем, что используется в «Драконе». Задачи у кораблей все-таки разные.

Немного юмора и недомолвок

Некоторую информацию сотрудники SpaceX, конечно же, не были раскрыты. В частности, когда речь заходила к вопросу о передаче технических данных между спутниками Starlink и наземной станцией Кристин выдала максимально обтекаемый ответ. Несмотря на то, что ее спрашивали про объем информации и количество потоков, она лишь сказала, что данных много и они представлены в проприетарном формате. Также Эшер либо забыл, либо просто не стал показывать актуальную версию пользовательского интерфейса Crew Dragon.

Не обошлось и без нотки юмора. Один из заинтересованных пользователей Reddit передал Эшеру вопрос своей восьмилетней дочери — «Что самого сложного в создании ракетного двигателя?» На это тот ответил, что работа ракетного двигателя — постоянный взрыв, и самое сложное — сделать двигатель таким, чтобы этот взрыв оставался внутри. Вполне логичным образом в разговоре об условиях работы всплыл вопрос еды, а точнее наличия закусок в офисе. На что последовал простой ответ — «омномном». Очевидно, никаких проблем нет.

Ну и не забыли про развлечения. Когда у ребят из SpaceX спросили, сколько времени они проводят в популярной игре Kerbal Space Program (симулятор космической программы, отличающийся реалистичной физической моделью), они ответили « INT_MAX». Учитывая, что это параметр из заголовочного файла стандартной библиотеки общего назначения, написанной на языке программирования C, такую реакцию можно интерпретировать двояко. Во-первых, значение параметра может превышать два миллиарда, что указывает на значительное число. Во-вторых, это может означать необходимость жесткого ограничения времени в игре ( INT_MAX — это ограничитель).