Programming 12 Październik 2026 ★ Featured

Palantir — interaktywna mapa nieba i planer obserwacji dla radioteleskopu RT4

Dostępne też w:

Wprowadzenie

Radioteleskop RT4 w Piwnicach pod Toruniem ma czaszę o średnicy 32 metrów i jest największym radioteleskopem w Polsce. Pracuje praktycznie bez przerwy, a w kolejce do obserwacji czekają setki źródeł z kilku projektów naukowych.

Operator siedzący przy teleskopie w środku nocy musi szybko odpowiedzieć sobie na kilka pytań:

  1. Co jest teraz nad horyzontem i jak wysoko?
  2. Co warto obserwować, czyli które źródła „dojrzały” do kolejnej obserwacji, a które były robione wczoraj?
  3. Gdzie patrzy antena i ile zajmie jej przejazd do następnego celu?
  4. Ile źródeł zmieści się w czasie, który został do końca okna czasowego danego projektu?

Kiedy pracowałem w Katedrze Radioastronomii, na te pytania odpowiadały notatki, tabele i doświadczenie obserwatora. Napisałem więc Palantira: program, który pokazuje to wszystko na jednym ekranie.

O projekcie

Palantir to aplikacja desktopowa w Pythonie. Rysuje aktualną mapę nieba nad obserwatorium, nanosi na nią źródła z katalogów projektów, na żywo pokazuje pozycję anteny RT4 i pomaga ułożyć plan obserwacji.

Pierwszy commit powstał w lutym 2018 r. Od mniej więcej maja 2018 r. program jest używany w obserwatorium na co dzień: działa 24 godziny na dobę jako podgląd pozycji radioteleskopu i jest podstawowym narzędziem do planowania obserwacji. Od ponad czterech lat nie pracuję już w Centrum Astronomii na etacie, ale nadal bywam tam przy obserwacjach raz na tydzień lub dwa i przez cały ten czas utrzymuję i rozwijam Palantira (oraz wiele innych, mniejszych i większych programów mojego autorstwa, które tam działają).

[!NOTE]
Kod źródłowy nie jest publiczny. Jestem w trakcie refaktoru do nowszych standardów i planuję go kiedyś udostępnić, prawdopodobnie razem z publikacją w czasopiśmie naukowym. Ten artykuł opisuje funkcje programu, architekturę i decyzje projektowe.

Kluczowe funkcjonalności

🗺️ Mapa nieba w dwóch projekcjach

Sercem programu jest mapa nieba liczona dla współrzędnych obserwatorium. Dostępne są dwie projekcje, osobno lub obok siebie:

  • kartezjańska (azymut i wysokość), wygodna do oceny wysokości źródeł nad horyzontem,
  • biegunowa, czyli widok „z zenitu”, który odpowiada temu, jak faktycznie porusza się antena.

Na mapę można nałożyć siatkę współrzędnych równikowych (południki rektascensji i równoleżniki deklinacji), a także Słońce i Księżyc. Źródła nisko nad horyzontem są rysowane coraz bardziej przezroczyście. Jest też tryb ciemny, przydatny w nocy w sterowni.

Palantir — interaktywna mapa nieba i planer obserwacji dla radioteleskopu RT4

📡 Pozycja radioteleskopu na żywo

System sterowania RT4 rozgłasza swój stan w sieci lokalnej datagramami UDP. Palantir odbiera je w osobnym wątku i nanosi na mapę:

  • aktualną pozycję anteny (czerwony znacznik z linią),
  • pozycję zadaną, czyli miejsce, do którego antena właśnie jedzie,
  • łuk pokazujący aktualny azymut anteny wraz z jego znakiem.

Dzięki temu jednym rzutem oka widać, na co teleskop patrzy, dokąd zmierza i co ma po drodze. Właśnie w tej roli program działa w obserwatorium bez przerwy.

🎯 Tryb śledzenia (--track)

Uruchomienie z przełącznikiem --track daje gotowy „ekran dyżurny”: tryb ciemny, mapa biegunowa z siatką równikową, automatyczne odświeżanie czasu i widoczna pozycja anteny. To konfiguracja dla monitora, który po prostu wisi w sterowni.

Palantir — interaktywna mapa nieba i planer obserwacji dla radioteleskopu RT4

📚 Katalogi źródeł i filtry

Źródła pochodzą z prostych plików tekstowych, po jednym na projekt - tak, by inni koledzy-naukowcy mogli prosto dostarczać pozycje swoich źródeł. Każdy katalog ma nagłówek (projekt, oprogramowanie obserwacyjne, pasmo), a każde źródło: współrzędne, prędkość radialną, liczbę cykli obserwacji oraz minimalny i maksymalny odstęp między obserwacjami w dniach.

W panelu bocznym operator wybiera:

  • pasmo odbiornika (L, C, M, X, K lub kontinuum),
  • konkretny projekt albo wszystkie projekty w paśmie,
  • kalibratory pozycji,
  • tryb „tylko do zrobienia”.

Kliknięcie źródła na mapie zaznacza je i wypisuje jego parametry: nazwę skryptu, liczbę cykli, datę ostatniej obserwacji i liczbę dni, które od niej minęły.

🌈 Co jest „do zrobienia”: kolory według wieku obserwacji

Palantir zna historię obserwacji każdego źródła i porównuje ją z odstępami zapisanymi w katalogu:

  • źródła obserwowane zbyt niedawno znikają z mapy,
  • źródła jednorazowe znikają po pierwszej obserwacji,
  • pozostałe dostają kolor ze skali od niebieskiego do czerwonego zależnie od tego, jak blisko są końca swojego okna,
  • źródła nigdy nieobserwowane lub przeterminowane są wyróżnione wyraźniejszym znacznikiem.

Operator nie musi niczego pamiętać ani sprawdzać w tabelach. Mapa sama pokazuje, co jest pilne.

🗄️ Automatyczny dziennik obserwacji

Historia nie jest wpisywana ręcznie. Osobny, niewielki serwer TCP działa w obserwatorium jako usługa systemowa. Program archiwizujący obserwacje na innym komputerze (tartar - inny z programów mojego autorstwa) po każdej zakończonej obserwacji wysyła do niego jedną wiadomość (czas, oprogramowanie, odbiornik, projekt, źródło), a serwer zapisuje ją do bazy SQLite. Palantir czyta z tej samej bazy, więc mapa aktualizuje się sama. Baza gromadzi obserwacje od 2020 r.

⏱️ Nawigacja w czasie

Mapę można oglądać dla dowolnej chwili: wpisać datę i godzinę, przesuwać czas przyciskami (±10 minut, ±1 godzina), wrócić do „teraz” albo włączyć automatyczne odświeżanie. Pozwala to sprawdzić, jak będzie wyglądało niebo za trzy godziny, bez liczenia czegokolwiek w głowie.

📈 Wykres widoczności źródła

Dla zaznaczonego źródła program rysuje wysokość nad horyzontem w funkcji czasu dla całej doby. Po najechaniu kursorem na krzywą pojawia się nazwa źródła, więc na jednym wykresie można porównywać kilka obiektów.

Palantir — interaktywna mapa nieba i planer obserwacji dla radioteleskopu RT4

🗓️ Planowanie obserwacji krok po kroku

Planer pozwala ułożyć harmonogram bezpośrednio na mapie. Operator klika źródło i dodaje je jako kolejny krok, a program:

  1. szacuje czas obserwacji na podstawie liczby cykli i trybu, w jakim obserwuje się dane źródło,
  2. szacuje czas przejazdu anteny z poprzedniej pozycji,
  3. przesuwa zegar mapy na koniec tego kroku, więc następne źródło wybiera się już na takim niebie, jakie będzie po zakończeniu poprzedniej obserwacji.

Plan pojawia się w osobnym oknie jako tabela z czasem rozpoczęcia, czasem obserwacji i przejazdu każdego kroku oraz sumą. Gotowy plan można wypisać do terminala razem z fragmentem skryptu powłoki, który skleja skrypty obserwacyjne wybranych źródeł w jeden plik gotowy do uruchomienia.

Palantir — interaktywna mapa nieba i planer obserwacji dla radioteleskopu RT4

🌍 Wielojęzyczny interfejs i zapamiętywany układ okna

Interfejs jest dostępny po polsku, angielsku i hiszpańsku. Okno zbudowano z dokowanych paneli, które można dowolnie przestawiać i skalować. Układ jest zapamiętywany między uruchomieniami.

Architektura i stack technologiczny

Warstwa Technologie Odpowiedzialność
Interfejs wxPython (AUI, FoldPanelBar), matplotlib osadzony w wx Dokowane panele, mapa nieba, wykresy, okno planu
Logika Python 3.12, dataclasses, czyste funkcje Projekcje mapy, model planu obserwacji, estymatory czasu
Astronomia astropy, PyEphem, NumPy Transformacje współrzędnych, czas, pozycje Słońca i Księżyca
Dane SQLite, pandas, pliki tekstowe katalogów Dziennik obserwacji, katalogi źródeł
Sieć gniazda UDP i TCP, wątki Odbiór stanu RT4, serwer dziennika obserwacji
Konfiguracja python-dotenv, argparse Współrzędne obserwatorium, adresy, język, tryb pracy
Jakość pytest, ruff, black, uv 156 testów jednostkowych, linting, powtarzalne środowisko
Wdrożenie Docker, systemd Kontener z GUI na pulpicie hosta, serwer dziennika jako usługa

Kilka decyzji, które uważam za warte opisania:

  • Logika oddzielona od GUI. Projekcje mapy oraz cały model planowania obserwacji to moduły bez żadnych importów wx i matplotlib. Dzięki temu da się je testować bez wyświetlacza, a testy trwają kilka sekund.
  • Wątki bez zamrażania interfejsu. Odbiór UDP i automatyczne odświeżanie czasu działają w wątkach roboczych, a wszystkie zmiany w GUI wracają do wątku głównego przez własne dekoratory.
  • Konfiguracja poza kodem. Współrzędne obserwatorium, adresy sieciowe, ścieżki i język są w pliku .env, więc ten sam kod działa na stanowisku operatora i na laptopie programisty. Program łatwo można dostosować dla innego obserwatorium.
  • Refaktor działającego systemu. Program powstawał, gdy byłem naukowcem piszącym kod. Po blisko pięciu latach pracy komercyjnej przepisuję go do standardów, których dziś oczekuję od siebie: typowanie, testy, linting, jasny podział na moduły. Robię to etapami, bo program przez cały czas musi działać w obserwatorium, a ja mam przecież mnóstwo innych zadań - ten projekt nie jest komercyjny.

Palantir w liczbach

  • 2018: pierwszy commit, po ok 3 miesiącach intensywnej pracy - praca produkcyjna
  • 24/7: tryb pracy jako podgląd pozycji radioteleskopu
  • 6 pasm odbiorczych, kilkanaście katalogów projektów
  • około 5 tys. linii kodu, 156 testów, 150 commitów
  • 3 języki interfejsu

Plany rozwoju

  • [x] Przejście na nowoczesne narzędzia (uv, ruff, pytest)
  • [x] Wydzielenie logiki z warstwy GUI i pokrycie jej testami
  • [x] Wielojęzyczny interfejs
  • [x] Wdrożenie w kontenerze
  • [ ] Dokończenie refaktoru warstwy mapy nieba
  • [ ] Publiczne udostępnienie kodu
  • [ ] Publikacja opisująca program w czasopiśmie naukowym