Jak zaprogramowano sondę Curiosity

Rozmowa z Markiem Tuszyńskim, kierownikiem zespołu tworzącego oprogramowanie dla sondy Curiosity w Jet Propulsion Laboratory, która w listopadzie 2011 r. wystartowała z Ziemi, a 6 sierpnia 2012 r. wylądowała na Marsie.

Jak zaprogramowano sondę Curiosity

Czym dokładnie zajmował się Pana zespół w trakcie przygotowań do misji sondy Curiosity?

Moje stanowisko to Project Delivery Manager. Tworzyliśmy oprogramowania sterujące sondą zarówno podczas lotu i lądowania, jak i w trakcie misji na Marsie. Nasze oprogramowanie kieruje wszystkimi urządzeniami sondy - silnikami poruszającymi nią samą i poszczególnymi jej elementami, radarami, systemami multimedialnymi i tymi odpowiedzialnymi za komunikację z Ziemią. Pierwotnie sonda Curiosity miała wylecieć dwa lata wcześniej. Na czas nie było jednak gotowych wiele elementów, w tym oprogramowanie. W 2009 r. powierzono mi zadanie dokończenia tworzenia systemów sondy. Zaczęliśmy praktycznie od nowa - przepisaliśmy oprogramowanie, stworzyliśmy nowe procedury, od nowa opisane zostały też wymagania systemowe.

Jak powstaje oprogramowanie dla sondy, która ma wylądować na innej planecie? Na co musieli Państwo zwrócić uwagę?

Zobacz również:

  • Chcą zainstalować sieć światłowodową na Księżycu. "W imię nauki"

System fault protection w Curiosity ma zapobiegać problemom związanym z uszkodzeniami mechanicznymi. Wiele elementów sondy odpowiada za badanie jej samej - sprawdzanie, czy wszystko działa poprawnie. Jeśli coś jest nie tak, system sam decyduje jaki jest prawdopodobny problem uszkodzenia i jak go rozwiązać. Może np. wymienić jedną z części, albo wyłączyć uszkodzony moduł do czasu połączenia z Ziemią.

Podobnie, jak w tworzeniu każdego dedykowanego oprogramowania, jest kilka faz takiego projektu. Określamy najważniejsze wymagania i etapy. Decydujemy o architekturze, platformie i możliwościach systemu. W miarę prac wchodzimy w coraz większe detale. System zarządzający Curiosity został podzielony aż na 154 moduły! Każdy tworzył inny zespół, który przygotowane wcześniej wymagania przekłada na konkretne elementy systemu - strukturę danych, procedury. To najbardziej skomplikowany projekt zrealizowany w Jet Propulsion Laboratory. Systemy sterujące pracą sond stają się bowiem coraz bardziej skomplikowane. Dotyczy to np. rozwiązań do przechowywania plików. W sondzie Cassini - przy tworzeniu oprogramowania, dla której także pracowałem - było tylko ok. 30 modułów. Każdy kontrolował inny jej element. Ja odpowiadałem za system sterowania, który decydował o tym, w którym kierunku Cassini się porusza, gdzie patrzy, co fotografuje.

Po napisaniu każdego z modułów systemu Curiosity, w kolejnym etapie sprawdzaliśmy to, co powstało. Osoby tworzące jeden z elementów oprogramowania Curiosity sprawdzały pracę innych kolegów i odwrotnie. Do testów wykorzystaliśmy także oprogramowanie klasy SCA (Static Code Analysis), znacznie bardziej zaawansowane od kompilatorów kodu. Po tym etapie łączyliśmy wszystkie moduły w gotowe systemy. Kolejny test był przeprowadzony albo na docelowym urządzeniu, albo w środowisku wirtualnym. W ostatnim etapie zainstalowaliśmy oprogramowanie na poszczególnych elementach sondy Curiosity, a później złożyliśmy całą sondę i przetestowaliśmy różne scenariusze, które mogą ją spotkać w trakcie misji.

Dlaczego po wylądowaniu przez 20 godzin wgrywano nowe oprogramowanie dla Curiosity? Jak często będzie aktualizowane oprogramowanie sondy w czasie jej ponad dwuletniej misji?

Fakty o oprogramowaniu sondy Curiosity

154 modułów oprogramowania zarządzającego sondą powstało w ciągu trzech lat pracy nad nią. To jeden z największych projektów w Jet Propulsion Laboratory. Jest ich tak dużo, bo tak wiele instrumentów ma na pokładzie Curiosity. Tak naprawdę można powiedzieć, że składają się na nią trzy sondy: na czas przelotu, lądowania i do badania Marsa.

750 tys. linii kodu zostało napisanych przez programistów NASA. Marek Tuszyński liczy tylko te, napisane ręcznie, bez linii kodu z komentarzami, czy generowanych automatycznie.

Język programowania C wykorzystano do stworzenia oprogramowania kierującego sondą.

BAE RAD 750 - to komputer sterujący Curiosity ze zintegrowana płytą główną z procesorem Power PC 133 MHz, 256 kB pamięci podręcznej EEPROM, 256 MB DRAM pamięci operacyjnej oraz 2 GB pamięci Flash.

VxWorks firmy Wind River - to system operacyjny sondy.

40 Mb/s - to docelowa prędkość transmisji danych z Ziemią. Po wylądowaniu było to 5 Mb/s.

W czasie lotu po prostu pojawiła się kolejna wersja oprogramowania. Ono właściwie nieustannie się zmienia. Poprzednia jego wersja została załadowana siedem miesięcy przed lądowaniem Curiosity. Dodatkowo niektóre elementy - niepotrzebne w czasie lotu i lądowania - nie były jeszcze skończone, przetestowane, czy wręcz napisane. Dotyczyło to głównie modułów niezbędnych do prowadzenia misji już na powierzchni Marsa. Kolejne testy spowodowały także, że w już gotowych elementach oprogramowania Curiosity pojawiło się wiele poprawek.

W czasie misji tej sondy ogranicza nas też pojemność pamięci. W ramach uaktualnienia oprogramowania wykasowaliśmy więc zbędne już elementy, a załadowaliśmy dodatkowe moduły odpowiedzialne za nawigację po Czerwonej Planecie, czy unikanie przeszkód, na które może napotkać Curiosity. Wymagają one sporo miejsca. Do tego celu można więc wykorzystać zwolnioną pamięć.

Kiedy więc Curiosity ruszy z miejsca?

Za około tydzień. Na początek na krótkim dystansie, aby skalibrować moduł odpowiedzialny za ruch.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200