|

Rozdział 7: Interfejs, Misje i Telemetria (GUI, OSD, Blackbox)

Część 1: Przyjazna Encyklopedia (Dla Każdego)

Masz już perfekcyjnie skalibrowane sterowanie i asystentów dbających o trakcję. Czas zasiąść w wirtualnym fotelu pilota. RCSIM pozwala Ci na całkowitą personalizację ekranu, na którym widzisz obraz z kamery (FPV), oraz na zaplanowanie z chirurgiczną precyzją, co pojazd ma zrobić, gdy oddasz mu stery.

🎯 1. Planowanie Misji (Waypoint Navigation)

RCSIM pozwala na przekształcenie Twojego modelu RC w pełni autonomicznego robota realizującego zaplanowane misje. Niezależnie od tego, czy korzystasz z precyzyjnego pozycjonowania GPS klasy RTK (centymetrowa dokładność), czy też opierasz się na lokalnym systemie mapowania SLAM (LiDAR), kreator misji daje Ci pełną kontrolę nad torem jazdy.

Misja to po prostu lista punktów (nazywanych Waypointami), które Twój pojazd musi odwiedzić jeden po drugim, całkowicie bez Twojej ingerencji.

🗺️ Jak stworzyć swoją pierwszą misję?

  • Otwórz Kreator: W głównym panelu aplikacji przejdź do zakładki Kokpit, a następnie kliknij przycisk Kreator Misji.

  • Narysuj Trasę: Klikaj prawym przyciskiem myszy w dowolne miejsca na mapie satelitarnej. Każde kliknięcie postawi na mapie nowy Waypoint.

  • Dostosuj Parametry: Waypoint to nie tylko miejsce na mapie. W tabeli bocznej możesz skonfigurować:

  • Typ Punktu: Wybierz, czy to zwykła bramka przejazdowa (gate), cel (target), czy linia startu/mety (start/finish).

  • V Max (Maksymalna Prędkość): Limit prędkości (w km/h) z jaką pojazd ma dojeżdżać do tego punktu. Możesz powoli podjechać pod przeszkodę (10 km/h), a potem przyspieszyć na prostej (40 km/h).

  • Loiter Time: Czas (w sekundach), przez który auto ma czekać w punkcie, zanim ruszy dalej.

[!TIP] Promień detekcji (Acceptance Radius): Nie wymuszaj centymetrowej dokładności bez RTK lub stabilnej lokalizacji SLAM. W GCS parametr misji detection_radius ma bezpieczny domyślny poziom 5 m, a w Kokpicie można zmienić promień detekcji mety w zakresie 1-100 m. Dobierz go do realnej dokładności GPS/SLAM.

[!WARNING] Zabezpieczenie terenu (Terrain Failsafe): RCSIM dba o zdrowie Twojego modelu. Jeśli wjedziesz na bardzo wyboisty lub dziurawy teren, wbudowane czujniki ruchu (IMU) wykryją drgania i automatycznie zredukują docelowy gaz o 50%, niezależnie od ustawionego parametru V-Max!

🚧 2. Geofencing (Zasady Płotu i Akcje Failsafe)

Podczas planowania misji lub testowania pojazdu w otwartej przestrzeni, wirtualny płot (Geofence) stanowi Twój najważniejszy bezpiecznik. Chroni on model przed ucieczką w przypadku awarii aparatury (tzw. "fly-away") oraz przed wjechaniem w miejsca niedozwolone lub niebezpieczne (ruchliwe ulice, stawy).

W Menedżerze Geofence rysujesz na mapie zielony wielokąt i decydujesz, jak dokładnie ma zachować się pojazd w momencie przekroczenia tej strefy (tzw. Akcja Failsafe):

  • RTL (Return To Launch / Powrót do Startu):

  • Jak to działa? Po przekroczeniu granicy płotu pojazd zignoruje dotychczasowe sterowanie, automatycznie zawróci i skieruje się najkrótszą bezpieczną trasą z powrotem do punktu startu (Home).

  • Kiedy stosować? Do codziennych testów w dużych, bezpiecznych obszarach (łąki, pola). Pozwala na bezstresowe odzyskanie modelu bez fizycznego biegania po niego.

  • HARD STOP (Krytyczne Odcięcie Silników - DISARM):

  • Jak to działa? Najbardziej radykalna akcja ratunkowa w RCSIM to DISARM. GCS wysyła DISARM_PCA przez aktywną strategię komunikacji (WebRTC/UDP/MAVLink RF), a komputer pokładowy przełącza sterownik PWM w stan rozbrojenia. Model zatrzymuje się z opóźnieniem wynikającym z bezwładności i konfiguracji ESC.

  • Kiedy stosować? Zabezpieczenie krytyczne! Używaj obowiązkowo, jeśli testujesz pojazd w małych parkach lub w pobliżu stref niebezpiecznych, gdzie wyjazd poza wirtualny płot chociażby o 2 metry grozi wjechaniem na ulicę lub potrąceniem przechodnia.

📺 3. Personalizacja Ekranu FPV (Projektowanie OSD z klocków)

Wyświetlacz pokładowy (On-Screen Display - OSD) w systemie RCSIM jest w pełni elastyczny. Zamiast zmuszać Cię do oglądania dziesiątek migających cyfr, system pozwala na swobodę w aranżacji ekranu.

  • Uruchomienie Trybu Edycji: W zakładce Kokpit odnajdź panel wyboru OSD i kliknij przycisk Edytuj Układ (ikona ołówka). Pojawi się okno edytora graficznego z podglądem w rozdzielczości 720p.

  • Przeciąganie i Upuszczanie (Drag & Drop): W lewym panelu znajdziesz listę dostępnych klocków (np. prędkościomierz, sztuczny horyzont, poziom baterii, minimapa).

  • Chwyć i przenieś: Kliknij klocek lewym przyciskiem myszy i przeciągnij na obszar roboczy.

  • Rozmieść: Każdy element możesz przesuwać. Aby go usunąć, zaznacz go i wciśnij Delete.

  • Stylizacja i Przezroczystość (Inspektor): Po kliknięciu w dany element, w prawym panelu pojawią się opcje:

  • Skala (Scale): Zwiększaj lub zmniejszaj rozmiar widgetu.

  • Kolor bazowy (Color): Zmień barwę (np. neonowy zielony lub klasyczny biały).

  • Przezroczystość (Opacity): Tła elementów są fabrycznie przyciemnione i częściowo przezroczyste, co pozwala dostrzec przeszkody (gałęzie, słupki) ukryte bezpośrednio pod zegarami.

  • Zapisywanie Profili OSD: Gdy Twój układ jest perfekcyjny, kliknij Zapisz. Twój układ zostanie zapisany jako plik .json i będzie dostępny do wyboru z poziomu Kokpitu.

📈 4. Rejestracja Telemetrii i Analiza Blackbox

System RCSIM posiada zintegrowany rejestrator telemetryczny (tzw. Blackbox), który działa w sposób całkowicie przezroczysty. Każda chwila pracy pojazdu jest precyzyjnie zapisywana w celu późniejszej analizy.

  • Automatyczny Zapis Sesji: Nie musisz pamiętać o klikaniu przycisku "Nagraj". RCSIM automatycznie tworzy nową sesję przy każdym włączeniu zasilania (folder logs/sessions/). Aby nie przepełnić Twojego dysku, system przechowuje tylko 50 ostatnich sesji, automatycznie usuwając te najstarsze.

  • Analiza Wykresów na Żywo i Archiwalnych: W zakładce Diagnostyka możesz wybrać parametry, które chcesz obserwować na dynamicznych wykresach.

  • Korelacja Danych: Możesz nałożyć na siebie np. gaz oraz prędkość pojazdu, aby wykryć uślizg kół (gdy gaz rośnie, a prędkość stoi w miejscu).

  • Grupowanie: Podobne parametry (np. przechył boczny i podłużny) automatycznie łączą się na jednym wykresie, ułatwiając porównanie.

  • W planach Eksport do KML (Google Earth 3D): W zakładce historii kliknij przycisk Eksportuj do KML. Plik .kml możesz otworzyć w Google Earth. Trasa zostanie nałożona na trójwymiarowy glob z wektorem wysokości nad powierzchnią ziemi!

Część 2: Inżynieryjny Deep Dive (Dla Specjalistów)

Sekcja ta opisuje niskopoziomową architekturę matematyczną, procedury bezpieczeństwa, logikę asynchroniczną GUI oraz asynchroniczny potok I/O na linii GCS – Raspberry Pi.

1. Reprezentacja Matematyczna i Geolokalizacja (Haversine)

Zaliczanie kolejnych punktów w pętli telemetrii GPS bazuje na wyliczeniu odległości ortodromicznej (wielkiego koła) za pomocą wzoru Haversine'a:

Obliczenia te realizowane są w locie przez moduł geo_utils.py stacji GCS, zapobiegając dryfom przy rzutowaniu płaskim. Gdy system korzysta ze SLAM (Unified Navigation), lokalne współrzędne metryczne $(x_m, y_m)$ przeliczane są na GPS za pomocą macierzy transformacji afinicznej (CoordinateManager).

2. Pokładowy Algorytm Śledzenia Ścieżki (Pure Pursuit)

Za sterowanie poprzeczne na pokładzie RPi 5 odpowiada algorytm wyznaczający kąt skrętu $\delta$:

Kluczowy jest tu Adaptacyjny Lookahead ($L$). Skalowanie dystansu wyprzedzenia względem aktualnej prędkości ($v$) gwarantuje stabilność przy szybkiej jeździe i precyzję przy manewrowaniu:

3. Maszyna Stanów i Failsafe Przeszkód

Proces egzekucji planu na pokładzie drona wykorzystuje asynchroniczną maszynę stanów:

  • Dynamic Obstacle Avoidance: Planer RPi aktualizuje mapę kosztów z LiDARu. Jeśli trasa jest zablokowana, wstrzymuje ruch (stan RE_PLAN) i szuka obejścia algorytmem A*.

  • Skip Waypoint: Jeżeli po 3 próbach ominięcia bariery cel jest nieosiągalny, waypoint jest automatycznie pomijany. Chroni to robota przed utknięciem w pętli obliczeniowej.

4. Geofencing: Architektura Bezpieczeństwa (Ray-Casting & Hardware Cutoff)

Niskopoziomowy potok wykonawczy (Execution Pipeline) akcji awaryjnych geofencingu gwarantuje stabilność operacyjną. Obejmuje m.in. twarde odcięcie DISARM_PCA:

Przełączenie pinu OE (Output Enable) mikrokontrolera PWM w stan wysoki natychmiastowo (< 2 ms) wprowadza rejestry w stan wysokiej impedancji (Hi-Z). Regulator ESC traktuje to jako utratę sygnału i przechodzi w stan sprzętowego hamowania.

5. Architektura Personalizowanego OSD (Qt Graphics View)

System kompozycji graficznej HUD izoluje stan kontekstu graficznego w każdej ramce. Zapis współrzędnych odbywa się w układzie znormalizowanym, a ich mapowanie do widoku pozwala na responsywność bez utraty jakości:

Dzięki painter.save() i restore(), modyfikacje alfy i układu odniesienia wybranej wtyczki nie modyfikują warstwy wideo ani sąsiadujących widgetów.

6. Architektura Blackbox: Throttling I/O i Generowanie KML 3D

System telemetryczny opiera się na asynchronicznym potoku logowania CSV o zoptymalizowanym czasie dostępu do dysku.

Bezlaggowy Zapis CSV i Ochrona przed WinError 32

Aby uniknąć zjawiska "I/O Starvation", potok stacji GCS stosuje asynchroniczny throttling czasowy w CSVDataLogger:

Zapisy dokonywane są przez CsvDataHandler, który omija tradycyjne formatowanie logów, pisząc bajty bezpośrednio na dysk. Architektura uwzględnia WindowsSafeRotatingFileHandler, przechwytujący błąd WinError 32 pojawiający się podczas rywalizacji o dostęp z usługami synchronizacji chmurowej (np. OneDrive).

Renderowanie Wektorowe z PyQtGraph

Wizualizacja PlotterTab pomija klasyczną pętlę Qt (QPainter) na rzecz buforowania struktur w pamięci i renderingu z użyciem pyqtgraph. Aplikacja utrzymuje tablicę kroczącą dla serii czasowych i uaktualnia ją wskaźnikowo (curve.setData), utrzymując płynność i natychmiastowe grupowanie korelacji (np. roll z pitch).

Generowanie Wektora KML 3D (Wysokość AMSL)

Eksport do KML przekształca zapisy w dokument XML. Istotne dla fotorealistycznej wizualizacji 3D w Google Earth jest określenie trybu wysokościowego w :

Parametr 1 generuje wirtualne "ściany" przestrzenne od ścieżki przejazdu do płaszczyzny ziemi, maksymalizując walor analityczny przy misjach autonomicznych i mapowaniu terenowym.