Linux na Marsu- Kako pisati softver za svemirske misije?

Linux na Marsu- Kako pisati softver za svemirske misije?

Što koristi NASA za interplanetarni softver?

Datum 19.2.2021. godinama ćemo pamtiti po dvije informacije koje su tog dana eksplodirale u medijima. Prva se odnosila na odlazak Balaševića (po nekima najpopularnijeg kantautora ove regije) u neku drugu dimenziju, a druga na spuštanje novog NASA-inog tehnološkog čuda, rovera Perseverance, na Mars.

Na prvi pogled, u mediju IT orijentacije kakav je VIDI nema baš previše mjesta ni za jednu od navedenih vijesti. I zaista je tako - kad ne bi bilo jednog detalja. Da bi rover i njegov „leteći dodatak“ Ingenuity mogli normalno funkcionirati na Marsu, osim samog hardvera potreban je i odgovarajući softver. A tu već dolazimo na teren kojeg pokriva ovaj časopis.
Prije nego malo detaljnije zagrebemo po glavnoj temi današnjeg teksta, spomenut ćemo dva vrlo bitna detalja u pozadini cijele priče oko izrade softvera za naprave namijenjene korištenju na drugim svjetovima. Tako dugo dok se po ugledu na „Zvjezdane staze“ ne uvede „potprostorno komuniciranje“, najkraće vrijeme potrebno da bi se signal prenio između Zemlje i Marsa (što ovisi o trenutnoj međusobnoj udaljenosti planeta) je oko 11 minuta. Što znači da bilo koji uređaj na Marsu ne može funkcionirati tako da njime izravno upravlja operater sa Zemlje i rješava probleme. Umjesto toga mora posjedovati veliki stupanj autonomnosti kako bi se sam snalazio na drugom planetu, a to neminovno utječe na način izrade softvera za takve uređaje.

programiranje za mars1

F' biblioteka koju koristi NASA, a možete ju koristiti i u vlastitim projektima


Drugi vrlo bitan detalj za razvoj softvera za različite „svemirske uređaje“ je hardver zadužen za izvođenje takvog softvera. Iako dio čitatelja sigurno misli kako se sve svemirske letjelice, roveri i ostalo što putuje svemirom oprema najnovijim procesorima i ostalim dijelovima računala (to jest zadnjim krikovima tehnike na području hardvera), istina je u pravilu potpuno drugačija. Za uređaje namijenjene putovanjima kroz svemir u trajanju od više mjeseci, ili još češće više godina, vrijede neka sasvim druga pravila. Od same procesorske snage zapravo je mnogo bitnije da hardver može preživjeti vrlo teške uvjete rada kakvi vladaju tijekom svemirskih putovanja (zračenja, velike promjene temperature i gravitacije, vibracije i ostalo).
Zato se u pravilu za ovakve situacije koristi nešto (ili dosta) stariji, ali vrlo pouzdan hardver provjeren u kompliciranim uvjetima korištenja. Nije uopće neobično da današnji top modeli mobitela imaju mnogo veću procesorsku snagu po bitno manjoj cijeni nego letjelice koje putuju svemirom. Ali zato takvi zastarjeli procesori, memorije i ostali hardverski dijelovi normalno rade tijekom čitavog planiranog vremena ekspedicije, a nerijetko i godinama duže od planiranog, što su višestruko dokazale prethodne NASA-ine ekspedicije. S druge strane, kad bi na višegodišnje putovanje svemirom poslali najnapredniji Appleov, Samsungov ili neki drugi mobitel, na cilj bi skoro sigurno stigao samo potpuno beskoristan komad vrlo naprednog hardvera!
Ako vas tema o korištenju procesora u svemirskih istraživanjima i problemi koji se pri tome pojavljuju zanima detaljnije, vrlo zanimljive informacije možete pronaći na sljedećoj web adresi: https://arstechnica.com/science/2019/11/space-grade-cpus-how-do-you-send-more-computing-power-into-space/

Operativni sustavi i razvojni alati

Sve dosad napisano ne znači da se mobiteli ili laptop računala ne koriste u svemiru. Baš naprotiv - u uvjetima gdje normalno može živjeti i djelovati ljudska posada (npr. svemirska stanica u orbiti oko zemlje), najnormalnije se koriste Windows, Mac, Android ili iPhone rješenja. Ako ni zbog čega drugog, onda zato da astronauti mogu pisati mailove u svojim omiljenim alatima ili reproducirati multimedijalne sadržaje na mobilnim uređajima za smanjivanje stresa zbog boravka u svemiru. Treba primijetiti i to da prema brojnim iskustvenim pokazateljima (iako nisu provedena baš detaljna istraživanja o toj temi) takvi uređaji zbog utjecaja okoline ipak imaju kraći vijek trajanja nego isti takvi uređaji na površini zemlje.
Kad se sve do sada navedeno uzme u obzir, što zapravo ostaje NASA-i za izbor operativnog sustava i razvojnih alata? Odgovor se nameće skoro sam od sebe - to nije neki ultranapredni operativni sustav čije se širenje među svekolikim pučanstvom bolje nadzire nego proboj nekog humanog virusa iz biokemijskih laboratorija (nismo spomenuli nikakav konkretan virus, tako da se ne pozivate na VIDI kod budućih teorija zavjere), nego dobri, stari Linux.

programiranje za mars2

Organizacija projekta: Primjer hijerarhije komponenti tijekom korištenja F' sustava


Prednosti korištenja Linuxa u svemirskim istraživanjima su višestruke. Riječ je o dobro provjerenom operativnom sustavu koji se može skoro u svakoj pojedinosti prilagoditi posebnim potrebama, ne zahtijeva prevelike resurse za rad na starijem hardveru, a poznaje ga dovoljan broj programera da piše softver za njega. Ne treba zaboraviti ni na činjenicu da je u javnom vlasništvu, pa ne može doći do međuplanetarnih trzavica kad započne ozbiljnija kolonizacija Marsa, a neka softverska kompanija se sjeti da se pri tome koristi njezin operativni sustav.
Kako korištenje Linuxa i pratećih razvojnih alata izgleda na konkretnom primjeru pokazat ćemo na primjeru već prije spomenutog „letećeg dodatka“ zadnjoj misiji na Mars. Riječ je o malom helikopteru Ingenuity, koji se u misiji prije svega našao kao demonstracija mogućnosti korištenja takve tehnologije na drugoj planeti. Riječ je o prvoj zemaljskoj letjelici namijenjenoj letu na drugoj planeti s bitno drugačijim uvjetima od zemaljskih u pogledu gustoće atmosfere (svega 1% zemljine) i gravitacije (oko 38% zemljine). Ne treba smetnuti s uma ni samostalnost u radu zbog ranije spomenute odgode u komunikaciji od 11 minuta. Masa cjelokupne letjelice je 1.8 kg, što znači da nema baš previše mjesta ni za IT dio. Procesor ugrađen u helikopterić je Snapdragon 801 na 2.2 Ghz. Sa stanovišta procesorske snage to nije ništa posebno, ali je sasvim u skladu s ranije objašnjenim načinom biranja hardvera u NASA-i (pouzdanost prije svega).

Ingenuity, Linux i F’

Operativni sustav koji se izvodi na takvom hardveru je Linux, a aplikativni dio je napisan pomoću dodatne biblioteke F´ (izgovara se F prime). Riječ je o biblioteci razvijenoj za vlastite potrebe od strane JPL-a (Jet Propulsion Laboratory) i namijenjenoj za korištenje pomoću programskih jezika C++ i/ili Python. Prije trenutne ekspedicije na Mars biblioteka je već korištena u većem broju svemirskih projekata, tako da je provjerena i dokazana u praksi, što je ponovo vrlo važan parametar kod odabira.

Ono što je svakako vrlo zanimljivo je to da je biblioteka u međuvremenu postala javno dostupna svim zainteresiranim programerima za vlastite projekte (https://nasa.github.io/fprime/). A kad je dobra za NASA-u, vjerojatno neće ni ostalim programerima stvarati previše problema u praksi, čak i ako radite projekte koji se ne koriste izvan matičnog planeta.
Preduvjeti za korištenje biblioteke nisu ništa posebno - računalo s nekom od novijih verzija Mac OS-a ili Linuxa, a čak se možete provući i s Windows računalom, ako je na njemu instaliran WSL (Windows Subsystem for Linux). Osim operativnog sustava, za razvoj je potrebno imati instalirane sljedeće komponente: CMake (https://cmake.org/download/), Bash, program prevoditelj za C++ (npr. GCC) i Python 3 i PIP (https://www.python.org/downloads/)
Biblioteka F´je prije svega namijenjena upravljanju različitim vrstama uređaja spojenih na računalo kakvi su uobičajeni kod svemirskih istraživanja. Sastoji se od većeg broja međusobno nezavisnih komponenti i portova (veza za prijenos podataka). Komponente se mogu zamijeniti drugim sličnim komponentama čak i tijekom izvođenja programa, a komponenta korištena u jednom aplikaciji može se jednostavno koristiti u nekoj drugoj aplikaciji za istu namjenu.

U F´-u su osim samih biblioteka za podršku vlastitim aplikacijama uključeni moduli za generiranje „kostura“ nove aplikacije, koji se nakon toga nadopunjuju posebnim kodom za pojedinu konkretnu namjenu (to je posao programera na određenom projektu). U osnovni kostur aplikacije automatski se uključuju dijelovi za upravljanje nitima, komunikaciju između komponenti, pa čak i daljinsko slanje naredbi ili telemetriju. Naravno, u F´ su uključeni i moduli za provođenje različitih vrsta testiranja, kako na razvojnim računalima, tako i na stvarnim uređajima koji će se koristiti u svemirskim istraživanjima.

Prilikom razvoja vodilo se računa o tome da se maksimalno iskoristi postojeći hardver (podsjećamo još jednom da to u pravilu nije najjači hardver najnovije generacije) te da sve skupa bude lako prenosivo među širokim spektrom mikroprocesora - od najjednostavnijih mikrokontrolera do višejezgrenih ili višeprocesorskih jedinica.
Kod rada na novom projektu prvo se pripremi XML shema, na temelju koje se generira kostur projekta. Osim izravne pripreme , kako bi se ista stvar napravila na vizualno orijentirani način.
Primjer XML datoteke na temelju koje se generira F´projekt za primanje signala s GPS prijemnika naveden je u nastavku.

<?xml version=”1.0” encoding=”UTF-8”?>
<?xml-model href=”../../Autocoders/schema/ISF/component_schema.rng” type=”application/xml” schematypens=”http://relaxng.org/ns/structure/1.0”?>
<!-- GPS Tutorial: GpsComponentAi.xml

This is the design of GPS component. The goal is to read GPS messages from a UART port, and produce Events, and
Telemetry that represent the GPS link. This will also have a command to emit the lock status of the GPS signal. This
is an active component, meaning it will have it’s own thead. It will therefore process messages at its own pace, and
will not need an external thread of execution to run on.

It has 3 standard command ports, 2 standard event ports, 1 standard telemetry port, and 2 ports to interact with the
serial driver.
-->

<component name=”Gps” kind=”active” namespace=”GpsApp” modeler=”true”>
<!-- Import command ports -->
<import_port_type>Fw/Cmd/CmdPortAi.xml</import_port_type>
<import_port_type>Fw/Cmd/CmdRegPortAi.xml</import_port_type>
<import_port_type>Fw/Cmd/CmdResponsePortAi.xml</import_port_type>
<!-- Import event ports -->
<import_port_type>Fw/Log/LogPortAi.xml</import_port_type>
<import_port_type>Fw/Log/LogTextPortAi.xml</import_port_type>
<!-- Import telemetry ports -->
<import_port_type>Fw/Tlm/TlmPortAi.xml</import_port_type>
<!-- Import ports for serial driver -->
<import_port_type>Drv/SerialDriverPorts/SerialReadPortAi.xml</import_port_type>
<import_port_type>Fw/Buffer/BufferSendPortAi.xml</import_port_type>
<!-- Import command, telemetry, and event dictionaries -->
<import_dictionary>GpsApp/Gps/Commands.xml</import_dictionary>
<import_dictionary>GpsApp/Gps/Telemetry.xml</import_dictionary>
<import_dictionary>GpsApp/Gps/Events.xml</import_dictionary>

<ports>
<!-- Command port definitions: command input receives commands, command reg out, and response out are
ports used to register with the command dispatcher, and return responses to it -->
<port name=”cmdIn” data_type=”Fw::Cmd” kind=”input” role=”Cmd” max_number=”1”>
</port>
<port name=”cmdRegOut” data_type=”Fw::CmdReg” kind=”output” role=”CmdRegistration” max_number=”1”>
</port>
<port name=”cmdResponseOut” data_type=”Fw::CmdResponse” kind=”output” role=”CmdResponse” max_number=”1”>
</port>
<!-- Event ports: send events, and text formatted events -->
<port name=”eventOut” data_type=”Fw::Log” kind=”output” role=”LogEvent” max_number=”1”>
</port>
<port name=”textEventOut” data_type=”Fw::LogText” kind=”output” role=”LogTextEvent” max_number=”1”>
</port>
<!-- Telemetry ports -->
<port name=”tlmOut” data_type=”Fw::Tlm” kind=”output” role=”Telemetry” max_number=”1”>
</port>
<!-- Serial ports: one to receive serial data, and one to provide buffers for the serial driver to use -->
<port name=”serialRecv” data_type=”Drv::SerialRead” kind=”async_input” max_number=”1”>
</port>
<port name=”serialBufferOut” data_type=”Fw::BufferSend” kind=”output” max_number=”1”>
</port>
</ports>
</component>

Sasvim u duhu vremena podržana je mogućnost korištenja sustava u kombinaciji s programskim jezikom Python. Osim općepoznate činjenice da danas praktično svaki sustav koji „drži do sebe“ jednostavno mora imati mogućnost korištenja u Pythonu, ovakav pristup doista omogućava i stručnjacima, koji nisu profesionalni C++ programeri, da sudjeluju u „istraživanju svemira“.
O tome kako je F’ korišten za pripremu softvera za „helikopterić“ (s prilično detaljnim objašnjenjima pojedinih dijelova koda) možete pogledati na odgovarajućem video predavanju na web adresi:

Zaključak

Nadamo se da vam je prethodni tekst bar djelomično dočarao kako i zašto NASA priprema softver za vlastite svemirske uređaje. Riječ je o nečem što se može javno koristiti. A ako budete dobri u korištenju takve tehnologije, tko zna - možda jednog dana i sami završite u NASA-i.

Ocijeni sadržaj
(0 glasova)

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Skeniraj QR Code mobitelom i ponesi ovu stranicu sa sobom

Linux na Marsu- Kako pisati softver za svemirske misije? - VidiLAB - QR Code Friendly

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.