DOCS/Kompendium Wiedzy
|
Rozdział 10: Diagnozowanie Problemów, Logi Systemowe i Baza Wiedzy (Gotchas 1-25)
Niniejszy rozdział zbiera sprawdzone procedury diagnostyczne oraz pełną bazę 25 kluczowych pułapek architektonicznych (Gotchas 1-25) zidentyfikowanych i rozwiązanych w rozwoju systemu RCSIM.
📋 1. Kompletna Tabela Pułapek Architektonicznych (RCSIM Gotchas 1-25)
| # | Obszar | Wykryty Problem | Wdrożona Poprawka Architektoniczna |
|---|---|---|---|
| 1 | PySide6 & QPainter | Brak parowania wywołań w rysowaniu OSD zawiesza GUI. | Każdy painter.save() musi być ujęty w blok try...finally z painter.restore(). |
| 2 | WebRTC / UDP MTU | Pakiety >1100B fragmentują i zrywają transmisję. | Obowiązkowy moduł chunking.py z kontrolerem __c: 1. |
| 3 | Qt Thread Affinity | Modyfikacja widgetów z pod-wątków powoduje wycieki pamięci. | Aktualizacja wyłącznie przez sygnały Qt (Signal.emit()). |
| 4 | NaN Guard Telemetria | Wartość NaN w telemetrii wywołuje crash GUI przy rzutowaniu int. |
Obowiązkowa walidacja math.isfinite() przed przetwarzaniem danych. |
| 5 | AI Hailo-8 NPU | Niezgodność wymiarów macierzy rzuca wyjątek NPU. | Wymuszenie cv2.resize() oraz np.expand_dims(frame, axis=0). |
| 6 | BreezySLAM C-Locks | Równoległy odczyt silnika C powoduje Segmentation Fault. | Obowiązkowy threading.Lock() (SLAM Mutex) w pętli skanowania. |
| 7 | Tryb RCSIM-MCS | Wymóg bezkomputerowej pracy w terenie. | Headless RPi 5 + RP2350, własny AP Wi-Fi i sterowanie z WebUI. |
| 8 | Thrustmaster Pedals | Tryb Combined nakłada hamulec i gaz na oś skrętu Linux. | Wymuszony tryb Separate Mode w firmware kierownicy. |
| 9 | OpenCV DSHOW USB | Domyślne YUY2 na Windows obniża płynność do 9.4 FPS. | Przekazanie parametrów MJPG 60FPS bezpośrednio w konstruktorze VideoCapture. |
| 10 | WebRTC FPV Watchdog | Zbyt krótki timeout (3s) zrywa wideo przy braku enkodera. | Karencja co najmniej 15s od statusu connected przed resetem streamu. |
| 11 | Tailscale / MediaMTX | Brak serwera STUN w VPN zrywa pakiety wideo. | Wpisanie webrtcICEServers: [stun:stun.l.google.com:19302]. |
| 12 | RP2350 USB CDC | Reset DTR przy otwarciu portu oraz przepełnienie bufora IN. | Ustawienie dtr=True, rts=True, delay 300ms oraz czyszczenie bufora. |
| 13 | Kolizja dead_zones | Konflikt typów pola dead_zones (LiDAR list vs PWM dict) powoduje crash AttributeError. |
Walidacja wstępna @field_validator(mode="before") oraz sprawdzanie isinstance(raw, dict). |
| 14 | Audio PPM (Tier 0) | Wyciszenie do 0.0V wyzwala alarm Trainer signal lost w EdgeTX, a nadpisywanie bufora rwie fazę. |
Double buffering na granicach ramek (pos == 0), ciągła ramka neutralna [1500]*8, szpilka 500µs. |
| 15 | Cykl życia QDialog | Zamykanie dialogu przez Esc lub done(result) omija closeEvent, powodując wyciek listenerów. |
Czyszczenie listenerów i zatrzymywanie nasłuchiwania w nadpisanej metodzie done(result). |
| 16 | TTS na Windows (SAPI5) | Błąd comtypes w pyttsx3 gubi kolejne komunikaty po pierwszym wywołaniu runAndWait(). |
Bezpośrednie użycie COM win32com.client.Dispatch("SAPI.SpVoice") z zerowaniem referencji przed CoUninitialize(). |
| 17 | PyTorch & CUDA DLL | Osierocone pliki c10_cuda.dll przy instalacji wersji CPU wywołują WinError 127. |
Sekcja [InstallDelete] w instalatorze Inno Setup oraz usuwanie osieroconych DLL w main.py. |
| 18 | Odnośniki do Wydań | Wpisywanie niesprawdzonych tagów GitHub Releases prowadziło do błędów 404 dla użytkowników. | Bezpośrednie hostowanie i pobieranie instalatora z Cloudflare R2 (setup_RCSIM.exe). |
| 19 | RadioMaster Nomad (MCS) | Błędny baudrate 420k na Linuxie oraz zmiana pinów USB UART0 (RX:3, TX:1) blokowały łączność. | Standardowy baudrate 115200 bps, ciągły strumień 100Hz i Heartbeat 0x0B co 100ms. |
| 20 | Obrazy MCS OS (PiShrink) | Obraz z karty SD zawierał domowe sieci Wi-Fi, hasła oraz niepotrzebny plik swap 1.2GB. | Skrypt sanityzacji clean_mcs_image.sh, pishrink.sh -s (ochrona uap0) oraz S3 Multipart na Cloudflare R2. |
| 21 | Konfigurator LUA (CRSF) | Firmware ELRS ignoruje pakiety zapisu parametrów (0x2D) z adresem nadajnika 0xEA. |
Wymuszenie adresu LUA 0xEF (ADDR_ELRS_LUA), big-endian (>H, >f) i kolejkowanie 1 ramki/cykl. |
| 22 | Metadane Wydań | Niespójne rozmiary plików i sumy kontrolne między stroną a instalatorem. | Centralizacja w version.json, dynamiczny import w lib/release.ts oraz sync do RCSIM_Releases_PC_APP. |
| 23 | ELRS na ESP8285 (ER5C V2) | Wybór protokołu GPS przejmował pin TX (CH2), odcinając wyjście serwa/ESC PWM. | Inicjalizacja SERIAL_RX_ONLY na porcie UART, odblokowanie pinu ESC oraz auto-baudrate GPS. |
| 24 | CRSF DISARM & Stop | Pętla transceivera po wyłączeniu stacji zatrzymywała ostatnie wychylenia gazu/skrętu. | Natychmiastowe zerowanie channels_norm do 1500µs, wymuszenie AUX1 (CH5) = 1000µs i pakiet STOP. |
| 25 | Dekodowanie RSSI CRSF | Błędna negacja signed int8_t (np. 230 jako -230 dBm) przy odbiornikach Semtech SX1280. |
Obsługa kodu U2: dla raw > 127 przeliczenie raw - 256 (-26 dBm), dla raw <= 127 -raw. |
