Jakie jest wbudowane oprogramowanie Mars Curiosity Rover?

544

Mars Curiosity Rover wylądował pomyślnie, a jeden z filmów promocyjnych „7 minut terroru” przechwala się tam będąc 500.000 linii kodu. To bez wątpienia skomplikowany problem. Ale to dużo kodu, na pewno było za tym sporo wysiłku programistycznego. Czy ktoś wie coś o tym projekcie? Mogę sobie tylko wyobrazić, że jest to jakiś osadzony C.

InfinitiesLoop
źródło
91
Dlaczego miałoby się zakładać, że w projekt zaangażowany jest tylko jeden język?
Rig
5
Chodzi o to, pewnie, że prawdopodobnie wiąże się z tym szeroki zakres technologii. Chcę wiedzieć więcej o tym wszystkim :)
InfinitiesLoop
3
Która część? Statek kosmiczny? Łazik? Instrumenty? System naziemny? Jak wskazują inne komentarze, w różnych komponentach prawdopodobnie znajduje się kilka języków. Nie jest wykluczone, że asembler był używany w niektórych krytycznych dla czasu komponentach.
GreenMatt,
67
Szczerze mówiąc, kiedy zobaczyłem postać 500kloc, złapałem się na myśleniu „Tylko?” Mogłoby to być realistyczne, gdyby to był Haskell, ale po przeczytaniu trochę o poprzednich projektach i ich językach niskiego poziomu, wydawało się to zbyt niskie. Cytowany poniżej kod 2,5 mln loc C jest bardziej wiarygodny.
Philip Kamenarsky,
19
Bardziej interesujące pytanie, które „w jakim języku?” to „z jakim procesem?” . To proces robi różnicę, a NASA stosuje rygorystyczny od dziesięcioleci.
dmckee,

Odpowiedzi:

506

Obsługuje 2,5 miliona linii C na procesorze RAD750 produkowanym przez BAE . JPL ma nieco więcej informacji, ale ja podejrzewam, wiele szczegółów nie są nagłaśniane. Wygląda na to, że skrypty testowe zostały napisane w języku Python.

Podstawowym systemem operacyjnym jest VxWorks RTOS firmy Wind River . RTOS w pytaniu można programować w C, C ++ lub Java, Ada. Jednak tylko C i C ++ są standardem w systemie operacyjnym, Ada i Java są obsługiwane przez rozszerzenia. Wind River dostarcza ogromną ilość szczegółów, jak i jak VxWorks .

Podstawowy mikroukład jest prawie absurdalnie solidny . Jego specyfikacja może początkowo wydawać się niewielka, ale co 15 lat może mieć tylko jeden „niebieski ekran”. Pamiętaj, że jest to bombardowane przez promieniowanie, które zabiłoby człowieka wiele razy. W kosmosie wytrzymałość wygrywa z prędkością. Oczywiście taka wytrzymałość wiąże się z pewnymi kosztami. W tym przypadku jest to od 200 000 do 500 000 USD.

Programista Erlang mówi o funkcjach komputerów i bazy kodów w Curiosity.

Inżynier świata
źródło
48
Standardy kodowania języka JPL C, specjalnie dla środowisk osadzonych zamiast „naziemnego oprogramowania”, jak to nazywają. lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
Patrick Hughes
80
@Dynamic: To tak ważna misja, że ​​NASA nie zaryzykuje. Ludzie piszący asembler popełniają więcej błędów, to wymierzony fakt.
MSalters
22
Skompilowany kod C to kod maszynowy, asembler to kod maszynowy, nie widzę różnicy. Gdy do tego dojdzie, nie ma dużej różnicy w wydajności.
Ramhound,
23
NASA są wyjątkowo ostrożni ze swoim kodem. Wszystko (WSZYSTKO) jest wykonywane najpierw w specyfikacji i jest wielokrotnie sprawdzane, sprawdzane i udoskonalane. Po umieszczeniu w strumieniu kodu życia jest to prawie wycięcie i wklejenie odwołania do specyfikacji. Skrypty testowe są poświęcane co najmniej tyle samo uwagi co kod i nie są dozwolone żadne „błyskotliwe” lub sprytne sztuczki kodu, chyba że są one krytycznie potrzebne.
Stefan
99
@Amarghosh: tak, i zobacz, jak dobrze działa Twój telefon komórkowy, gdy przechodzi przez środowisko o wysokim promieniowaniu, takie jak przestrzeń kosmiczna :)
whatsisname
175

Kod oparty jest na kodzie MER ( Spirit and Opportunity ), które zostały oparte na ich pierwszym lądowniku, MPF ( Sojourner ). To 3,5 miliona linii C (w większości generowanych automatycznie), działających na procesorze RA50 wyprodukowanym przez BAE i system operacyjny VxWorks . Ponad milion linii zostało ręcznie zakodowanych.

Kod jest zaimplementowany jako 150 oddzielnych modułów, z których każdy pełni inną funkcję. Silnie sprzężone moduły są zorganizowane w komponenty, które wyodrębniają zawarte w nich moduły i „określają konkretną funkcję, działanie lub zachowanie”. Te komponenty są dalej zorganizowane w warstwy, a „nie ma więcej niż 10 komponentów najwyższego poziomu”.

Źródło: Keynote talk by Benjamin Cichy podczas warsztatów 2010 na temat oprogramowania lotów kosmicznych (FSW-10) , slajdy, audio i wideo (zaczyna się od przeglądu misji, dyskusji na temat architektury na slajdzie 80).


Ktoś w Hacker News zapytał „Nie jestem pewien, co oznacza, że ​​większość kodu C jest generowana automatycznie. Z czego?”

Nie jestem w 100% pewien, chociaż prawdopodobnie w tym roku lub innym roku jest osobna prezentacja opisująca proces ich automatycznego generowania. Wiem, że był to ogólnie popularny temat na konferencji FSW-11.

Simulink to możliwość. Jest to komponent MATLAB popularny wśród inżynierów mechaników, a zatem większości inżynierów do nawigacji i sterowania, i pozwala im „kodować” i symulować rzeczy bez myślenia, że ​​kodują.

Programowanie oparte na modelach jest zdecydowanie rzeczą, o której przemysł powoli zaczyna zdawać sobie sprawę, ale nie wiem, jak dobrze radzi sobie w JPL lub czy zdecydowaliby się go użyć na początku projektu.

Trzecią i najbardziej prawdopodobną możliwością jest kod komunikacyjny. We wszystkich systemach kosmicznych musisz wysyłać polecenia do oprogramowania lotu z oprogramowania naziemnego, odbierać dane telemetryczne z oprogramowania lotu i przetwarzać je za pomocą oprogramowania naziemnego. Każdy pakiet komend / telemetrii jest heterogeniczną strukturą danych i konieczne jest, aby obie strony pracowały na podstawie dokładnie tej samej definicji pakietu i sformatowały pakiet, aby był poprawnie sformatowany z jednej strony i przeanalizowany z drugiej. Wymaga to uporządkowania wielu rzeczy, w tym typu danych, rozmiaru i endianizmu (chociaż ta ostatnia jest zwykle kwestią globalną; możesz mieć na pokładzie wiele procesorów o różnej endianizacji).

Ale to tylko powierzchowność. Potrzebujesz wielu powtarzających się kodów po obu stronach, aby obsłużyć takie rzeczy, jak rejestrowanie, sprawdzanie poprawności poleceń / telemetrii, sprawdzanie limitu i obsługa błędów. A potem możesz robić bardziej wyrafinowane rzeczy. Załóżmy, że masz polecenie ustawienia wartości rejestru sprzętowego, a ta wartość jest wysyłana z powrotem w telemetrii w określonym pakiecie. Można wygenerować oprogramowanie naziemne, które monitoruje ten punkt telemetrii, aby upewnić się, że po ustawieniu tej wartości rejestru telemetria zmieni się w celu odzwierciedlenia zmiany. I oczywiście niektóre punkty telemetryczne są ważniejsze niż inne (np. Główny prąd magistrali) i są przeznaczone do zejścia w wielu pakietach, co wymaga dodatkowego kopiowania po stronie lotu i duplikacji danych po stronie naziemnej.

Mając to wszystko o wiele łatwiej (moim zdaniem) napisać jedną kolekcję statycznych plików tekstowych (w formacie XML, CSV lub niektórych DSL / what-have-you), uruchomić je za pomocą skryptu Perl / Python i presto! Kod!

Nie pracuję w JPL, więc nie mogę podać żadnych szczegółów, których nie ma w filmie, z jednym wyjątkiem. Słyszałem, że automatycznie generowany kod C jest napisany przez skrypty Pythona, a ilość automatycznego kodowania w projekcie różni się znacznie w zależności od tego, kto prowadzi FSW.

Nate Parsons
źródło
8
To może rzucić nieco światła na Wind River, wykonawcę, który tworzy VxWorks: windriver.com/news/press/pr.html?ID=10901 Czytałem, że NASA ma zespół ludzi, których zadaniem jest znalezienie tylu błędów, ile mogą w kodzie systemu sterowania napisanym przez inny zespół. Zespół szukający błędów jest nagradzany za znalezione błędy i są naprawdę całkiem dobrzy w znajdowaniu tajemnych błędów. Po znalezieniu błędu przeprowadzana jest analiza typu 5Y, aby dowiedzieć się, jak można ulepszyć proces tworzenia oprogramowania, aby wyeliminować możliwość wystąpienia podobnych błędów w przyszłości. Bardzo żmudny i drogi proces.
Jim Raden,
15
@JimRaden Gdy bezpośredni koszt awarii sondy wynosi od kilkuset milionów do kilku miliardów dolarów i kilka lat (jeśli w ogóle) na ponowienie próby ekstremalna paranoja w kontroli jakości jest uzasadniona. Pośrednie koszty w postaci dziesiątek / setek studentów tracących lata pracy i zmuszających do wznowienia pracy doktorskiej oraz różnych nowych profesorów, którzy liczyli na dane z tego źródła w celu dostarczenia wyników badań kadrowych, to kolejny poważny hit, ale o wiele trudniejszy określić ilościowo niż pozycje w budżecie NASA.
Dan Neely,
1
Z czego automatycznie wygenerowano C? Powiedz mi, że to nie był Simulink. :-)
William Payne,
2
@William Payne Keynote stwierdza, że ​​niektóre z nich to automatycznie generowane procedury kodowania / dekodowania protokołu (do komunikacji z ziemią), generowane przez programy pythonowe z opisów XML.
nos
1
Automatyczne generowanie kodu z ICD jest całkiem fajne. Podoba mi się ten pomysł! Wolałbym jednak użyć YAML niż XML. :-)
William Payne