Какие языки программирования используют в космосе

2024
Апреля

17

06:02
education.yandex.ru

В невесомости не проводят код-ревью — однако любой баг может оказаться фатальным. Рассказываем о нелегкой профессии «космического программиста»

Прошло время, когда спутники просто красиво летали и делали «пип-пип-пип». Сегодня спутник — это настоящий сервер в космосе, а само безвоздушное околоземное пространство пронизано высокоскоростными каналами связи (даже на МКС есть полноценный вай-фай).
Управлять спутниками — сложно, здесь требуется труд сотен программистов. Только для удержания спутника на заданной орбите требуется обработать массу информации с различных датчиков — ориентации, скорости, магнитного поля. Кроме того, спутники не просто летают, они выполняют полезную работу. Например, служат ретрансляторами в системах связи, фотографируют Землю, ведут радиоразведку.
Вот для чего ещё нужны программы:
Для управления полётом ракеты и вывода спутника на орбиту. Небольшой баг в расчётах может привести к аварии и выходу оборудования из строя.
Для использования в ЦУПе, Центре управления полётами. Здесь моделируют ситуации и ищут пути их решения. Например, тестируют разворот спутника в космосе.
Для обработки данных, полученных от спутника. Например, почти в каждом смартфоне есть программы навигации, умеющие обрабатывать сигнал от спутников. Если спутник ведёт фотосъёмку, то нужны программы для обработки спутниковых изображений.
Радиоактивное излучение в космосе легко может вывести из строя оборудование на основе массовых электронных плат. Поэтому в спутниках используют специальные защищённые микросхемы. Соответственно, программирование усложняется.
На каких языках пишут программы в Роскосмосе, NASA и SpaceX
Старейшие организации, работающие в космосе, весьма консервативны. За последними выпусками современных языков здесь никто не гонится. В космической отрасли чаще используют простые и низкоуровневые языки. На спутниках ограничена мощность процессоров, а в микросхемах небольшая оперативная память — и ПО должно быть как можно более энергоэффективным.
Основной язык разработки в Роскосмосе — ДРАКОН, «Дружелюбный русский алгоритмический язык, который обеспечивает наглядность». Его создали ещё в Советском Союзе. В его основе лежит язык ПРОЛ2, который используют для разработки бортовых программ, а также ДИПОЛЬ для наземных испытаний и ЛАКС для моделирования. По сути, ДРАКОН — это не полноценный язык для программирования, а система для создания блок-схем. Вы можете сами попробовать составить на нём какую-либо схему. ДРАКОН поддерживает JavaScript, Python или C++, вместе с которыми образует гибридные языки, например ДРАКОН-Python. В NASA ещё в 2000-х годах писали код в основном на Assembler. Это низкоуровневый язык программирования, представляющий собой машинный код. Для работы спутников использовались микросхемы 70-х годов, которые программировали как раз на ассемблере.
Был также специальный язык программирования для космоса — ADA. Это один из старейших языков высокого уровня, предназначенный для автоматизации управления процессами, например, в бортовых компьютерах. Сейчас он устарел и используется редко.
Большинство программ NASA пишется на C. В том числе, известный марсоход Curiosity программируется на «Си», даже без «плюсов». Но также иногда используются C++ (для визуальной навигации) и Fortran (для управления оборудованием на Земле). NASA пыталось уйти от такого «зоопарка» языков программирования, но из-за разного оборудования достичь этого пока не удалось.
Космические компьютерные технологии — иллюстрация басни про лебедя, рака и щуку. С одной стороны, спутникам и межпланетным аппаратам нужны новейшие приборы и камеры. А с другой стороны всё это работает на старой-доброй аппаратной и кодовой системе 20-летней давности (ведь это оборудование проверено многократно).
У SpaceX, в отличие от старых космических гигантов, более современный подход к программированию. Здесь в основном используют C++: его называют универсальным и применяют для разработки роботов, систем дистанционного управления и космических ракет. C++ потребляет больше ресурсов, чем тот же C, но компания активно внедряет массовые процессоры и серверы, которые мощнее специальных космических. Для повышения надёжности вместо одного сервера управления используется три, каждый из которых может работать самостоятельно. Также в SpaceX пишут на JavaScript — например, интерфейс на мониторах в Crew Dragon, — а для тестирования используют Python.
Какие казусы бывают из-за багов
4 июня 1996 года ракета-носитель Ariane 5 взорвалась в космосе. Были уничтожены четыре спутника научной программы Cluster, предназначенных для изучения взаимодействия солнечного излучения с магнитным полем Земли. Причина — ошибка преобразования переменной: программа была рассчитана на старый тип ракет, а в алгоритме запуска использовали новый.
20 декабря 2019 года нештатно закончился полёт американского космического корабля CST-100 Starliner. Причиной стала ошибка в софте: бортовое время, которое отсчитывал таймер корабля, отличалось от фактического.
23 сентября 1999 года космический аппарат Mars Climate Orbiter развалился в марсианской атмосфере, поскольку в программном компоненте давалось значение импульса, измеренное в фунт-сила-секундах, а другой компонент принимал его в ньютон-секундах.
Космос не прощает ошибок в программировании, поэтому главное требование к космическому ПО — многократное и тщательное тестирование. Если вы хотите писать код вообще без единой ошибки, то вас ждут в ЦУПе!