W październiku 2015 roku rozpoczęły się prace nad przygotowaniem oprogramowania komputera pokładowego polskiego satelity PW-Sat2. Od tego momentu Maciek bierze w nich udział i łączy świat „nudnych biznesowych .NET-owych aplikacji webowych” ze światem elektroniki, C++ i Kosmosu. W ramach swojego wykładu opowiedział o technologii, a także o różnicach i podobieństwach w obu światach oraz wyzwaniach — tych przyziemnych i tych pozaziemskich.
2. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k2
https://www.youtube.com/watch?v=oSsqaUjLTrg
3. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k3
PW-Sat2
Drugi polski satelita studencki
CubeSat 2U
Studenci PolitechnikiWarszawskiej
• Mechanika
• Elektronika
• Eksperymenty
Future Processing
• Oprogramowanie komputera pokładowego
4. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k4
PW-Sat2
Podstawowa misja:
• przetestowanie żagla deorbitacyjnego
Cele drugorzędne
• Test mechanizmu otwierania paneli słonecznych
• Pomiar przyjętego promieniowania
• Test czujnika Słońca
• Zrobienie zdjęcia
Start: kwiecień 2018
5. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k5
CubeSat
Nanosatelity wynoszone na orbitę przy okazji innych misji
Powszechnie dostępne elementy elektroniczne
Wykorzystywane do przeprowadzania eksperymentów
Koncepcyjnie przypominają „duże” satelity ale są tańsze
6. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k6
Bus + Payload
Żagiel deorbitacyjny
Kamery
Payload
Bus
Układ zasilania (EPS)
Komunikacja (COMM)
Kontrola orientacji (ADCS)
Komputer pokładowy (OBC)
Czujnik słońca
Panele słoneczne
7. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k7
Bus + Payload
Payload
Bus
8. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k8
Bus + Payload
Żagiel deorbitacyjny
Kamery
Payload
Bus
Panele słoneczne
Układ zasilania (EPS)
Komunikacja (COMM)
Kontrola orientacji (ADCS)
Komputer pokładowy (OBC)
Czujnik słońca
9. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k9
Zadania OBC
Przetrwać
Wykonywanie planu misji
Obsługa telekomend
Zbieranie telemetrii
Housekeeping
Wykonywanie eksperymentów
10. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k10
Hardware
Laptop
4 rdzenie, 64-bit, 2.8GHz
16GB RAM
512GB SSD + 1TB HDD
Komunikacja: USB,TCP
OBC
ARM Cortex-M3, 48MHz
Brak FPU
1MB SRAM
1MB pamięci programu
16MB pamięci trwałej
Komunikacja: I2C, SPI, UART
11. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k11
Toolchain
C++14
GCC arm-none-eabi 5.4
CMake + make
GoogleTest
RapidCheck
QEMU (unit testy)
Testy integracyjne – Python 2.7
Jenkins
12. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k12
Toolchain
OBC EM Pamięci DeviceMock
13. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k13
RTOS
Nie ma „klasycznego” systemu operacyjnego
Stosuje się RTOS (Real-Time Operating System), np. FreeRTOS
• Łączony z docelowym programem jak biblioteka (5 plików)
• Wielowątkowość z wywłaszczeniem
• Podstawowe mechanizmy synchronizacyjne (kolejka, semafor)
Konieczna jest ręczna kontrola ilości pamięci zużywanej przez wątki
14. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k14
Pętla misji
SystemState state;
while(1)
{
for(auto& u: _updates)
u.Update(state);
for(auto& a: _actions)
if(a.CanExecute(state))
a.Execute(state);
Sleep(10s);
}
Update
• Bieżący czas
• Status anten
• Warunek otworzenia żagla
Action
• Otwieranie anten
• Otwieranie żagla
• Okresowy restart
15. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k15
Komunikacja
Mój dom
30Mb/s
Dostęp cały czas
Wysokopoziomowe protokoły
(TCP, HTTP, REST)
PW-Sat2
Uplink 1200 bps
Downlink 9600 bps
5 minut dziennie
Telekomendy
Nieskorelowane odpowiedzi
16. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k16
Komunikacja
17. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k17
Beacon
Wysyłany co 60 sekund stan satelity (telemetria)
180 wartości
1831 bitów = 228,875 bajtów
18. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k18
Garść
statystyk
5 osób
2 lata
381 pull requestów
1 960 commity
1 322 unit testy
170 testów integracyjnych
Ponad 70k linii kodu
20. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k20
BIS: CUTE-1.7
+ APD II
Nanosatelita, 20cm x 15cm x 10cm, 3kg
Wystrzelony w 2008
Zbudowany przezTokyo Institute ofTechnology
Oparty na PDA zWindows CE.NET
Komunikacja z podzespołami przez USB
21. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k21
BIS:Konfigurac
ja
W 1991 satelita ERS-1 nie utrzymywał orientacji na orbicie
Powód: odwrotnie zamontowany magnetorquer (fancy magnes)
Rozwiązanie: korekcja (mnożenie przez -1) w oprogramowaniu
Wniosek: trzeba być przygotowanym na proste poprawki
22. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k22
BIS:Dane
wejściowe
Satelita Hipparcos (1989 – 1993)
Wymagał okresowej aktualizacji danych
Błąd w danych 10e-6 zamiast 10E-6
• Oprogramowanie zignorowało błędny fragment (e-6)
Efekt: wygenerowany moment obrotowy milion razy za duży
23. . N E T o w i e c w K o s m o s i e | 2 0 1 7 . 1 2 . 0 1 | M a c i e j N o w a k23
BIS: Command-Query
Separation
Moduł ADCS – gotowy produkt dostępny na rynku
Jedna z funkcjonalności: pomiar pola magnetycznego
Sposób użycia: Polecenie (rozpocznij pomiar) + Polecenie (zwróć
wartość)
Problem: zbyt szybkie zapytanie o wartość, powoduje anulowanie
pomiaru
Rozwiązanie: Sleep
Drugi polski satelia studencki, standard CubeSat 2U (patrz model). Studenci PW – mechanika, eksperymenty, część elektroniki Future Processing – oprogramowanie komputera pokładowego
Misja podstawowa – żagiel deorbitacyjny, czas na orbicie 20lat -> rok
Cele drugorzędne – algo kontroli orientacji, otwieranie paneli słonecznych, pomiar przyjętego promieniowania, zdjęcie
CubeSat, nanosatelity,
1U, 2U,
powszechnie dostępna elektronika (sklep z częściami)
Koncepcyjnie jak duże satelity
Zastosowanie: eksperymenty, testy technologii
Bus – potrzebne do wykonania misji, ale nie misja sama w sobie
Payload – misja (to co najistotniejsze)
Podział nie jest obcy, patrz systemy które rozwijamy
Bus – system operacyjny, serwery baz danych, biblioteki, Commonsy, Infrastructura
Payload – to na czym system zarabia – przetwarzanie zamówień, zarządzanie budynkami
Pracuję na OBC, więc o OBC będę mówił.
Ważne: OBC nie jest celem samym w sobie, ma służyć innym podsystemom
Laptop vs OBC
Toolchain
Toolchain
Mało pamięci, wolny procesor -> brak systemu operacyjnego w stylu Windows czy Linux
RTOS – biblioteka do wątków (20 tysięcy linii z komentarzami)
Ręczna kontrola pamięci
Komunikacja mój dom vs satelita.
Telekomendy + odpowiedzi jak UDP
A oprogramowanie będziemy aktualizować tak
Dzięki
Japoński nanosatelita, na Windows CE.NET, dalej działa
Prawdziwa historia, ERS-1 obracał się nie tak jak powinien
Magnotorquer (generuje obrót poprzez oddziaływanie z polem magentycznym) był zamontowny na odwrót.
Szybka zmiana ustawień i mnożenie przez -1 aby naprawić błąd przy montażu
Wniosek: ustawienia na proste poprawki (np. URLe, numery portów)
Warto sprawdzać dane wejściowe
Korzystamy z gotowego modułu ADCS,
Jedna z funkcji – pomiar pola magnetycznego
Sposób użycia
Problem: zleciliśmy pomiar, zapytaliśmy o wynik – zapomniał zrobić pomiar
Rozwiązanie: Sleep między rozpoczęciem pomiaru a zapytaniem o wartość – jak długi? Wyznaczone doświadczalnie
Wniosek: zapytania nie powinny modyfikować stanu