У чому вбудовано програмне забезпечення Mars Curiosity Rover?


544

Марс Curiosity марсохід успішно приземлився, і один з промо - відео «7 хвилин жаху» хвалиться там бути 500000 рядків коду. Це складна проблема, без сумніву. Але це дуже багато коду, безумовно, за ним стояло досить велике зусилля програмування. Хтось знає щось про цей проект? Я можу лише уявити, що це якась вбудована С.


91
Чому можна припустити, що в проекті бере участь лише одна мова.
Риг

5
Хороший момент, звичайно, це, мабуть, широта технологій, пов'язаних з цим. Я хочу дізнатися більше про все це :)
InfinitiesLoop

3
Яка частина? Космічний апарат? Ровер? Інструменти? Наземна система? Як свідчать інші коментарі, в різних компонентах, ймовірно, існує кілька мов. Не викликає сумніву, що асемблер використовувався для деяких критично важливих для часу компонентів.
GreenMatt

67
Якщо чесно, то побачивши фігуру в 500клоків, я зловив себе, думаючи "Тільки?" Це могло бути реалістично, якби це було Haskell, але, прочитавши трохи про попередні проекти та їхні мови низького рівня, це здавалося занадто низьким. Приведений нижче код кодування 2.5mio локального С є більш правдоподібним.
Філіп Каменарський

19
Більш цікаве питання, що "якою мовою?" це «з яким процесом?» . Саме цей процес має велике значення, і НАСА вже десятиліттями використовує суворий.
dmckee

Відповіді:


506

Він працює на 2,5 мільйона ліній C на процесорі RAD750 виробництва BAE . JPL має трохи більше інформації , але я підозрюю , що багато деталей не розголошують. Здається, сценарії тестування були написані в Python.

Основною операційною системою є VxWorks RTOS від Wind River . Розглянутий RTOS можна запрограмувати на C, C ++, Ada або Java. Однак стандартні для ОС тільки C і C ++, Ада та Java підтримуються розширеннями. Wind River надає величезну кількість деталей щодо того, як виходити і хотіти VxWorks .

Основний чіпсет майже абсурдно надійний . Спочатку його характеристики можуть здатися не дуже схожими, але дозволяється мати один і лише один "блюскрін" на кожні 15 років. Майте на увазі, це знаходиться під обстрілами від радіації, яка вбивала б людину багато разів. У космосі надійність виграє над швидкістю. Звичайно, така надійність приходить дорожче. У цьому випадку це круті від 200 000 до 500 000 доларів.

Програміст Erlang розповідає про особливості комп’ютерів та кодової бази в Curiosity.


48
Стандарти кодування мови JPL C, спеціально для вбудованих середовищ замість "наземного програмного забезпечення", як вони це називають. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes

80
@Dynamic: Це така важлива місія, що НАСА не ризикувала б. Люди, що пишуть складання, роблять більше помилок, це мірний факт.
MSalters

22
Скомпільований код C - це машинний код, мова складання - це машинний код, я не бачу різниці. Немає великої різниці в продуктивності, коли ти переходиш до цього.
Рамхаунд

23
NASA надзвичайно обережні зі своїм кодом. Все (ВСЕ) робиться в специфікації спочатку і неодноразово переглядається, перевіряється та уточнюється. Коли його вводять у потік життєвого коду, це майже вирізання та вставка посилання специфікації. Тестовим сценаріям приділяється як мінімум стільки уваги, скільки коду, і не допускаються «кричущі» чи хитрі хитрощі, якщо вони критично не потрібні.
Стефан

99
@Amarghosh: Так, і подивіться, наскільки добре працює ваш мобільний телефон, коли він проходить через середовище з високою радіацією, наприклад, космос :)
whatsisname

175

Код ґрунтується на принципі MER ( Spirit and Opportunity ), який базувався на першому землевласнику, MPF ( Sojourner ). Це 3,5 мільйони ліній С (значна частина його автогенерована), що працює на RA50-процесорі виробництва BAE та операційної системи VxWorks . Понад мільйон ліній було кодовано вручну.

Код реалізований у вигляді 150 окремих модулів, кожен з яких виконує різні функції. Сильно зв'язані модулі організовані в компоненти, які абстрагують модулі, які вони містять, і "задають або конкретну функцію, діяльність або поведінку". Ці компоненти далі організовані в шари, і їх "не більше 10 компонентів верхнього рівня".

Джерело: Основна бесіда Бенджаміна Кіші на семінарі-практикумі з програмного забезпечення польотів космічних кораблів 2010 року (FSW-10) , слайдів, аудіо та відео (починається з огляду місії, обговорення архітектури на слайді 80).


Хтось із новин Hacker News запитав "Не впевнений, що означає, що більшість кодів C створюється автоматично. З чого?"

Я не впевнений на 100%, хоча, ймовірно, є окрема презентація в тому році чи іншому році, яка описує процес їх автоматичного генерування. Я знаю, що це була популярна тема взагалі на конференції ЖКС-11.

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

Модельне програмування - це, безумовно, річ, про яку галузь поступово усвідомлює, але я не знаю, наскільки добре це стосується JPL або якщо вони вирішили би використовувати її під час запуску проекту.

Третя і найімовірніша можливість - це код зв'язку. З усіма космічними системами вам потрібно надсилати команди до польотного програмного забезпечення від наземного програмного забезпечення та отримувати телеметрію від польотного програмного забезпечення та обробляти його наземним програмним забезпеченням. Кожен пакет команд / телеметрії є неоднорідною структурою даних, і необхідно, щоб обидві сторони працювали з точно однакового визначення пакету, і відформатували пакет так, щоб він був правильно відформатований з однієї сторони і проаналізований з іншого боку. Це передбачає правильну роботу багатьох речей, включаючи тип даних, розмір та витривалість (хоча останні зазвичай є глобальною річчю; у вас може бути кілька процесорів на борту з різною витривалістю).

Але це лише поверхня. Вам потрібно багато повторюваних кодів з обох сторін, щоб обробляти такі речі, як реєстрація, перевірка команд / телеметрії, перевірка меж та обробка помилок. І тоді ви можете робити більш складні речі. Скажімо, у вас є команда встановити значення апаратного регістра, і це значення буде відправлено назад в телеметрії в певному пакеті. Ви можете створити наземне програмне забезпечення, яке відстежує цю точку телеметрії, щоб гарантувати, що коли встановлено це значення регістру, з часом телеметрія зміниться, щоб відобразити зміни. І звичайно, деякі точки телеметрії важливіші за інші (наприклад, струм основної шини) і призначені для спускання в декількох пакетах, що передбачає додаткове копіювання на стороні польоту та дедублювання даних наземній стороні.

З усім цим набагато простіше (на мою думку) написати одну колекцію статичних текстових файлів (у XML, CSV або деяких DSL / що-у вас є), запустити їх через сценарій Perl / Python та presto! Код!

Я не працюю в JPL, тому я не можу надати жодної деталі, яка відсутня у відео, за одним винятком. Я чув, що автогенерований код C записується сценаріями Python, і кількість автокодування в проекті сильно змінюється в залежності від того, хто веде FSW.


8
Це може пролити трохи світла на Wind River, підрядника, який виробляє VxWorks: windriver.com/news/press/pr.html?ID=10901 Я читав, що NASA має команду людей, завдання якої - знайти стільки помилок, скільки вони можуть в коді системи управління, написаному іншою командою. Команда пошуку помилок винагороджується за виявлені помилки, і вони дуже добре знаходять таємні помилки. Коли виявлено помилку, робиться аналіз типу 5Y, щоб з’ясувати, як можна було вдосконалити процес розробки програмного забезпечення, щоб виключити можливість подібних помилок у майбутньому. Дуже кропіткий і дорогий процес.
Джим Раден

15
@JimRaden Коли пряма вартість відмови для зонда становить від декількох сотень мільйонів до декількох мільярдів доларів і кілька років (якщо взагалі є) для повторної спроби екстремальної параної в QA виправдано. Непрямі витрати у формі десятків / сотень студентів, які втрачають роки роботи та потребують перезавантаження на докторських роботах та різних нових професорів, які розраховували на дані з неї, щоб поставити свої наукові роботи, є ще одним важливим хітом, але набагато складніше кількісно визначити, ніж позиції у бюджеті NASA.
Ден Нелі

1
З чого був створений автоматичний C? Скажіть, будь ласка, що це не Симулінк. :-)
Вільям Пейн

2
@William Payne Основна записка стверджує, що деякі з них є автоматизованим протоколом кодування / декодування підпрограм (для зв'язку з землею), породжених програмами python з описів XML.
Н.З.К.

1
Автоматично генеруючи код з МКБ начебто класно. Мені подобається ідея! Я б використовував YAML, а не XML. :-)
Вільям Пейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.