Не нажимай эту кнопку: изучаем программное обеспечение SpaceX

Не нажимай эту кнопку: изучаем программное обеспечение SpaceX, image #1

Космические полёты с самого начала зависели от компьютеров — это прослеживается как в наземной инфраструктуре, так и в космических кораблях. Но SpaceX смогла выйти в этом на новый уровень. Недавно команда блога StackOverflow обсудила со Стивеном Гердингом (руководителем разработки программного обеспечения корабля Dragon) особые проблемы и вызовы, с которым сталкивается их команда разработки в многочисленных миссиях SpaceX.

23 апреля 2021 года SpaceX и NASA запустили вторую оперативную миссию Dragon (Crew-2) на Международную космическую станцию, став первой пилотируемой космической миссией, в которой полёт астронавтов осуществился с помощью проверенных временем Falcon 9 и Dragon. Примерно через 24 часа Dragon в автономном режиме состыковался со станцией, что стало первым случаем в истории, когда к орбитальной лаборатории одновременно были присоединены два корабля Dragon. Это ознаменовало начало новой эры для SpaceX, в которой она будет регулярно доставлять астронавтов на МКС.

Реальная работа по разработке программного обеспечения инженерами, такими как Гердинг, для космических аппаратов в основном выполняется с использованием языка C++, который с первых дней существования компании является основным. Всё программное обеспечение считывает настройки из текстовых файлов конфигураций: «Мы изобрели простые специализированные языки, чтобы они могли выражать эти вещи так, чтобы другим инженерам компании (не являющимся разработчиками программного обеспечения) было легко выполнять настройку».

Не нажимай эту кнопку: изучаем программное обеспечение SpaceX, image #2

Программное обеспечение для полёта ракет в SpaceX построено вокруг концепции цикла управления: «Сначала считывается вся входная информация: датчики получают данные через АЦП [аналого-цифровые преобразователи], передаются сетевые пакеты, данные от IMU [инерциальных измерительных модулей], обновляются данные от звёздного трекера или датчика навигации, распознаются команды с Земли, — объясняет Гердинг, — вы обрабатываете всё это, чтобы определить собственное состояние, например: где вы находитесь в пространстве или каково состояние системы жизнеобеспечения. Это определяет ваши выходные данные — вы сохраняете их, ждёте следующего тика часов, а затем повторяете всё заново».

Цикл управления задаёт и подчёркивает некоторые требования к производительности программного обеспечения: «На Dragon некоторые компьютеры работают [выполняют цикл управления] на частоте 50 Гц, а другие — на частоте 10 Гц. Главный бортовой компьютер работает на 10 Гц. Он управляет миссией в целом и отправляет команды на другие компьютеры. Некоторым из них нужно реагировать быстрее на определенные события, поэтому они используют частоту в 50 Гц».

С центральной системой полёта взаимодействует множество других устройств: «Мы принимаем на ввод данные от различных датчиков по всему кораблю». Многие из них измеряют внутренние показатели, которые критичны для здоровья корабля и экипажа: «Очень важна температура. Для кораблей с экипажем у нас предусмотрены датчики кислорода и углекислого газа, давления в кабине и тому подобное».

Другой набор датчиков принимает внешние данные для помощи в навигации и телеметрии: «В основном это IMU, GPS и звёздные трекеры». Подлетев достаточно близко к космической станции, также начинают использоваться лазерные дальномеры.

Другой стороной цикла управления являются вывод информации: «Есть два разных типа выходных данных. Один из них — это фактически «открыть или закрыть вентиль» или «включить или выключить переключатель». Другой — это телеметрия, представляющая собой поток пар ключ-значение, которые каждые 20–100 миллисекунд сообщают значение определенного параметра».

Не нажимай эту кнопку: изучаем программное обеспечение SpaceX, image #3

Иногда результаты поступают напрямую с датчиков и не требуют дополнительных действий. Но в других случаях требуется обработка: «Это может быть какое-то значение, вычисляемое программным обеспечением, например: текущее значение для конечного автомата или же результат алгоритма, который будет управлять выводом».

Когда космический аппарат находится на земле, данные передают по проводному соединению, что обеспечивает высокую скорость передачи. «Как только происходит взлёт, появляются другие системы связи, через которые мы можем передавать различные подмножества данных о телеметрии на Землю». При приземлении аппарата включаются системы, позволяющие операторам просматривать актуальные данные и принимать решения с точки зрения управления транспортным средством. Также существует система, которая сохраняет критически важные данные. Это очень важно, если вы планируете повторно использовать ракеты-носители и корабли в последующих миссиях.

В настоящее время Dragon осуществляет стыковку с Международной космической станцией в автономном режиме. Конечной целью является полная автоматизация космического аппарата: «У астронавтов есть возможность взять на себя управление кораблём в случае необходимости — это было продемонстрировано в миссии Dragon Demo-2», — сказал Гердинг.

Мы спросили, что произойдёт при возникновении неисправности: «Я думаю, что процедуры в случае сбоев для нас достаточно очевидны. Существуют копии аппаратного обеспечения, будь то компьютерное оборудование, датчики или исполнительные механизмы, поэтому когда мы обнаруживаем сбои, то пытаемся обойти их».

Гердинг отмечает, что нет способа защиты от случайных ошибок в программном обеспечении: «Мы стараемся спроектировать программное обеспечение таким образом, чтобы в случае сбоя влияние на остальную систему было минимальным». Например, если в двигательной установке возникнет программная ошибка, то она не повлияет на систему жизнеобеспечения или на системы наведения, управляющие космическим кораблём (и наоборот): «Изоляция различных подсистем является ключевым моментом».

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

Не нажимай эту кнопку: изучаем программное обеспечение SpaceX, image #4

Основным процессом разработки ПО является проверка и валидация: «Написание программного обеспечения — это на самом деле небольшой процент усилий, затрачиваемых в целом на подготовку к полёту космического корабля».

В ходе первой отправившейся на космическую станцию демонстрационной миссии (Demo-1), NASA требовало, чтобы программное обеспечение было устойчивым к любым двойным сбоям в системе: «Мы реализовали тройное резервирование системных модулей и нам нужна была система для управления им». Гердинг ранее имел некоторый опыт работы с распределенными системами в Google, что сделало его подходящим для решения этой задачи: «В те времена в команде разработчиков ПО SpaceX было всего 10 человек. Я принял это в расчёт и начал действовать. Я считаю, что область распределённых систем действительно интересна».

В Google к программным ошибкам относились с “положительной” стороны. «В SpaceX же сбои программного обеспечения не должны приводить к выходу процессов из строя. Мы предпочитаем подход, когда остальное программное обеспечение (на которое не повлиял сбой) продолжает работать. Да, мы хотим знать о случившемся сбое и для этого у нас есть телеметрия. Но также необходимо, чтобы ход выполнения ПО продолжался, и мы могли контролировать это наилучшим образом».

Материал подготовлен сообществом Илон Маск / Elon Musk (Tesla, SpaceX, Neuralink).

Источник: https://vk.cc/c5ts2k.

644 views·44 shares