DOCS/Kompendium Wiedzy
|

Rozdział 4: GCS – Kokpit, Interaktywna Mapa i Centrum Dowodzenia

Stacja naziemna RCSIM GCS (Ground Control Station) to zaawansowane środowisko operacyjne zbudowane w oparciu o framework PySide6 i wielowątkową architekturę asynchroniczną. Głównym widokiem operacyjnym stacji jest Kokpit (Cockpit Tab) – zintegrowane centrum dowodzenia łączące wideo FPV o ultra-niskim opóźnieniu, personalizowane wskaźniki OSD, monitoring kanałów RC, diagnostykę sensorów pokładowych, interaktywną mapę satelitarną/SLAM, wirtualne granice (Geofence) oraz planowanie misji waypointowych.


🕹️ 1. Panel Sterowania Połączeniem (Connection Control Panel)

Zlokalizowany w górnej sekcji Kokpitu panel odpowiada za zarządzanie aktywnym łączem telemetryczno-sterującym pomiędzy komputerem PC a modelem:

  1. Selektor Portów i Adresów IP: Dynamiczna lista wykrytych portów szeregowych USB (COMx na Windows, /dev/ttyACM* na Linux) oraz wprowadzonych adresów IP/hostów sieciowych.
  2. Prędkości Transmisji (Baudrate):
    • 115200 Baud – Domyślny tryb dla Tier 1 (patrz RP2350 USB CDC Gotcha) oraz prostych linków szeregowych.
    • 420000 Baud – Wysokoobrotowy tryb binarny dla CRSF Direct (RadioMaster Nomad / ExpressLRS).
    • 57600 Baud – Standardowy transfer dla ramek telemetrycznych MAVLink 2.0.
  3. Wskaźnik Jakości Łącza (Link Quality / RSSI): Dynamiczny pasek prezentujący poziom sygnału radiowego (dBm / LQ), częstotliwość odświeżania pakietów (Hz) oraz wykryte opóźnienie w milisekundach (RTT / Ping).
  4. Przycisk Połącz / Rozłącz (Connect / Disconnect): Inicjuje asynchroniczną sekwencję otwarcia gniazda z mechanizmem automatycznego wznawiania łączności (Auto-Reconnect Watchdog).

🔄 2. Tryby Połączenia (Connection Modes)

System RCSIM wspiera 7 wyspecjalizowanych trybów komunikacji:

Tryb Połączenia Przeznaczenie Protokół i Porty
Tier 1: USB Serial (DSC / PPM) Tani start z aparaturą RC przez gniazdo Jack 3.5mm USB CDC (115200 Baud), ramki CSV 1500,1500...
Tier 2: WiFi ESP32 Direct Bezprzewodowa kontrola mikrokontrolerów ESP32 UDP 12345/12347 + wideo MJPEG (Port 81)
Tier 3: MAVLink RF (Nomad / XR4) Daleki zasięg z kontrolerami lotu (Corewing F405) Serial 57600 Baud + UDP Mirroring (127.0.0.1:14550)
Tier 3: CRSF Direct (Nomad USB) Ultra-niskie opóźnienie 1000Hz (16 kanałów 11-bit) Serial 420000 Baud, ramki binarne CRSF
Tier 4: RPi WebRTC (Wideo + Dane) Pełna telemetria pokładowa i wideo H.264 z RPi 5 WHEP WebRTC + DataChannel UDP
Tier 4: RPi TCP / Tailscale VPN Zdalna jazda poza zasięgiem Wi-Fi (LTE/5G) Wirtualna sieć Tailscale Mesh (Ping ~150ms)
DonkeyCar SITL / Simulator Wirtualne środowisko symulacyjne w pętli zamkniętej Pętla lokalna TCP/UDP 127.0.0.1

🚗 3. Tryby Jazdy i Asystenci (Drive Modes & Pilot Assist)

W stacji naziemnej RCSIM GCS selektor trybów jazdy (Drive Mode) w Kokpicie udostępnia 6 zaawansowanych algorytmów sterowania – od pełnej kontroli manualnej, przez algorytmy geometryczne i robotyczne (LiDAR), aż po hybrydowych asystentów oraz pełną autonomię sztucznej inteligencji:

Menu wyboru trybów jazdy w RCSIM GCS Rysunek 4.1: Rozwijana lista trybów jazdy i asystentów pilota w panelu sterowania Kokpitu RCSIM GCS.

🕹️ 3.1 Manualny (Kierowca) – CONTROL_MODE_MANUAL

  • Opis: Klasyczny tryb bezpośredniej kontroli. Sygnały z fizycznej kierownicy (Steering) oraz pedałów (Throttle / Brake) trafiają wprost do miksera bez jakiejkolwiek ingerencji algorytmów autonomii.
  • Dla kogo: Doświadczeni kierowcy, precyzyjne manewry na ciasnych torach, testy kalibracji serwomechanizmów i układu napędowego.

🧱 3.2 PWF (Wall Following) – CONTROL_MODE_AI_PWF

  • Opis: Algorytm równoległego podążania wzdłuż ściany (Parallel Wall Following) bazujący na danych ze skanera LiDAR 2D.
  • Zasada działania: System mierzy odległość oraz kąt nachylenia do najbliższej ściany (lewej lub prawej) i za pomocą szybkiej pętli regulatora PID koryguje kąt skrętu kół, utrzymując model w stałej, bezpiecznej odległości od bandy toru.
  • Zastosowanie: Jazda w korytarzach, tunelach, jazda wzdłuż band na torach kartingowych.

⚡ 3.3 FTG (Gap Follower) – CONTROL_MODE_AI_FTG

  • Opis: Wysokowydajny algorytm podążania za największą wolną luką (Follow The Gap), znany ze światowych zawodów autonomicznych wyścigów F1TENTH.
  • Zasada działania:
    1. Laser LiDAR skanuje przestrzeń przed pojazdem (zasięg 360° / pole widzenia 180°).
    2. Wykrywane są przeszkody i wokół każdej z nich wyznaczany jest tzw. "bąbel bezpieczeństwa" (Safety Bubble), w który pojazd nie może wjechać.
    3. Algorytm odnajduje najgłębszą i najszerszą wolną przestrzeń (lukę) i natychmiast kieruje koła w jej geometryczny środek, jednocześnie dynamicznie modulując prędkość.
  • Zastosowanie: Szybkie omijanie dynamicznych przeszkód i jazda w nieznanym otoczeniu bez uprzednio zbudowanej mapy.

🎯 3.4 PP (Pure Pursuit) – CONTROL_MODE_AI_PURE_PURSUIT

  • Opis: Klasyczny geometryczny algorytm śledzenia zaplanowanej ścieżki i punktów nawigacyjnych (Waypoint Tracking).
  • Zasada działania:
    • Wyznacza punkt na trajektorii oddalony o tzw. dystans wyprzedzenia (Lookahead Distance $L$).
    • Na podstawie rozstawu osi pojazdu ($L_{wb}$) oblicza idealny łuk skrętu $\delta$: $$\delta = \arctan\left(\frac{2 L_{wb} \sin(\alpha)}{L}\right)$$
    • Zapewnia wyjątkową płynność jazdy po wyznaczonej linii wyścigowej (Racing Line).
  • Zastosowanie: Jazda autonomiczna po trasach nagranych w GCS lub zaplanowanych w edytorze misji.

🤝 3.5 AI Assist (User Gaz) – CONTROL_MODE_AI_ASSIST

  • Opis: Zaawansowany tryb hybrydowy (współdzielona autonomia).
  • Zasada działania:
    • Sztuczna Inteligencja (Hailo-8 NPU / Sieć Neuronowa): Przejmuje kontrolę nad kątem skrętu kierownicy (Steering), utrzymując pojazd na optymalnym torze jazdy lub omijając przeszkody.
    • Kierowca (User): Zachowuje 100% kontroli nad pedałem gazu i hamulca (Throttle/Brake).
  • Zastosowanie: Idealny tryb szkoleniowy oraz wyścigowy – kierowca kontroluje tempo i hamowanie przed zakrętami, a sztuczna inteligencja dba o idealną linię wyścigową.

🤖 3.6 Full AI (Autopilot) – CONTROL_MODE_AI_FULL

  • Opis: Całkowita, bezzałogowa autonomia poziomu 4/5.
  • Zasada działania: Pokładowa sieć neuronowa (np. model klonowania behawioralnego Donkey Car na akceleratorze Hailo-8 NPU) lub zintegrowany planer misji przejmuje pełną kontrolę zarówno nad skrętem kół, jak i przepustnicą/hamulcem.
  • Zastosowanie: Samodzielne przejazdy na czas, demonstracje autonomii, automatyczne wyścigi robotów.

📹 4. Źródła Wideo i Silnik Przechwytywania (Video Engine)

Obraz wideo stanowi fundament immersyjnego prowadzenia w goglach FPV lub na monitorze stacji GCS:

  1. USB Camera / DirectShow Engine (60 FPS Fix):

    [!IMPORTANT] Domyślne wywołanie OpenCV na Windows negocjuje wolny format YUY2 (9.4 FPS przy 1080p). RCSIM wymusza format sprzętowy MJPG 1080p 60 FPS przekazując parametry wprost do konstruktora cv2.VideoCapture(index, cv2.CAP_DSHOW, params).

  2. WebRTC WHEP Stream (H.264 Low-Latency): Transmisja z usługi MediaMTX na Raspberry Pi 5 z opóźnieniem poniżej 50 ms.
  3. MJPEG Network Stream (ESP32): Odbiór strumienia HTTP z modułu kamery OV2640 na porcie 81 (http://<IP>:81/stream).
  4. RTSP Stream: Bezpośredni podgląd kamer sieciowych i cyfrowych odbiorników FPV (np. Walksnail Avatar VRX).
  5. Test Pattern: Syntetyczny generator klatek testowych do kalibracji OSD bez podłączonej kamery.

🎨 5. Profile OSD i Graficzny Edytor HUD

Warstwa OSD (On-Screen Display) nakłada kluczowe parametry telemetryczne bezpośrednio na strumień wideo.

Dostępne Profile OSD:

  • FPV Racing HUD: Minimalistyczny układ skupiony na prędkości, sztucznym horyzoncie i napięciu baterii.
  • Telemetry Heavy: Pełny zestaw wskaźników: przeciążenia G-Force, temperatura ESC/CPU, status RTK, kurs kompasu, wskaźnik przepustnicy i jakość łącza LQ.
  • Minimalist: Czyste pole widzenia z dyskretnym wskaźnikiem napięcia w narożniku ekranu.
  • Autonomous SLAM HUD: Podgląd wektora śledzenia ścieżki (Pure Pursuit Lookahead) oraz radaru zbliżeniowego LiDAR.
  • Cyberpunk / Night Vision / Drift: Specjalistyczne motywy kolorystyczne o wysokim kontraście.

Graficzny Edytor Układu (Drag & Drop):

  • Wizualne Przeciąganie Elementów: Każdy widget OSD (sztuczny horyzont, woltomierz, radar) można dowolnie przesuwać, skalować i konfigurować.
  • Przezroczystość i Kolorystyka (Opacity): Regulacja stopnia przyciemnienia tła zapobiegająca zasłanianiu przeszkód na torze.
  • Architektura Wtyczek (Hot-Loading): Rejestr OSDWidgetRegistry automatycznie skanuje i ładuje nowe klasy widgetów dziedziczące po OSDWidget.

[!CAUTION] PySide6 QPainter Safety Rule: Każde wywołanie painter.save() w metodach renderujących OSD musi być bezwzględnie ujęte w blok try ... finally: painter.restore(). Niedopełnienie tego warunku przy wyjątku w kodzie trwale zamraża całe GUI.


📊 6. Monitor Kanałów RC, Zasilanie i Diagnostyka Autopilota

W prawej i dolnej sekcji Kokpitu kierowca ma ciągły podgląd kluczowych parametrów stanu pojazdu:

  • Paski Słupkowe Kanałów RC (Channel Monitor): Wizualizacja w czasie rzeczywistym sygnałów wychylenia kierownicy (Steering), przepustnicy i hamulca (Throttle/Brake) oraz kanałów pomocniczych AUX1-AUX8 w mikrosekundach (1000 - 2000µs).
  • Przycisk UZBRÓJ / ROZBRÓJ (ARM / DISARM): Stan gotowości napędu z blokadą bezpieczeństwa przed przypadkowym ruszeniem silnika.
  • Stan Baterii i Monitor Zasilania (INA219 0x42): Odczyt napięcia całkowitego pakietu LiPo (V), prądu chwilowego (A), zużytej pojemności (mAh) oraz kalkulator napięcia pojedynczego ogniwa z ostrzeżeniem o rozładowaniu poniżej 3.4V.
  • Sztuczny Horyzont i Kompas: Precyzyjny kąt pochylenia wzdłużnego (Pitch) i poprzecznego (Roll) obliczany z fuzji filtrów EKF / Madgwick.
  • Status GPS & Precyzja RTK: Wskaźnik liczby satelitów, współczynnika HDOP oraz trybu pozycjonowania (Brak Fixa, 3D Fix, DGPS, RTK Float, RTK Fixed 1-2cm).

🗺️ 7. Interaktywna Mapa Operacyjna (MapWidget & MissionControlMapWidget)

Zintegrowana w Kokpicie interaktywna mapa operacyjna stanowi serce planowania przestrzennego, nawigacji i nadzoru misji:

🧭 7.1 Tryby Orientacji Mapy:

  • North-Up (Północ w Górze): Północ geograficzna jest zawsze zorientowana ku górze ekranu. Tryb zalecany do planowania strategicznego, edycji misji i analizy granic geofencingu.
  • Course-Up (Kierunek Jazdy w Górze): Mapa obraca się w czasie rzeczywistym wraz ze zmianą kursu (Heading) pojazdu. Kierunek poruszania się modelu wskazuje zawsze górę ekranu, co zapewnia maksymalną orientację sytuacyjną podczas jazdy FPV.
  • Przełącznik Trybu: Przycisk ze strzałką kierunkową na dolnym pasku narzędziowym mapy pozwala na błyskawiczne przełączanie pomiędzy North-Up a Course-Up.
  • Przycisk "Centruj" (Center on Vehicle): Natychmiast przesuwa kadr mapy i blokuje pozycję kamery na bieżącej lokalizacji pojazdu.

🌐 7.2 Fuzja Współrzędnych (GPS WGS84 + Lokalna Siatka SLAM):

Moduł CoordinateManager automatycznie przelicza globalne współrzędne satelitarne (Szerokość/Długość geograficzna WGS84) na lokalny układ kartezjański w metrach $(x_m, y_m)$, umożliwiając jednoczesne wyświetlanie pozycji GPS oraz laserowej siatki zajętości LiDARu SLAM.


📑 8. Panel Warstw Mapy (MapLayersPanel)

Kliknięcie w prawy górny narożnik mapy otwiera wysuwany boczny panel zarządzania warstwami graficznymi:

  1. Wybór Podkładu Mapy Kafelkowej (Map Providers):
    • 🌍 Standard (OSM) – OpenStreetMap: precyzyjne drogi, budynki, ścieżki i infrastruktura miejska.
    • 🛰️ Satelita (Esri) – Esri World Imagery: wysokorozdzielcze zdjęcia lotnicze i satelitarne (doskonałe do jazdy na parkingach, polach i torach zewnętrznych).
    • ⛰️ Topograficzna (OpenTopo) – Mapa hipsometryczna z warstwicami i ukształtowaniem terenu.
    • 🌙 Ciemna (Dark) – Kontrastowy motyw ciemny redukujący zmęczenie wzroku i maksymalizujący czytelność OSD.
  2. Warstwa Widoczności Kafelków (Widoczne / OSM Toggle): Możliwość całkowitego ukrycia podkładu mapowego na rzecz czystego widoku lokalnej siatki SLAM.
  3. Warstwa SLAM (LiDAR Occupancy Grid Overlay):
    • Włącza/wyłącza nakładanie mapy przeszkód generowanej z lasera LiDAR 2D.
    • Suwak Przezroczystości SLAM (0 - 100% Opacity): Pozwala płynnie dopasować nasycenie siatki laserowej względem podkładu satelitarnego.
  4. Warstwa Bramek AR (Bramki AR): Wyświetla wirtualne punkty kontrolne, bramki wyścigowe i strefy pomiaru czasu okrążeń.
  5. Przycisk "Wyczyść ślad" (🗑️ Wyczyść ślad): Błyskawicznie usuwa narysowaną dotychczas na mapie linię przebytej trasy pojazdu.

🛡️ 9. Menedżer Granic Bezpieczeństwa (Geofencing Editor)

Przycisk "Ustaw Granice" na pasku mapy otwiera dedykowane okno konfiguracji wirtualnego płotu:

  1. Rysowanie Wielokąta Bezpieczeństwa (Polygon Geofence):
    • Operator klika na mapie kolejne punkty wierzchołków, tworząc zamkniętą strefę dopuszczalnej jazdy (zielony obrys).
    • Punkty można dowolnie przesuwać myszą, usuwać lub dodawać nowe wierzchołki.
  2. Akcje Ratunkowe po Naruszeniu Strefy (Failsafe Actions):
    • RTL (Return To Launch): Pojazd natychmiast ignoruje sterowanie manualne, zawraca i najkrótszą bezpieczną trasą wraca do zapisanego punktu startowego (Home).
    • HARD STOP (DISARM_PCA): Krytyczne odcięcie silników. Stacja GCS wysyła sygnał wymuszonego rozbrojenia, a pin OE (Output Enable) mikrokontrolera PWM przechodzi w stan wysoki (Hi-Z w czasie <2 ms), zatrzymując pojazd w miejscu.
  3. Algorytm Ray-Casting: Niskopoziomowy moduł geofence_manager.py weryfikuje przynależność współrzędnych GPS do wielokąta w każdym cyklu telemetrii (50Hz), gwarantując zerowe opóźnienie reakcji na opuszczenie strefy.

🛤️ 10. Nagrywanie Toru i Wirtualne Trasy (Track Recording)

  • Przycisk "Nagrywaj Tor": Po wciśnięciu przycisk zmienia kolor na czerwony ("Zakończ Nagrywanie"), a system rozpoczyna ciągłe rejestrowanie trajektorii przejazdu (Breadcrumb Trail).
  • Wygładzanie Trajektorii (Spline Path Smoothing): Zarejestrowany surowy ślad GPS/SLAM może zostać poddany interpolacji krzywymi sklejanymi (Spline), tworząc idealną, płynną linię wyścigową bez ostrych załamań.
  • Konwersja do Misji: Nagrany przejazd można jednym kliknięciem przekształcić w aktywną misję waypointową dla algorytmu Pure Pursuit.

📋 11. Pełnoekranowy Edytor Misji i Waypointów (MissionEditorWindow)

Przycisk "Kreator Misji" otwiera zaawansowany edytor tras:

  1. Tabela Punktów Nawigacyjnych (Waypoint Table):
    • Każdy punkt posiada definiowaną szerokość i długość geograficzną, wysokość (Altitude), zadaną prędkość przejazdu (Target Speed w m/s lub km/h) oraz promień zaliczenia punktu (Acceptance Radius).
  2. Interaktywna Edycja na Mapie:
    • Dodawanie punktów kliknięciem lewego przycisku myszy.
    • Płynne przeciąganie punktów w celu modyfikacji promienia łuku zakrętu.
    • Automatyczne wyliczanie całkowitego dystansu trasy oraz szacowanego czasu przejazdu.
  3. Kompatybilność z Mission Plannerem & MAVLink 2.0:
    • Bezpośredni eksport i import plików misji w standardowych formatach .waypoints oraz .plan.
    • Asynchroniczne wgrywanie misji do kontrolera lotu ramkami MAVLink MISSION_ITEM_INT z obsługą protokołu potrójnego potwierdzenia (Mission Handshake).