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

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

525 голосов | спросил InfinitiesLoop 6 AM00000080000004831 2012, 08:04:48

2 ответа


488

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

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

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

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

ответил World Engineer 6 AM00000080000001131 2012, 08:30:11
171

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

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

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


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

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

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

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

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

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

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

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

ответил Nate Parsons 6 PM00000060000005931 2012, 18:34:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132