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:
- 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.
- 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.
- 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).
- 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:
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:
- Laser LiDAR skanuje przestrzeń przed pojazdem (zasięg 360° / pole widzenia 180°).
- 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ć.
- 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:
- 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). - WebRTC WHEP Stream (H.264 Low-Latency): Transmisja z usługi MediaMTX na Raspberry Pi 5 z opóźnieniem poniżej 50 ms.
- MJPEG Network Stream (ESP32): Odbiór strumienia HTTP z modułu kamery OV2640 na porcie 81 (
http://<IP>:81/stream). - RTSP Stream: Bezpośredni podgląd kamer sieciowych i cyfrowych odbiorników FPV (np. Walksnail Avatar VRX).
- 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
OSDWidgetRegistryautomatycznie skanuje i ładuje nowe klasy widgetów dziedziczące poOSDWidget.
[!CAUTION] PySide6 QPainter Safety Rule: Każde wywołanie
painter.save()w metodach renderujących OSD musi być bezwzględnie ujęte w bloktry ... 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-UpaCourse-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:
- 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.
- Warstwa Widoczności Kafelków (
Widoczne/ OSM Toggle): Możliwość całkowitego ukrycia podkładu mapowego na rzecz czystego widoku lokalnej siatki SLAM. - 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.
- Warstwa Bramek AR (
Bramki AR): Wyświetla wirtualne punkty kontrolne, bramki wyścigowe i strefy pomiaru czasu okrążeń. - 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:
- 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.
- 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.
- Algorytm Ray-Casting: Niskopoziomowy moduł
geofence_manager.pyweryfikuje 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:
- 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).
- 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.
- Kompatybilność z Mission Plannerem & MAVLink 2.0:
- Bezpośredni eksport i import plików misji w standardowych formatach
.waypointsoraz.plan. - Asynchroniczne wgrywanie misji do kontrolera lotu ramkami MAVLink
MISSION_ITEM_INTz obsługą protokołu potrójnego potwierdzenia (Mission Handshake).
- Bezpośredni eksport i import plików misji w standardowych formatach