Wizualizacja aktualnego położenia międzynarodowej stacji kosmicznej ISS. Piotr Michoński 218512 Wrocław 9 czerwca 2017
SPIS TREŚCI SPIS TREŚCI Spis treści 1 Opis projektu 2 1.1 Główne założenia......................... 2 1.2 Uszczegółowienie......................... 2 1.2.1 Mapa........................... 2 1.2.2 Podgląd.......................... 2 1.2.3 Prędkościomierz...................... 3 1.2.4 Wysokościomierz..................... 3 1.2.5 Sekcja informacyjna................... 3 1.3 Szkic interfejsu.......................... 3 1.4 Najważniejsze funkcjonalności.................. 3 1.4.1 Wyświetlanie mapy i wyrysowywanie trajektorii.... 4 1.4.2 Podgląd pauzowanie i przesuwanie.......... 4 1.4.3 Wyświetlanie prędkości.................. 5 1.4.4 Wykres wysokości..................... 5 1.4.5 Możliwość sprawdzenia najbliższych przelotów..... 5 1.4.6 Wyświetlanie informacji o stacji oraz obecnej załogi.. 5 1.5 Diagramy przepływowe...................... 5 1.6 Diagram klas........................... 5 2 Harmonogram pracy 11 2.1 Dekompozycja zadań....................... 11 2.2 Kamienie milowe......................... 12 2.3 Diagram Gantta.......................... 13 3 Przykład uzywkiwanych efektów 13 4 Podsumowanie 13 5 Zarządzanie projektem 15 Literatura 15 1
1 OPIS PROJEKTU 1 Opis projektu 1.1 Główne założenia Celem projektu było stworznie aplikacji napisanej w języku C++ z wykorzystaniem zestawu bibliotek Qt. Aplikacja wizualizuje położenie stacji kosmicznej ISS. Dane o położeniu stacji są pobierane ze źródeł internetowych. Położenie zobrazowane jest jako punkt na mapie świata, bezpośrednio nad którym znajduje się stacja kosmiczna. Ponadto są pobierane i wyświetlane dodatkowe informacje takie jak aktualna prędkość czy wysokość stacji. Jednym z głównych założeń było przedstawienie każdego parametru w inny ciekawy sposób z wykorzystaniem animacji 2D. Cały program został napisany z zachowaniem zasad obiektowości w języku C++. 1.2 Uszczegółowienie Program zrealizwany jest w jednym oknie głównym. Na kanwie zajmującej większość okna umieszone są wszystkie widgety. Można wyróżnić 5 głównych sekcji: mapa, podgląd, prędkościomierz, wysokościomierz, sekcja informacyjna. 1.2.1 Mapa Na mapie wyświetlany jest mały obiekt graficzny nad aktualnym położniem stacji. Dane o szerokości i wysokości nad którą znajduje się ISS, są pobierane z internetu za pomocą klasy QNetworkAccessManager. Ponadto na mapie wyrysowywana jest trajektoria lotu. 1.2.2 Podgląd Podgląd jest oknem z fragmentem mapy świata, który astronauci mogą obserwować ze stacji. Przy użyciu zdarzeń od myszki, możliwe jest przesuwanie podglądu w żądanym kierunku po ówczesnym zapauzowaniu aktualizowanie widgetu poprzez wciśnięcie przycisku Pauza. 2
1.3 Szkic interfejsu 1 OPIS PROJEKTU Rysunek 1: Szkic interfejsu aplikacji 1.2.3 Prędkościomierz Wskaźnik prędkości ze wskazówką, taką jak w starszych samochodach, dodatkowo wyświetlający prędkość na ekranie LCD. 1.2.4 Wysokościomierz Jest to wykres zmian wysokości stacji w pewnym przedziale czasu. Przedział, jak i geometria wykresu są wartościami przystosowanymi do łatwej edycji w kodzie. 1.2.5 Sekcja informacyjna Sekcja ta zawiera krótki opis stacji ISS, listę osób przebywających obecnie na stacji oraz dostarcza możliwość sprawdzenia przelotów ISS nad obszarem zadanym współrzędnymi wpisywanymi do spinboxów. 1.3 Szkic interfejsu Na rysunku 1 przedstawiono szkic interfejsu przedstawiający rozłożenie widgetów na oknie głównym. 1.4 Najważniejsze funkcjonalności Aplikacja realizuje poniższe najważniejsze funkcjonalności: 3
1.4 Najważniejsze funkcjonalności 1 OPIS PROJEKTU wyświetlanie mapy i wyrysowywanie trajektorii, podgląd pauzowanie i przesuwanie, wyświetlanie prędkości, wykres wysokości, możliwość sprawdzenia najbliższych przelotów, wyświetlanie informacji o stacji oraz obecnej załogi. Wszystkie zostały poniżej szczegółowo opisane. 1.4.1 Wyświetlanie mapy i wyrysowywanie trajektorii Mapa jest prostokątnym widgetem, który w tle zawiera mapę całego świata załadowywaną do pamięci programu z pliku. Istnieje możliwość wyrysowania na mapie grafiki, w miejscu wyznaczonym poprzez podane współrzędne geograficzne. W klasie jest zaimplementowana funkcja, która potrafi zamienić współrzędne geograficzne na rzut Merkartora, czyli rzut w jakim zrealizowana jest mapa. Pozwala to na określenie fizycznego położenia (w liczbie pikseli od narożnika widgetu), w jakim znajduje się punkt o zadanych współrzędnych. W tym programie klasa ta wyrysowuje grafikę przedstawiającą stację kosmiczną nad współrzędnymi otrzymanymi w sygnale wysłanym przez obiekt Satelita. Wyrysowywanie odbywa się w momencie otrzymania sygnału. Ponadto w klasie mapa jest pole zawierające listę obiektów typu QPointF, w której można przechowywać współrzędne punktów. Współrzędne te są również wyrysowywane na mapie, obrazując jej trajektorię. 1.4.2 Podgląd pauzowanie i przesuwanie W oknie podglądu wyświetla się zdjęcie mapy satelitarnej Ziemii, pobranej w momencie nadejścia sygnału zaktualizowania współrzędnych. Zdjęcie jest pobierane z internetu przy użyciu klasy QNetworkAccessManager. Istnieje możliwość ignorowania przychodzących sygnałów i wstrzymanie aktualizacji podglądu poprzez wciśnięcie przycisku Pauza. Jednocześnie dostaje się możliwość przesuwania mapy klikając na Podglądzie lewym przyciskiem myszy, przesuwając kursor i puszczając przycisk. Gdy wznowimy aktualizacje podglądu (tym samym przyciskiem na którym powinno się wyświetlać słowo Start ) przesuwanie jest znów zablokowane. 4
1.5 Diagramy przepływowe 1 OPIS PROJEKTU 1.4.3 Wyświetlanie prędkości Z aplikacją dostarczona jest klasa Prędkościomierz, w której podczas tworzenia obiektu można podać zakres prędkości wyświetlanych na wskaźniku oraz rozmiar widgetu. Prędkość jest wyświetlana na wyświetlaczu LCD (obiekcie klasy QLCD) a także za pomocą wskazówki, jak w anologowym prędkościomierzu w samochodach. Wyrysowywanie odbywa się poprzez klasę QPainter. 1.4.4 Wykres wysokości Na widget cie wyświetlany jest wykres punktowy, w którym punkty połączone są liniami. Wykres obejmuje ustalony w kodzie zakres poziomy, natomiast zakres pionowy jest automatyczie kalibrowany. Stworzona klasa jest uniwersalna i pozwala na zmiany wymiarów wigetu i elementów w nim. Wyrysowywanie odbywa się poprzez klasę QPainter. 1.4.5 Możliwość sprawdzenia najbliższych przelotów Wraz z klasą SekcjaInformacyjna dostarczona jest możliwość sprawdzenia przelotów międzynarodowej stacji kosmicznej nad zadanymi współrzędnymi. W tym celu należy wprowadzić w SpinBox y wartości długości i szerokości geograficznej żądanego punktu, a następnie wcisnąć przycisk sprawdź. Wyświetli się okno z wiadomością zawierającą czasy przelotów. 1.4.6 Wyświetlanie informacji o stacji oraz obecnej załogi Dodatkowo widget sekcji informacyjnej wyświetla listę osób aktualnie przebywających na ISS pobraną z sieci podczas tworzenia obiektu. Nad listą znajduje się też krótki opis stacji wpisany bezpośrednio w kodzie programu. 1.5 Diagramy przepływowe Diagramy przepływowe działania aplikacji zaprezentowano w wersji ogólnej (rysunek 2) oraz uszczegółowieniu w wybranych funkcjonalnościach (patrz rysunki 3, 4, 5, 6). 1.6 Diagram klas Rysunek 7 przedstawia diagram klas aplikacji. Na biało zaznaczono wszytkie klasy stworzone przez autora. Główną klasą, w której tworzone są obiekty innych klas, jest Kanwa przedstawiona na środku rysunku. Kolorem 5
1.6 Diagram klas 1 OPIS PROJEKTU Rysunek 2: Ogólny diagram działania aplikacji 6
1.6 Diagram klas 1 OPIS PROJEKTU Rysunek 3: Diagram wyrysowywania mapy 7
1.6 Diagram klas 1 OPIS PROJEKTU Rysunek 4: Diagram wyrysowywania aktualnej prędkości 8
1.6 Diagram klas 1 OPIS PROJEKTU Rysunek 5: Diagram aktualizacji obiektu Satelita 9
1.6 Diagram klas 1 OPIS PROJEKTU Rysunek 6: Diagram działania obiektu SekcjaInformacyjna 10
2 HARMONOGRAM PRACY Rysunek 7: Diagram klas niebieskim oznaczono najważniejsze klasy z biblioteki Qt, których użyto w programie. 2 Harmonogram pracy 2.1 Dekompozycja zadań Pracę nad aplikacją zdekomponowano na poniższe zadania, które zostały rozplanowane w czasie. Podczas tworzenia projektu trzymano się powstałego w ten sposób harmonogramu. Zapozanie ze środowiskiem Stworzenie rdzenia aplikacji Nauka obsługi systemu slotów i sygnałów Widget z mapą świata Zapoznanie z klasą QNetworkAccessManager 11
2.2 Kamienie milowe 2 HARMONOGRAM PRACY Pobranie przykładowej informacji z sieci Pobranie i zapisanie położenia ISS Wyrysowanie położenia ISS na mapie Dodanie wyrysowywanie trajektorii Podgląd obszaru pod ISS Stworzenie widgetu z podglądem Nauka obsługi zdarzeń Wprowadzenie możliwości przesuwania podglądu obszaru Stworzenie animacji 2D Zapoznianie z klasą QPrinter Wizualizacja wysokości satelity Wyrysowanie prędkościomierza Uogólnienie programu Wprowadzenie wyświetlania obecnej załogi Dodanie opisu satelity Informowanie kiedy satelita znajdzie się nad zadanym obszarem Testy aplikacji Obsługa błędów Poprawki w kodzie programu 2.2 Kamienie milowe Zdefiniowano dwa kamienie milowe: Po wykonaniu widgetów z mapą i podglądem 08.05.2017 Po stworzeniu animacji 2D 29.05.2017 12
2.3 Diagram Gantta 4 PODSUMOWANIE 2.3 Diagram Gantta Licząc od dnia 27.03.2017 do końca semestru było 15 tygodni, dlatego poniższy diagram jest podzielony na 15 tygodniowych okresów: Zadania 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 Zapoznanie ze środowiskiem Widget z mapą świata Podgląd obszaru pod ISS Stworzenie animacji 2D Uogólnienie programu 6 Testy aplikacji 3 Przykład uzywkiwanych efektów Na rysunku 3 przedstawiono przykładowy efekt działania aplikacji. Widzimy na nim aplikacją działającą przez kilka minut. Na mapie czerwonymi punktami zaznaczona jest trajektoria ISS, zapisywana od momentu włączenia aplikacji. Prędkościomierz wskazuje aktualną prędkość, a na wykresie wysokości możemy zaobserwować, że przez ostatnie pół minuty stacja zmniejszała swoją prędkość. W prawym dolnym rogu widnieje opis stacji i lista osób przebywających na niej. Ponadto widzimy spinbox y, w których można wpisać współrzędne geograficzne i sprawdzić przyszłe przeloty nad tak zdefiniowanym punktem. Efekt wciśnięcia przycisku Wizualizuje rysunek 3. 4 Podsumowanie Zgodnie z przyjętymi założeniami, efektem końcowym jest w pełni działająca aplikacja. Podczas jej powstawania ściśle stosowano się do założonego harmonogramu, projekt ukończono przed wyznaczonym terminem. Do projektu została dostarczona pełna dokumentacja kodu w formacie HTML 13
4 PODSUMOWANIE Rysunek 8: Efekt działania aplikacji Rysunek 9: Efekt sprawdzenia przyszłych przelotów nad zadaną lokalizacją 14
5 ZARZĄDZANIE PROJEKTEM wygenerowana przez program doxygen. Ponadto w raporcie zamieszczono opis funkcjonalności aplikacji i wytłumaczono zasadę działania. Podczas pracy nad projektem potwierdzono, że wykorzystanie bibliotek Qt pomaga w łatwy sposób wykonać atrakcyjną graficznie aplikację, która doskonale nadawaje się do wizualizacji danych. Wszystko dzięki mnogości klas, doskonałej dokumentacji oraz mechanizmowi slotów i sygnałów, który dostarcza łatwy sposób na komunikację między obiektami/widgetami. 5 Zarządzanie projektem Kod programu był tworzony w edytorze emacs oraz testowany na różnych platformach. Kolejne wersje były zapisywane w systemie kontroli wersji git. Do tworzenia dokumentacji używano L A TEX. Diagramy tworzone były za pomocą dia. 15
LITERATURA LITERATURA Literatura [1] Karol Kuczyński: Wstęp do programowania w Qt, Lublin 2012 [2] Daniel Solin: Programowanie przy użyciu biblioteki Qt, Warszawa 2001 [3] Jerzy Grębosz Symfonia C++ standard, Kraków 2008 16