На каких языках кодят в Роскосмосе, NASA и SpaceX
Рассказали, на каких языках программирования пишется ПО для космических кораблей и какие решения используют Роскосмос, NASA и SpaceX.
56К открытий58К показов
11 августа Роскосмос планирует запустить новый модуль — Луна-25. Он соберёт образцы грунта, изучит экзосферу и южный полюс спутника, и поможет узнать, есть ли на Луне вода и в каком количестве.
Мы решили, что это повод разобраться и рассказать, на каких языках программирования пишется ПО для космических кораблей и какие решения используют Роскосмос, NASA и SpaceX.
На чём кодят в Роскосмосе
Роскосмос использует особенный язык программирования — ДРАКОН, который был придуман ещё в Советском Союзе.
Это визуальный ЯП, который помогает создавать скрипты по алгоритмам. Название расшифровывается как Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность.
В основе ДРАКОНа лежат языки программирования ПРОЛ2, ДИПОЛЬ и ЛАКС, которые использовали в 70-х годах. ПРОЛ2 предназначен для разработки бортовых программ, ДИПОЛЬ — для программ наземных испытаний, а ЛАКС — для моделирования.
Разработчики ДРАКОНа придумали своего рода no-code систему, которая облегчила работу программистов и ускорила разработку.
Написать программу на ДРАКОНе можно даже в браузере.
При этом ДРАКОН не является самостоятельным языком программирования. Это скорее программа для создания блок-схем. ДРАКОН поддерживает JavaScript, Python или C++, вместе с которыми он образует гибридные языки вроде ДРАКОН-Python.
В блоки вписывается код для выполнения программой. В них расписываются только функции, а ключевые слова вроде if, else, switch, case, for или while обозначаются средствами схемы. После этого блок-схема преобразуется в текстовый код.
Кажется, что ДРАКОН усложняет задачу: проще написать код, чем рисовать схемы и программировать одновременно. Но язык используется для сложных систем управления космическими кораблями, а в коде может быть множество вложенных функций с миллиардом if. В этом случае, легче разобраться в коде, когда он наглядно представлен в виде схемы.
Также можно подумать, что ДРАКОН — устаревшая разработка, которая не может использоваться вот уже 60 лет, когда в мир уже пришли нейросети.
Это не так: язык до сих пор применяется в ПО для систем управления ракет-носителей и разгонных блоков космических аппаратов. Среди них:
- разгонный блок космических аппаратов ДМ-SL (в рамках международного проекта «Морской старт» — участники Россия, США, Украина, Норвегия);
- разгонный блок космических аппаратов Фрегат (Российско-европейский проект);
- модернизированная ракета-носитель тяжелого класса Протон-М;
- разгонный блок космических аппаратов ДМ-03;
- разгонный блок космических аппаратов «Наземный старт»;
- ракета-носитель легкого класса Ангара 1,2;
- ракета-носитель тяжелого класса Ангара-А5.
На чём кодят в NASA
Ещё в 2000-х годах код для космических аппаратов NASA писался на Ассемблере. Всё потому, что для кораблей использовали маломощные по современным меркам процессоры. К примеру, в 2006 году корабли работали на процессорах Intel 8085 1976 года выпуска.
От Ассемблера пытались отказаться: ещё в 1970-х годах NASA пытались разработать специальный язык программирования HAL. У HAL было два подвида: HAL/S для космических кораблей и HAL/G для центра управления.
HAL максимально очистили от конструкций, которые могли вызывать программные ошибки, чтобы получился инструмент без излишеств, который не подвёл бы астронавтов.
Несмотря на простоту и надёжность, HAL-языки были неудобными в плане синтаксиса, из-за чего HAL/S забросили, а HAL/G не стали разрабатывать вовсе.
Вот как выглядела запись z = y^2 +x*hi
К 1980 году для Министерства Обороны США разработали язык Ada. Это был универсальный язык, с помощью которого управляли кораблями, самолётами и военными базами. Именно его и решили использовать в NASA.
Изначально Ada был похож на языки Алгол и Pascal и отличался строгой типизацией. Позже он стал поддерживать принципы ООП, а последнее крупное обновление для Ada вышло в 2012 году. Также код на Ada был на 60% дешевле, чем на языке Си, и выдавал в 9 раз меньше ошибок.
Вот пример кода на Ada:
Внимательный читатель задастся вопросом: «А почему выгоднее использовать Ada, если Hello World занимает 7 строк?». Что ж, этот читатель будет абсолютно прав! ? Точно таким же вопросом задались и в Минобороны США, и в NASA.
Хотя код на Ada был прост, быстр и надёжен, он не был лёгким, из-за чего NASA перешла на С.
Сегодня большинство ПО в NASA разработано именно на С, а Python не используется вовсе. Также разработчики NASA стараются не использовать С++. Причина в том, что код на С++ трудно обслуживать, а в коде часто случаются ошибки.
При разработке на языке Си проблемы возникают реже, потому что он наиболее близок уровню “железа”, а писать на нём — легко и быстро.
Ещё, как ни странно, инженеры NASA не используют ресурсоёмкое железо и предпочитают чипы с частотой 20 MHz и оперативной памятью в 128 MB. Нагружать такое железо сложными скриптами нельзя: приходится экономить на всём.
На чём кодят в SpaceX
В отличие от NASA, SpaceX — компания Илона Маска, которая основана для колонизации Марса — использует именно С++, который идеально подходит для разработки дистанционных систем управления.
Можно предположить, что частная компания Маска может позволить себе использовать современное железо, для которого выполнение программ на C++ — не проблема.
Также SpaceX использует JavaScript: в частности, каркас веб-приложений Knockout.js и шаблонизатор Handlebars.
Чуть реже компания использует динамический язык стилей LESS и Python. Что касается операционных систем, SpaceX внедряет Linux.
Готовое ПО для полёта на Луну
К сожалению, космонавты не делятся конфигурациями ПО для запуска ракет, но есть обрывки информации о том, какие решения применялись ранее.
На GitHub можно найти несколько репозиториев с кодом для миссии Apollo-11 — той самой, в ходе которой американцы первыми высадились на Луну. Или которую якобы снял Стэнли Кубрик в одной из студий Голливуда.
Вот несколько репозиториев с восстановленным ПО для Apollo-11:
- chrislgarry/Apollo-11 — самый популярный репозиторий с кодом на Ассемблере. ПО было восстановлено специалистами из Virtual AGC и Музея MIT. Именно так выглядел код для оригинальной лунной миссии.
- alfonsokim/apollo-guidance-computer — ПО для Центра принятия решений миссии Аполлон-11. Основная часть кода написана на языках С и С++. Разобраться в коде будет гораздо проще, чем в Ассемблере.
- virtualagc/virtualagc — ещё одна версия ПО для Центра принятия решений. Большая часть написана на Ассемблере. Также использованы Xproc и С.
Кроме того, известна ОС, которая использовалась в NASA и SpaceX. Это VxWorks — UNIX-система, которая стала основной для кораблей серии Dragon. Также VxWorks использовали для марсохода Curiosity, который был запущен в 2011 году.
Ещё в 2021 году NASA опубликовала список open-source решений, используемых в программе. Здесь можно найти, к примеру, ПО для робота Astrobee, который выполняет стыковку и посадку на МКС.
Заключение
Надеюсь, после прочтения этой статьи вы загорелись желанием написать своё ПО для космического корабля, а в будущем вас ждёт судьба Илона Маска с собственным аналогом SpaceX. В таком случае, не забудьте упомянуть Tproger в торжественной речи, когда ваш модуль успешно приземлится на Луне! ?
А если вы уже своего рода Илон Маск или просто опытный разработчик ПО для космических аппаратов, делитесь инсайдами в комментариях: расскажите нам, какие языки программирования вы используете, какие технологии нужно рассмотреть начинающим косморазработчикам и как успешно запустить ракету в космос.
56К открытий58К показов