Программисты из SpaceX отвечают на вопросы про разработку
На Reddit есть интересный тред, где программисты из SpaceX отвечают на любые вопросы пользователей. SpaceX — это та компания, которая построила ракеты Falcon и корабли серии Dragon, а совсем недавно запустила первый в своей истории пилотируемый корабль с экипажем.
Вот они собрались на Reddit, чтобы поотвечать на вопросы, а мы перевели самое важное. Если вы знаете английский — почитайте в оригинале, там много интересного.
На каком языке написана большая часть кода для ракет и корабля?
Весь софт, который должен работать автономно, написан на C++. Нам нравится объектно-ориентированный подход в C++, но при этом мы стараемся писать настолько простой код, насколько это вообще возможно. Ещё мы используем несколько библиотек с открытым исходным кодом, но у нас очень жёсткие требования к их качеству, поэтому нам проще написать свои библиотеки, где мы точно уверены в качестве кода.
Расскажите о своём стеке
Весь софт, который отвечает за сам полёт, мы пишем на C и C++, для вывода информации на экраны мы используем HTML, JavaScript и CSS. Python нам нужен для тестов. А ещё мы используем стандартные веб-компоненты. Всё просто.
Мы знаем, что весь интерфейс на мониторах в Crew Dragon отображается с помощью движка Chromium и JavaScript. А кроме этого вы используете какие-то библиотеки и компоненты, и если да — то какие?
Да, мы используем тот же Chromium, который лежит в основе браузера Chrome, ещё есть собственные библиотеки. При этом важно понимать, что мы используем Chromium только как движок для отображения интерфейса на экранах. То, что мы выводим на мониторы, никак не влияет на сам полёт и отказоустойчивость системы.
Тем не менее у нас один и тот же процесс разработки любого кода, независимо от его применения и языка программирования. Мы параллельно учим наших разработчиков писать код для двигателя на языке C++ и придерживаться того же подхода к надёжности во всех проектах.
Вообще этот проект начинался как симулятор полётов для NASA, чтобы показать, как ещё может выглядеть полётный интерфейс. Потом мы попробовали запустить его на настоящем оборудовании, которое ставят в космические корабли, и там наш интерфейс тоже отлично работал.
Нам нравятся все эти штуки, которые умеют современные браузеры, а ещё у нас работает много талантливых ребят. Мы не боимся делать что-то новое — нам нравится быть первыми в чём-то, даже если это не соответствует стандартам в отрасли.
Как работает система безопасности полёта?
За эту систему отвечает специальный набор чипов, который работает независимо от основного компьютера. Эти чипы напрямую получают и сигналы с основных датчиков, и данные с бортового компьютера. Если они поймут, что ракета летит не туда, теряет скорость или будет что-то подобное, то эта система сразу закончит полёт и постарается посадить ракету на Землю.
Как вы отслеживаете и исправляете ошибки, которые возникают во время полёта?
Здесь много нюансов. Ошибки, которые возникают от воздействия радиации на микросхемы и датчики, отслеживают несколько резервных компьютеров, а мы смотрим, что они показывают на выходе. Ошибки в датчиках решаются установкой разных дублирующих датчиков. Ошибки в передаче данных обрабатываются с помощью кодов обнаружения или исправления ошибок.
Что будет, если во время полёта что-то пойдёт не по плану — например, если откажут двигатели или что-то подобное?
Чтобы исключить любую непредвиденную ситуацию, мы почти всё, что можно, ставим в тройном объёме — датчики, приводы, микросхемы и всё остальное. Даже если в полёте сломается один или даже два из них, система будет работать как обычно.
Наши космические корабли спроектированы так, что им не страшен даже отказ одного из двигателей или механизмов управления — их компенсируют алгоритмы, которые перераспределят нагрузку. Кроме того, у нас есть отдельные алгоритмы для обработки действительно критических ситуаций. Например, Crew Dragon может сам прервать полёт и приземлиться обратно, если сбой в работе будет слишком большим.
SpaceX использует искусственный интеллект внутри своего ПО?
Нет, искусственного интеллекта у нас нет. Вместо этого корабль использует алгоритмы компьютерного зрения и распознавания, например, для ориентации в пространстве. Но кто знает, возможно, в новых космических кораблях мы поставим искусственный интеллект, чтобы он ими управлял 🙂
Если я ещё учусь в школе, что мне нужно сделать, чтобы когда-нибудь прийти к вам работать программистом?
Получите профильное образование или по-настоящему заинтересуйтесь компьютерами. Найдите время, чтобы разобраться в том, как всё работает. Наши инженеры, которые работают в SpaceX, отлично разбираются в том, как работает их код, как устроена сеть, зачем нужен Linux, разбираются в железе и так далее. Отличный вариант — личные проекты или стажировки в крупных компаниях, чтобы получить опыт создания нового и решения сложных проблем.
А вообще чтобы разрабатывать ПО, нужно сосредоточиться на двух важных вещах:
- алгоритмы и структуры данных;
- понимание того, как компьютер работает на самых низких уровнях.
Даже если вы не будете регулярно копаться в драйверах устройств, сетевом стеке и сборке, то понимание того, как всё это сочетается, позволит вам решить любую проблему.
Какую версию Linux вы используете?
Мы не используем обычные версии Linux — мы взяли само ядро и немного переделали его под себя, чтобы получить лучшую производительность в режиме реального времени. Мы годами допиливали ядро, но это были очень маленькие изменения — строчка кода там, две тут. Единственное глобальное изменение — мы встроили в него свои драйвера для железа, чтобы работать с ним напрямую.
Что за процессор стоит в Crew Dragon? Я понимаю, что там их много из-за требований надёжности, но всё-таки? Он мощнее, чем, скажем, Intel i9 9900k?
Мы используем распределённый четырёхядерный процессор с производительностью как у телефона пятилетней давности 🙂
Приведите пример нестандартной ситуации, которую нужно предусмотреть вам как разработчикам
О, классный вопрос. Вообще нам нужно предусмотреть всё 🙂
Например, представьте, что у вас вдруг из-за радиации внезапно начал перезагружаться один из бортовых компьютеров. Это один из самых интересных случаев, для которого мы предусмотрели отдельный сценарий поведения алгоритма.
Или это может быть одновременный отказ нескольких подсистем, которые отвечают за навигацию, связь, жизнеобеспечение и двигатели. Отличный пример — катапультирование или пожар в кабине. За очень короткое время поступает много разных сигналов со всех датчиков, которые нужно как-то одновременно обработать и принять правильное решение.
Источник
Какие языки программирования используют в космических программах
12 апреля весь мир традиционно празднует День космонавтики, в связи с этим мы хотели бы рассказать вам что-нибудь интересное о космосе с точки зрения программирования. Мало кто задумывается о программистах, когда наблюдает за очередным запуском ракеты. Ещё меньше людей думают о языках программирования, благодаря которым вся эта техника вообще взлетает (не учитывая двигатели и корпус).
Как программируется отечественный космос?
С чего началась история программирования в отечественной космонавтике?
Когда началась холодная война между СССР и США, тогда началось и создание «Бурана» — орбитального многоразового космического корабля. В те 70-е годы вычислительная техника была очень слабой и программистам приходилось работать примерно со следующими мощностями:
- 4МГц;
- 128 КБайт оперативной памяти;
- 16 КБайт постоянной программной памяти.
Как вы понимаете, программировать что-либо на этом сложно, а тем более для такой техники. Кроме того, надо было повышать производительность программистов, как и их численность. Поэтому ассемблер тут точно не подошёл бы. Тогда исследователи из разных институтов объединились и начали создавать собственные средства программирования специально для космолёта.
Что было создано:
- ПРОЛ2 — язык для разработки комплексных бортовых программ в реальном времени;
- ДИПОЛЬ — проблемно-ориентированный язык для создания программ для наземных испытаний;
- ЛАКС — язык для моделирования;
- САПО — система отладки и автоматизации процесса программирования;
- БЦВМ — бортовая цифровая вычислительная машина;
- Пролог-диспетчер — операционная система для взаимодействия с БЦВМ.
Однако после своего единственного беспилотного пуска программа была закрыта и разработку корабля прекратили. При этом наработки учёных не перестали использовать, а наоборот — даже немного усовершенствовали, создав на их базе новый язык программирования под названием ДРАКОН.
Изображение «Бурана», поднимаемого ракетой в космос.
Роскосмос
На просторах Интернета довольно сложно найти информацию о языке программирования, который используется в госкорпорации. Но есть основания полагать, что пишут в Роскосмосе в том числе и на ДРАКОНе. Этот язык был разработан ещё в советские времена и до сих пор применяется в аэрокосмической отрасли. Он может сливаться с другими ЯП в единое целое, образуя такие гибриды, как ДРАКОН-C, ДРАКОН-Python, ДРАКОН-Java и так далее.
В ДРАКОНе учёные РАН реализовали все лучшие стороны таких узконаправленных языков, как ПРОЛ2, ДИПОЛЬ и ЛАКС.
ДРАКОН применяется и в настоящее время в ракетоносителях Протон-М и иногда его используют [PDF] для тестов в Германском Аэрокосмическом Центре. Решение о продолжении использования языка приняли благодаря его надёжности и функциональности. Изначально создатели хотели, чтобы он был понятным не только для программистов, но и для людей других специальностей. И у создателей языка это получилось. ДРАКОН-схемы вполне удобны и читаемы для обычных людей. А программисты могут использовать гибриды, о которых было упомянуто выше. Создание такой технологии, конечно, не запуск первого человека в космос, но тем не менее, важное для отечественной науки событие. Что бы сейчас использовал Роскосмос для своих ракет? Кстати, ДРАКОН расшифровывается следующим образом: Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность.
Так сложились обстоятельства, что этот язык имел особую философию — программирование без программистов. Поэтому, после развала СССР работа над ДРАКОНом продолжилась. Да-да, именно так. Считалось, что инженеры лучше смогут понять, что нужно эксплуатируемой ими технике, чем далёкие от физики процесса программисты. А замена на любой другой ЯП только усложнила бы всё. Зачем отказываться от гибридного языка? Представьте, если бы у нас были такие звери как Java-Python, JavaScript-C++, вот бы зажили! Но от программистов полностью никто не спешил отказываться, они всё ещё нужны были для реализации некоторой части задач (не забываем о возможности слияния с другими языками).
Протон-М на старте
И ещё немного о ДРАКОНе
Этот язык программирования доступен всем людям, а не только специалистам аэрокосмической отрасли. Для него есть даже редактор (не от Роскосмоса, но всё же), в котором можно составлять свои алгоритмы и схемы.
Пример реализации алгоритма Дейкстры с помощью ДРАКОНа
А как насчёт других отечественных компаний?
Пока что серьёзных конкурентов у Роскосмоса на территории России (и СНГ) нет. Даже S7, которая начнёт запускать ракеты с «Морского Старта», нельзя назвать конкурентом из-за малой активности. Кроме того, точно не удаётся выяснить, на чём именно программируют в этой компании. Однако известно, что на площадке «Морской старт» все действия в большой степени выполняются на ДРАКОНе благодаря его надёжности.
SpaceX
В последние пару лет компания стала даже популярнее Роскосмоса в плане доставки гражданских грузов на орбиту. Кроме того, благодаря запуску новой ракеты Falcon Heavy у компании появились новые поклонники как среди простых людей, так и компаний, которые до сих пор выбирают между Роскосмосом и SpaceX. К сожалению для отечественной госкорпорации, цены у конкурента в некоторой степени привлекательнее. В российских исследовательских центрах и конструкторских бюро уже готовят ответ Илону Маску, но, увы, этот ответ был найден в чертежах 60-х годов прошлого столетия. На действительно впечатляющие инновации нам нужно надеяться, видимо, в чуть более отдалённом будущем. Но на каком же языке программируют в SpaceX? Западные коллеги используют C++ почти для всех задач. Для наземного моделирования применяется LabVIEW — среда разработки и платформа для выполнения программ, созданных на графическом языке программирования «G».
Falcon Heavy на взлёте
Здесь ситуация похожа на SpaceX: многое программируется на C, ещё больше на C++, совсем мало на Java и некоторые простые и «безопасные» программы пишутся на Python и других языках. Мы могли бы здесь подробнее расписать, что и на чём именно там создают, но у нас есть замечательная статья с информацией от инсайдера, с которой рекомендуем вам ознакомиться. Кстати, NASA на фоне SpaceX выглядит довольно тускло и там, как и в Роскосмосе, интересных инноваций не наблюдается, за исключением некоторых программ освоения космоса.
Заключение
После прочтения статьи, вы, возможно вдохновились тем, что программисты делали и делают сейчас в сфере космоса. Мы не хотим, чтобы у вас это вдохновение исчезло. Если вы ещё не пишите код, то предлагаем вам ознакомиться с нашей статьёй, в которой мы рассказываем о том, как быстрее начать программировать.
Источник
Alpha Centauri
Fr1Zz · SpaceX · 28 января, 2020 17239
На чём пишут ПО для космических аппаратов?
Предисловие
При обсуждении готовящихся к запуску или уже запущенных космических аппаратов, так или иначе мы обращаем внимание на то, каким образом эти аппараты работают. Зачастую такие обсуждения ограничиваются затрагиванием общей конструкции аппарата, установленных на него приборов или других модулей, служащих определённой цели. Мы всё время повторяем: «Инженеры установили то… Разработали это… Сконструировали другое», тем самым уделяя всё внимание им.
Конструкторы собирают Mars 2020 (Я голосовал за Clarity).
Однако, отдавая должное инженерам и конструкторам многие забывают, что даже со всем аппаратным обеспечением, модулями, приборами и т.д. и т.п., аппарат не будет выполнять свои функции без программного обеспечения, которое, как правило, создаёт другая группа людей — программисты. Если железяки являются телом аппарата, то ПО является его интеллектом, оно вдыхает жизнь в эту груду металла, позволяет людям управлять ей, даже находясь на другом конце Солнечной системы. Как говорил мой преподаватель по программированию… Магия! Не вникая в суть невозможно понять масштаб работы, которую нужно проделать для реализации этой «магии», однако каждый, кто в изучении программирования уходил хотя-бы на несколько ступеней выше знаменитого «Hello World!», понимает, что это неимоверный труд. Поэтому я и решил затронуть эту тему и ниже я вкратце распишу какие языки и методы программирования используют в различных космических компаниях, а именно в NASA, SpaceX и Роскосмосе, и как эти языки менялись, меняя за собой всю отрасль.
Как кодят в NASA?
История этого ведомства, скорее всего, является самой необычной и насыщенной уймой странностей и необъяснимых вещей. Именно поэтому раздел о нём будет самым длинным. Дело в том, что в NASA не особо любят заниматься переписыванием одного и того же кода от миссии к миссии и часто там практикуется повторное использование компонентов кода, успешно зарекомендовавших себя в предыдущих миссиях. Казалось бы, это правильное решение и в целом с этим нельзя не согласиться. Это увеличивает надёжность будущего аппарата и сокращает время разработки ПО под него. Однако вот незадача… Технологии идут вперёд. И код, подходящий для одной архитектуры, нужно переделывать, чтобы он заработал на более новой. Делать это, конечно, никто не торопился. Именно поэтому миссии THEMIS и STEREO, запущенные в 2007 и 2006 годах соответственно, работали с использованием модулей от предыдущих миссий на процессорах Intel 8085, выпущенных ещё в 1976 году. Код для них очевидно писался на машинно-ориентированных языках по типу Ассемблера. Простым для чтения, а уж и для переноса на другие системы, такой код точно не назовёшь, однако его использование невероятно сильно ускоряло работу ПО. Команды обращаются к процессору как бы напрямую, без посредников.
Одна и та же программа на Ассемблере и многим известном Паскале.
Естественно, что в то время уже существовали языки и более высокого уровня, тот же Fortran. Однако использовался он не так активно и преимущественно для компьютеров, которые будут находиться на Земле, а не в полёте. К тому же, просто использовать Fortran тогдашнее руководство не захотело и во время раскрутки программы Space Shuttle в 70-ые года было принято решение разработать на основе Fortran новый язык программирования, отвечающий новым требованиям стандартов, которые так были необходимы для упорядочивания всей накопившейся к тому времени кодовой каши. Было решено разработать два языка: HEL/S для ПО космических аппаратов, и HEL/G для наземного оборудования. Однако с HEL/S создатели явно перемудрили, сделав код абсолютно не читабельным даже для программиста выше среднего уровня. Вот простейший пример.
И вот что под ним имеется в виду (i — индекс):
Вот уж где точно магией не пахнет. Таким образом, язык HEL/S был оставлен в прошлом, а HEL/G даже не появился на свет. В итоге NASA начало временно использовать язык программирования Ada, разработанный до этого под нужды ВВС США. Изначально он использовался для управления военными объектами, снарядами, самолётами, кораблями и другими безделушками в реальном времени. Как вы уже могли догадаться, единственным языком в NASA он не стал. Всё также кто-то где-то использовал Fortran, кто-то Pascal, а кто-то вообще Visual Basic или Bliss. Ко всей этой солянке в начале нулевых добавились знаменитые С, С++ и Perl. Стали, наконец, появляться операционные системы в привычном нам понимании. К слову, многие аппараты до этого вообще путешествовали по космическим просторам без каких либо операционных систем (Пионер вам в пример). Таким образом приоритет захватил быстрый и удобный язык С. Именно на нём сейчас работает большая часть космических аппаратов, в том числе всем известный любимчик — марсоход Curiosity. Под роверы на С была написана универсальная операционная система VxWorks. Все марсоходы начиная от Pathfinder и заканчивая Curiosity работают на ней.
С триумфом С солянка языков программирования никуда не делась и для разных миссий/задач всё ещё используются различные языки, в том числе обожаемый многими нынче Python. Никуда так и не делся кошмар любого любителя ООП (объективно ориентированное программирование) — Ассемблер. Кстати таким же, как я, фанатам языков по типу Java или C#, работающих с помощью виртуальной машины, в космическом программировании ловить нечего, ибо слишком большое время отклика у таких программ для космических расстояний. Ну зато программа, написанная на утюг, будет работать и на Tesla.
Как кодят в SpaceX?
Если NASA — это ваш 60-летний сосед, пользующийся кнопочным телефоном, время от времени читающий газеты (те самые, бумажные) и прогуливающийся до рынка, чтобы прикупить себе что-нибудь модное, то SpaceX — это молодой паренёк со смартфоном в руках, в котором есть всё, начиная от звонков и новостей, заканчивая интернет магазинами с доставкой. Компания Илона Маска также использует несколько языков программирования, однако их в разы меньше, чем у NASA и все они являются современными высокоуровневыми языками, код которых на минимальном уровне, в принципе, может прочитать даже тот, кто ни разу не знакомился с программированием.
Красота же, правда?
Для программного обеспечения на всех ракетах серии Falcon, на всех кораблях Dragon используется шикарнейший язык С++, который какое-то время в универе я считал идеальным языком программирования (пока не познакомился с Java). Язык максимально универсален и, плюс ко всему, относительно машинных языков прост в изучении. На нём пишут практически всех современных роботов, все системы дистанционного управления и всё, что только можно. По заявлениям сотрудников SpaceX, этот язык занимает основную позицию, среди всех других языков в компании. Своё место нашли C# и JavaScript. На них работают большая часть внутренних инструментов и услуг компании. Например кофеварка в кабинете Илона Маска, вероятнее всего, работает на C# (если она у него есть). Для других технологических задач также используются Knockout, Handlebars, Python, LESS. Моделирование же проводится в LabVIEW с помощью графического языка программирования G. Из операционных систем же для своих аппаратов, SpaceX отдали предпочтение Linux.
В общем, у SpaceX, в отличие от тех же NASA, с разработкой ПО всё намного проще и практичнее. Но всё же стоит учесть через что пришлось пройти NASA, перед тем как появились современные языки программирования и этот путь не может не сказываться на нынешних делах этого ведомства. SpaceX же фактически пришли в идеальный момент, когда все трудности за них уже преодолело NASA и сильно запариваться с машинными языками программирования команде Илона не пришлось, когда уже есть С++.
Как кодят в Роскосмосе?
«С? С++? Что за бред? Какой-то набор скобочек и запятых? Зачем нам это?» — подумали российские инженеры, когда эти языки начали появляться на свет. И правильно сделали. Ведь ещё в СССР был разработан универсальный способ писать ПО для ракет и космических кораблей. Всё началось с разработки всемирно известного Бурана.
В представлении не нуждается.
Для реализации этого проекта был разработан ПРОЛ2 — язык для разработки комплексных бортовых программ в реальном времени. Сразу за ним подоспели ДИПОЛЬ — проблемно-ориентированный язык для создания программ для наземных испытаний и ЛАКС — язык для моделирования. Все это было создано под БЦВМ — бортовую цифровую вычислительную машину. Для неё также была написана отдельная операционная система, получившая название «Пролог-диспетчер». После запуска Бурана, как мы все знаем, лавочка была прикрыта и больше Буран не эксплуатировался, однако его наработки не были забыты и даже ещё более усовершенствованы. Таким образом на свет родился Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность. Или сокращённо ДРАКОН. Главной фишкой этого языка является то, что программировать на нём может кто угодно, даже не программист. По крайней мере на его чистой версии. Язык является в меньшей степени языком и в большей набором схем, создающимся в редакторе. ДРАКОН-Схемы получились очень удобными и читаемыми для всех людей, даже не являющимися программистами.
Алгоритм Дейкстры реализованный на ДРАКОН’е.
Но на этом его создатели решили не останавливаться. Всё-таки одними схемами сыт не будешь и ДРАКОН стал гибридным языком программирования, что значит, что он способен как-бы сливаться с другими языками программирования, образуя таким образом ДРАКОН-Java, ДРАКОН-Python и так далее. Вот это я понимаю магия. Язык оказался настолько надёжным и мощным, что используется он и по сегодняшний день, причём не только в Роскосмосе. Некоторые проекты ESA реализованы на нём, планируемый в будущем «Морской старт» от S7 тоже будет реализован на ДРАКОН’е.
По мелочи, конечно, использовались и другие языки программирования. Мой преподаватель (тот что шутил про магию), рассказывал как для разработки ПО серии аппаратов «Венера» использовался язык Fortran, однако основой после Бурана всё же остался максимально универсальный ДРАКОН.
Конец
На этом всё, спасибо всем, кто дочитал до конца. Буду рад любым отзывам и оценкам.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник