Во что встроено программное обеспечение Mars Curiosity Rover?

544

Марс Curiosity марсоход успешно приземлился, и один из промо - видео «7 минут ужаса» хвастается там быть 500000 строк кода. Это сложная проблема, без сомнения. Но это много кода, конечно, за этим стоит довольно большое программирование. Кто-нибудь знает что-нибудь об этом проекте? Я могу только представить, что это какой-то встроенный C.

InfinitiesLoop
источник
91
Почему можно предположить, что в проекте задействован только один язык?
Рог
5
Хороший вопрос, конечно, он, вероятно, имеет широкий спектр технологий, связанных с ним. Я хочу знать больше обо всем этом :)
InfinitiesLoop
3
Какая часть? Космический корабль? Rover? Инструменты? Наземная система? Как указывают другие комментарии, вероятно, есть несколько языков, используемых в разных компонентах. Не исключено, что ассемблер использовался для некоторых критичных по времени компонентов.
GreenMatt
67
Честно говоря, когда я увидел цифру в 500 клок, я поймал себя на мысли: «Только?» Это могло бы быть реалистично, если бы это был Haskell, но, прочитав немного о предыдущих проектах и ​​их языках низкого уровня, это показалось слишком низким. Приведенный ниже 2,5-местный код С является более правдоподобным.
Филипп Каменарский
19
Более интересный вопрос "на каком языке?" такое "с каким процессом?" , Это процесс, который имеет значение, и НАСА уже несколько десятилетий использует строгий.
dmckee

Ответы:

506

Он работает 2,5 миллиона строк C на процессоре RAD750 производства BAE . В JPL есть немного больше информации, но я подозреваю, что многие детали не разглашаются. Похоже, что сценарии тестирования были написаны на Python.

Базовая операционная система - это ОСРВ Wind River VxWorks . Рассматриваемая ОСРВ может быть запрограммирована на C, C ++, Ada или Java. Тем не менее, только C и C ++ являются стандартными для ОС, Ada и Java поддерживаются расширениями. Wind River предоставляет огромное количество деталей о том, как и почему VxWorks .

Базовый чипсет почти абсурдно устойчив . На первый взгляд его характеристики могут показаться не такими уж большими, но разрешается иметь один и только один «синий экран» каждые 15 лет. Имейте в виду, это подвергается бомбардировке радиацией, которая много раз убивает человека. В космосе надежность выигрывает у скорости. Конечно, такая надежность имеет свою цену. В данном случае это круто от 200 000 до 500 000 долларов.

Программист Erlang рассказывает об особенностях компьютеров и кодовой базе на Curiosity.

Мировой инженер
источник
48
Стандарты кодирования языка JPL C, особенно для встраиваемых сред, а не для «наземного программного обеспечения», как они его называют. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Патрик Хьюз
80
@Dynamic: Это настолько важная миссия, что НАСА не будет рисковать. Люди, пишущие сборку, делают больше ошибок, это взвешенный факт.
MSalters
22
Скомпилированный код C - это машинный код, язык ассемблера - машинный код, я не вижу разницы. Там нет большой разницы в производительности, когда вы приступите к этому.
Ramhound
23
НАСА чрезвычайно осторожны со своим кодом. Все (ВСЕ) делается в спецификации в первую очередь и неоднократно проверяется, проверяется и уточняется. Когда он помещается в поток жизненного кода, это почти вырезка из ссылки на спецификацию. Сценариям тестирования уделяется как минимум столько же внимания, сколько и коду, и никакие «броские» или умные трюки кода не допускаются, если они не являются критически необходимыми.
Стефан
99
@ Amarghosh: да, и посмотрите, насколько хорошо работает ваш сотовый телефон, когда он проходит через среду с высокой радиацией, например, в космосе :)
whatsisname
175

Код основан на коде MER ( Spirit and Opportunity ), основанном на их первой платформе MPF ( Sojourner ). Это 3,5 миллиона строк C (большая часть из которых сгенерирована автоматически), работающих на процессоре RA50 производства BAE и операционной системе VxWorks . Более миллиона строк были закодированы вручную.

Код реализован в виде 150 отдельных модулей, каждый из которых выполняет свою функцию. Сильно связанные модули организованы в компоненты, которые абстрагируют содержащиеся в них модули и «задают конкретную функцию, действие или поведение». Эти компоненты далее организованы в слои, и в них «не более 10 компонентов верхнего уровня».

Источник: основной доклад Бенджамина Сичи на семинаре 2010 года по программному обеспечению полетов космических аппаратов (FSW-10) , слайдам, аудио и видео (начинается с обзора миссии, обсуждения архитектуры на слайде 80).


Кто-то из Hacker News спросил: «Не уверен, что означает, что большая часть кода C генерируется автоматически. Из чего?»

Я не уверен на 100%, хотя, вероятно, в этом году или в другом году есть отдельная презентация, описывающая процесс их автоматической генерации. Я знаю, что это была популярная тема в целом на конференции FSW-11.

Simulink это возможность. Это компонент MATLAB, популярный среди инженеров-механиков и, следовательно, большинства инженеров по навигации и управлению, который позволяет им «кодировать» и моделировать объекты, не думая, что они кодируют.

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

Третья и наиболее вероятная возможность для кода связи. Для всех космических систем вам необходимо отправлять команды программному обеспечению полета из наземного программного обеспечения, получать телеметрию от программного обеспечения полета и обрабатывать ее с помощью наземного программного обеспечения. Каждый пакет команд / телеметрии представляет собой гетерогенную структуру данных, и необходимо, чтобы обе стороны работали с одинаковым определением пакета, и отформатировали пакет так, чтобы он был правильно отформатирован на одной стороне и проанализирован на другой стороне. Это включает в себя правильное получение множества вещей, включая тип данных, размер и порядок байтов (хотя последний, как правило, глобален; у вас может быть несколько процессоров на борту с разными порядками байтов).

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

При этом гораздо проще (на мой взгляд) написать одну коллекцию статических текстовых файлов (в XML, CSV или некоторых DSL / что-у-вас-вы), запустить их через скрипт на Perl / Python и сделать это! Код!

Я не работаю в JPL, поэтому не могу предоставить какие-либо подробности, которых нет в видео, за одним исключением. Я слышал, что автоматически сгенерированный код C написан скриптами Python, и объем автокодирования в проекте сильно варьируется в зависимости от того, кто является руководителем FSW.

Нейт Парсонс
источник
8
Это может пролить некоторый свет на Wind River, подрядчика, который делает VxWorks: windriver.com/news/press/pr.html?ID=10901 Я читал, что у НАСА есть команда людей, чья работа состоит в том, чтобы находить столько ошибок, сколько они могут в коде системы управления, написанном другой командой. Команда по поиску ошибок вознаграждается за найденные ошибки, и они действительно хорошо умеют находить загадочные ошибки. При обнаружении ошибки выполняется анализ 5Y-типа, чтобы выяснить, как можно улучшить процесс разработки программного обеспечения, чтобы исключить возможность подобных ошибок в будущем. Очень кропотливый и дорогой процесс.
Джим Раден
15
@JimRaden Когда прямая стоимость ошибки для зонда составляет от нескольких сотен миллионов до нескольких миллиардов долларов и несколько лет (если вообще) для повторной попытки крайняя паранойя в QA оправдана. Косвенные затраты в виде десятков / сотен аспирантов, потерявших годы работы и вынужденных возобновить свою аспирантуру, и различных новых профессоров, которые рассчитывали на данные, полученные от нее, чтобы обеспечить свои исследования путей владения, - еще один серьезный удар, но гораздо труднее количественно, чем отдельные позиции в бюджете НАСА.
Дэн Нили,
1
Из чего был автоматически сгенерирован C? Пожалуйста, скажи мне, что это был не Симулинк. :-)
Уильям Пейн
2
@William Payne В основном заявлении говорится, что некоторые из них являются автоматически генерируемыми процедурами кодирования / декодирования протоколов (для связи с землей), сгенерированными программами python из описаний XML.
Нос
1
Автоматически генерировать код из ICD довольно круто. Мне нравится эта идея! Хотя я бы использовал YAML, а не XML. :-)
Уильям Пейн