|

Rozdział 2: Konfiguracja Hardware i Montaż

W tym rozdziale zajmiemy się fizycznym połączeniem komponentów. Niezależnie od wybranego poziomu zaawansowania (Tier), kluczem do sukcesu jest solidny montaż mechaniczny i bezbłędnie przemyślane zasilanie.

Dla zaawansowanych u?ytkownik?w na ko?cu rozdzia?u przygotowali?my Sekcj? In?ynieryjn? (Hardware Masterclass), opisuj?c? elementy faktycznie obecne w kodzie RPi: autodetekcj? wybranych sensor?w, konfigurowan? kalibracj? oscylatora PCA9685 oraz failsafe oparte o neutralizacj? PWM i pin OE.

🏗️ 1. Montaż Mechaniczny (Odporność na wibracje)

Twoje auto RC będzie podskakiwać, uderzać w barierki i wibrować z bardzo wysoką częstotliwością. Jeśli po prostu ułożysz elektronikę na podwoziu, szybko skończysz z garściami wypiętych kabli.

Złote zasady montażu:

  • Platforma montażowa: Jeśli nie masz dostępu do drukarki 3D, użyj dociętego kawałka pleksi, laminatu lub twardego plastiku. Przykręć go do słupków karoserii, tworząc bezpieczne "drugie piętro" dla elektroniki, z dala od wałów napędowych i błota.

  • Mocowanie Raspberry Pi: Użyj dystansów (rozmiar M2.5). Nigdy nie kładź płytek drukowanych bezpośrednio na metalowych elementach podwozia – grozi to natychmiastowym zwarciem.

  • Kamera: Musi być zamocowana idealnie sztywno (np. na drukowanym uchwycie lub mocnej taśmie VHB). Zalecany kąt pochylenia to 15-20 stopni w dół – pozwala to sztucznej inteligencji widzieć tor tuż przed maską pojazdu, zachowując przy tym widoczność horyzontu.

Je?li u?ywasz gimbala, pod??cz jego serwa do kana??w PCA9685 zgodnych z konfiguracj? RPi; domy?lnie gimbal.pitch_channel to 4, a gimbal.roll_channel to 5.

  • Zarządzanie kablami: Używaj małych trytytek (opasek zaciskowych). Luźny przewód może wkręcić się w zębatki lub zablokować orczyk serwa skrętu, co doprowadzi do natychmiastowego wypadku. Luźne kable mogą wkręcić się w zębatki, wały napędowe, koła.

🔌 Lutowanie vs Kabelki Jumper

Jeśli jesteś nowicjuszem, kusi Cię użycie tylko kabelków wsuwanych.

  • Kabelki (Jumper Wires): Dobre do testów na biurku. Na torze – wypinają się od samych wibracji silnika.

  • Lutowanie (Rekomendowane): To jedyny sposób na 100% pewne połączenie.

  • Mini-kurs lutowania w 3 zdaniach:

  • Rozgrzej lutownicę (ok. 350 stopni).

  • Dotknij grotem jednocześnie pada na płytce i drucika (ok. 2 sekundy), nagrzej miejsce lutowania.

  • Dotknij cyną tego miejsca (nie grota!), aż się rozpłynie i utworzy błyszczący "stożek". Gotowe!

⚡ 2. Zasilanie: Separacja Logiki od Napędu

To najważniejszy punkt całego poradnika. Nigdy nie zasilaj serwomechanizmów skrętu bezpośrednio z pinów 5V Raspberry Pi lub ESP32!

  • Problem: Serwo podczas gwałtownego skrętu (szczególnie pod obciążeniem) pobiera impulsowo bardzo duży prąd (często powyżej 2A). Powoduje to natychmiastowy spadek napięcia na płytce, co skutkuje tzw. brown-outem – Twoje RPi po prostu zrestartuje się w połowie zakrętu.

  • Rozwiązanie (Separacja):

  • Logika (RPi / Sensory): Zasilana z UPS Hat (z własnymi ogniwami 18650) lub dedykowanego, mocnego układu BEC 5V (Battery Eliminator Circuit) lub dedykowanego PowerBanku.

  • Serwa (PCA9685): Zasilamy z BEC (regulatora wbudowanego w ESC Twojego auta). Podepnij przewody 5V i GND z ESC do złącza śrubowego na module PCA9685. Ewentualnie podłącz ESC bezpośrednio do gniazda serwa na PCA.

  • Napęd (Serwa / Silnik Główny): Zasilane z głównego akumulatora (LiPo) za pośrednictwem ESC (regulatora obrotów w aucie).

Wspólna masa: Pamiętaj, aby połączyć masę (GND) Raspberry Pi/ESP32 i PCA9685, aby sygnały miały wspólny punkt odniesienia. Bez wspólnej masy sygnał PWM będzie niekształcony, a serwa zaczną drżeć!

🏎️ 3. Konfiguracja Fizyczna (Podłączanie Tierów)

Tier 1: Arduino Bridge (Jazda na kablu)

Najprostszy sposób na "ożywienie" auta przez PC.

  • Połączenie: Podepnij pin D10 Arduino (to nasze wyjście sygnału PPM) do wejścia sygnału w Porcie Trenera Twojej aparatury RC. Pamiętaj o połączeniu pinów masy (GND)!

  • Zasilanie: W tym trybie Arduino jest zasilane bezpośrednio z kabla USB podpiętego do komputera.

Ta wersja jest przygotowana, jeśli chcesz używać standardowego odbiornika RC, który akceptuje sygnał PPM. Arduino będzie odbierać dane o 8 kanałach z aplikacji PC przez port szeregowy i konwertować je na jeden, zbiorczy sygnał PPM.

Potrzebujesz:

  • Dowolna aparatura RC z portem trenera (Trainer Port / DSC).

  • Arduino (Nano/Uno/Leonardo).

  • Kabel Jack 3.5mm (lub odpowiedni dla Twojej aparatury).

Krok 1: Przygotowanie oprogramowania (Firmware)

Opisane w Rozdziale 1, tutaj krótkie przypomnienie.

  • Pobierz i zainstaluj Arduino IDE ze strony arduino.cc.

  • Zainstaluj bibliotekę PPMEncoder: W Arduino IDE wybierz Szkic -> Dołącz bibliotekę -> Zarządzaj bibliotekami. Wyszukaj "PPMEncoder" i kliknij Instaluj.

  • Otwórz plik Arduino.ino (znajdziesz go w Arduino Tier 1).

  • Wgraj kod na płytkę (Ikonka strzałki "Wgraj").Kluczowe funkcje:

Obsługa 8 kanałów: Kod jest zgodny z aplikacją PC, która wysyła dane dla 8 kanałów.

Zwiększona prędkość: Baudrate podniesiony do 115200 dla szybszej i bardziej niezawodnej komunikacji.

Failsafe: Jeśli w ciągu 0.5 sekundy nie nadejdą nowe dane, Arduino automatycznie ustawi wszystkie kanały na pozycję neutralną (1500µs), zapobiegając niekontrolowanemu zachowaniu modelu.

Wskaźnik LED: Wbudowana dioda LED informuje o statusie połączenia.Przykład konfiguracji dla Radia RadioMaster MT12

Wejdź w MDL -> Special Functions.

Ustaw nową funkcję: SF1 -> Wybierz dowolny przełącznik (np. SA) -> Funkcja: Trainer -> Parametr: Stick (lub All) -> Zaznacz Enable.

Jeśli dioda mruga, a w menu SYS -> Trainer nadal są same zera (0.0), to na 100% mamy problem z kablem lub masą. Sprawdź wtedy, czy masa (GND) z Arduino jest na pewno połączona z kablem idącym do radia

Aktywacja przełącznikiem: Upewnij się, że masz przypisany przełącznik (np. SA) do funkcji Trainer w menu Special Functions. Dopiero gdy go przełączysz, radio odda kontrolę do Arduino.

Sprawdź kierunki: Poruszaj kierownicą w GCS i zobacz, czy koła skręcają w dobrą stronę. Jeśli nie, najprościej jest zmienić wagę z 100 na -100 w menu MDL -> Trainer dla danego kanału.

Kalibracja: Jeśli w pozycji neutralnej koła są lekko skręcone, możesz użyć funkcji Cal na dole strony MDL -> Trainer, aby wycentrować sygnał z Arduino.

Gratulacje! Właśnie uruchomiłeś pełny stos technologiczny Tier 1 (PC -> Serial -> Arduino -> PPM -> Radio).

Jak to działa:

W aplikacji RCSIM GCS wybierz tryb po??czenia Arduino; w Kokpicie jest opisany jako "Arduino (Port Trenera)", a w konfiguracji portu jako wariant szeregowy/Serial.

Wybierz odpowiedni port COM i baudrate 115200.

Połącz się. Aplikacja zacznie wysyłać dane w formacie 1500,1500,1500,...\n.

Arduino odbierze te dane, przetworzy je i wygeneruje sygnał PPM na pinie D10.

Uwaga

RCSIM to jednoosobowy projekt z ograniczonym funduszem, realizowany hobbystycznie. Nie mam jak sprawdzić większej ilości nadajników. Dlatego zapraszam na Discord oraz Steam do dzielenia się swoimi doświadczeniami i konfiguracją.

https://docs.arduino.cc/resources/pinouts/A000066-full-pinout.pdf

Krok 2: Jak sprawdzić port COM w Windows?

Jeśli nie wiesz, który port wybrać w Arduino IDE lub GCS:

  • Kliknij Prawym Przyciskiem Myszy na ikonę Start i wybierz Menedżer urządzeń.

  • Rozwiń sekcję Porty (COM i LPT).

  • Twoje Arduino pojawi się jako Arduino Uno (COMx) lub USB Serial Port (COMx). Kliknij PPM w danym porcie COM, następnie zmień Liczbę bitów na 115200.

  • Trik: Jeśli masz dużo portów, odłącz na chwilę Arduino od USB – port, który zniknie z listy, to właśnie ten, którego szukasz!

Krok 3: Połączenie fizyczne

  • Połącz pin D10 w Arduino (wyjście sygnału) z wejściem sygnału w porcie trenera aparatury.

  • Połącz masę (GND) w Arduino z masą (GND) portu trenera aparatury.

  • Podłącz Arduino kablem USB do PC.

Krok 4: Ustawienie aparatury i GCS

  • W aparaturze wejdź w ustawienia modelu i włącz tryb Student (lub Trainer/Master).

Przykład dla nadajnika RadioMaster MT12

  • W aplikacji GCS, w zakładce Connection, wybierz port COM Twojego Arduino i kliknij Connect.

📡 Tier 2: The WiFi Racer (ESP32 Cam/Wrover)

Idealne dla ma?ych autek (np. skala 1:28 lub 1:18). ESP32 w wariancie WiFi Lite mo?e obs?ugiwa? po??czenie sieciowe, kamer? i sterowanie zgodnie z wgranym szkicem z RCSIM_PC/pc_app/ESP32Arduino/; zakres funkcji zale?y od u?ytej p?ytki i firmware.

Potrzebujesz:

  • Moduł ESP32-CAM (rekomendowany AI-Thinker lub WROVER-DEV).

  • Sterownik serw PCA9685 (I2C).

  • Żyroskop MPU6050 (opcjonalnie dla telemetrii IMU).

  • Stabilne zasilanie 5V (min. 2A).

Krok 1: Przygotowanie Arduino IDE dla ESP32

Krok 2: Konfiguracja i Wgrywanie (Firmware)

  • Otwórz plik ESP32.ino z folderu RCSIM_PC/pc_app/ESP32Arduino/ESP32/.

  • Wybierz płytkę: Odkomentuj linię #define BOARD_AI_THINKER lub #define BOARD_WROVER_DEV (zależnie od tego, co masz na stole).

  • WiFi: Wpisz nazwę swojej sieci (ssid) i hasło (password) w liniach 103-104.

Możesz również ustawić adres IP, by ułatwić łączenie z GCS

  • Ustawienia płytki: W menu Narzędzia wybierz płytkę AI Thinker ESP32-CAM. Jeśli masz wrover, wybierz ESP32 Wrover Module oraz ustaw dodatkowe opcje.

  • Teraz możesz przejść do wgrania oprogramowania na ESP32, w tym celu naciśnij przycisk -> Prześlij

  • Jeśli wszystko się powiodło, możesz przejść do RCSIM GCS i ustawiać połączenie w zakładce Konfiguracja-> Ustawienia Połączeń->ESP32

Krok 3: Połączenie fizyczne (I2C i Kamera)

  • AI-Thinker: Podłącz PCA9685/MPU6050 do pinów SDA: 21, SCL: 22.

  • WROVER-DEV: Podłącz PCA9685/MPU6050 do pinów SDA: 13, SCL: 14

Konflikt I2C: Standardowe piny 26/27 są zajęte przez interfejs kamery OV2640. Dlatego magistralę dla PCA9685 i MPU6050 programowo przesunięto na SDA = Pin 13 i SCL = Pin 14.

MJPEG Tunning: Strumień kamery jest podwójnie buforowany (fb_count=2) i taktowany sygnałem 20MHz XCLK w trybie zapisu Flash DIO (40MHz), co gwarantuje stabilność termiczną modułu. Kod wymusza 500ms delay przed startem interfejsu kamery, aby uniknąć fizycznych błędów zasilania matrycy.

  • Zasilanie: Podłącz stabilne 5V do pinu 5V w ESP32. Jeśli obraz "śnieży" lub WiFi zrywa połączenie – Twoje zasilanie jest za słabe.

Złota zasada RCSIM dla Tier 2:

Jeśli budujesz model docelowy, najlepiej zastosować osobny BEC 5V/3A tylko dla logiki (ESP32, sensory) i osobny dla serw (przez PCA).

Jeśli musisz użyć jednego źródła:

Zasilanie z BEC (5V) -> Pin VIN w ESP32.

Wspólna masa (Common Ground) – upewnij się, że GND z PCA, ESP32 i akumulatora są połączone.

UWAGAPCA9685: Ten układ używa, wewnętrznego oscylatora, który teoretycznie pracuje z częstotliwością 25 MHz. W rzeczywistości te wbudowane zegary mają gigantyczny rozrzut fabryczny. Twój układ może pracować na 26 MHz, a inny egzemplarz z tej samej taśmy na 24 MHz. Co gorsza, ta częstotliwość pływa w zależności od temperatury układu i napięcia zasilania.

Dlatego w kodzie dla ESP32 została wprowadzona autokalibracja.

w celu korekty pracy kwarcu podłącz pin 15 układu PCA z pinem 12 ESP. System przy starcie sam dokona kalibracji. A twój sygnał neutralny będzie zawsze wynosił 1500us.

Krok 4: Uruchomienie w GCS

  • Po wgraniu kodu otwórz Monitor Szeregowy w Arduino IDE (115200 baud). Odczytaj adres IP (np. 192.168.31.111).

  • W GCS, w zakładce Konfiguracja, wybierz tryb ESP32 (WiFi Lite Mode).

  • W polu IP wpisz adres odczytany z Arduino IDE .

  • Wróć do Kokpitu i uruchom Okno FPV. Jeśli widzisz obraz – jesteś gotowy do jazdy!

Tier 3: Nomad + Odbiornik ExpressLRS

RCSIM obsługuje nadajnik Nomad oraz komunikację z odbiornikami ELRS.

Ten tier nie wymaga od ciebie używania Adruino, ESP32, czy też Rasppery Pi. Możesz łączyć się bezpośrednio ze swoim modelem używając standardowych systemów modelarskich. W tym trybie aby korzystać z FPV potrzebujesz systemu FPV np. Walksnail.

RCSIM wspiera źródło obrazu z USB. System taki jak Walksnail podłączamy poprzez grabber HDMI do portu USB komputera.

🥧 Tier 4.1: The Enthusiast (RPi 5 + Podstawowe Sensory)

Raspberry Pi 5 to potężny "mózg", który pozwala na pełną autonomię. Pamiętaj: nie musisz od razu kupować wszystkiego. Aby auto ruszyło i przesyłało podstawową telemetrię, wystarczą dwa moduły na szynie I2C.

Link do strony z opisami Pinout RPi https://pinout.xyz/pinout/

🛠️ Minimalny Setup (Na start)

Do podstawowego działania potrzebujesz tylko:

Precyzyjne Sterowanie (PCA9685) i Failsafe

PCA9685 (Sterownik Serw PWM): Adres sprzętowy 0x40. To on fizycznie rusza kierownicą i przepustnicą.

Fizyczna warstwa ruchu zarządzana jest przez moduł PCA9685 pracujący domyślnie z częstotliwością 50Hz.

  • Kompensacja Kwarcu (Autokalibracja): RPi obs?uguje sprz?towo-programow? autokalibracj? PCA9685, je?eli w konfiguracji hardware.pca9685.auto_calibrate jest aktywne i wykonano przew?d pomiarowy z kana?u kalibracyjnego do GPIO. Domy?lna konfiguracja u?ywa kana?u 15 oraz GPIO 17.

  • Wymagania: Konieczne jest stałe połączenie (zworka) między pinem wyjściowym PCA CH15 a pinem GPIO 17 (Physical Pin 11) w Raspberry Pi.

  • Algorytm: Po starcie, RPi wysyła impulsy do CH15 i nasłuchuje ich na GPIO17. Używając filtra medianowego (7 próbek), oblicza realne taktowanie i przestraja układ z dokładnością do 1 ticka (~5µs). Daje to gwarancję, że 1500µs wysłane z GCS to fizyczne 1500µs na serwie. Ograniczenie bezpieczeństwa w kodzie blokuje dziwne odczyty poniżej 15 MHz i powyżej 35 MHz.

  • Sprzętowy Failsafe (Pin OE): Moduł obsługuje pin OE (Output Enable) kontrolera PCA.

  • Łączymy go z pinem GPIO 27 (Physical Pin 13) w RPi.

  • Logika Active-Low: Niski = układ pracuje, Wysoki = układ zablokowany. Natychmiast po wykryciu utraty pakietów (zerwanie sieci) lub zamknięciu serwisu, RPi wymusza stan WYSOKI, wprowadzając wyjścia PWM w stan wysokiej impedancji (High-Z). Silniki zostają natychmiast rozłączone.

  • Hard Clamping: Bez względu na to, co GCS wyśle po sieci, natywny mikser na RPi obcina sygnały kierownicy i gazu do twardych limitów (steering_min, steering_max oraz throttle_min, throttle_max) zadeklarowanych w systemowym pliku konfiguracyjnym (config.json na RPi).

  • IMU (Czujnik ruchu, np. MPU6050/BNO085): Adres 0x68. Dostarcza danych o orientacji przestrzennej pojazdu.

⛓️ Magistrala I2C (SDA i SCL) – Jak to połączyć?

Wiele osób pyta: "Jak mam podłączyć dwa czujniki, skoro mam tylko jedne piny SDA/SCL?". Odpowiedź: I2C to magistrala równoległa. Oznacza to, że wszystkie czujniki (PCA, IMU, UPS Hat) podpinasz do tych samych dwóch pinów w RPi używając I2C HUB.

Schemat połączenia (RPi 5):

  • VCC (5V) -> Pin 2 lub 4 w RPi.

  • GND (Masa) -> Pin 6 lub 9 w RPi.

  • SDA (Dane) -> Pin 3 (GPIO 2) w RPi.

  • SCL (Zegar) -> Pin 5 (GPIO 3) in RPi.

🛰️ Tier 4.2: The Explorer (GPS RTK LC29H)

Jeśli planujesz jazdę autonomiczną na zewnątrz, precyzja centymetrowa jest niezbędna. W RCSIM używamy modułu LC29H (w formie HAT).

🔌 Podłączenie (HAT)

W przeciwieństwie do modułów USB, LC29H nakłada się bezpośrednio na piny GPIO Raspberry Pi.

  • Komunikacja: Moduł komunikuje się przez port UART (domyślnie /dev/ttyAMA0).

  • Konfiguracja: Aby RPi "zobaczyło" GPS, w pliku config.txt musi być wyłączona konsola szeregowa (enable_uart=1).

Ale w RCSIM zadbaliśmy o to by nasz Deployment Tool wykonał za Ciebie wszystko. Wystarczy zaznaczyć swoją konfigurację i wgrać oprogramowanie na RPi.

📡 Montaż Anteny

  • Moduł HAT posiada złącze IPEX lub SMA.

  • Antena RTK musi być wyprowadzona na zewnątrz obudowy i umieszczona na metalowej podstawce (Ground Plane) dla najlepszego odbioru sygnału.

  • W zestawie z GPS z pewnością dostałeś odpowiednią antenę.

Jeśli posiadasz inny moduł GPS, to nie problem. Wystarczy, że wpiszesz swój kod do aplikacji. Szczegóły w załączniku B.

🔋 Tier 4.3: Power & Stability (UPS HAT)

To najważniejszy element dbający o to, by Twoje Raspberry Pi nie "zgasło" przy gwałtownym dodaniu gazu.

🛡️ Dlaczego UPS?

Silnik auta RC przy starcie pobiera ogromny prąd, co może spowodować chwilowy spadek napięcia na głównym akumulatorze. Bez UPS-a, Raspberry Pi zrestartuje się w połowie wyścigu.

  • Separacja: UPS HAT zasila RPi z własnych ogniw 18650, podczas gdy akumulator auta zasila tylko silnik i serwa. Dodatkowo jeśli używasz pakietów 2s możesz dolutować dodatkowe złącze. Dzięki temu możesz zasilać RPi z tego pakietu i mieć pomiar napięcia w modelu.Uwaga UPS HAT nie mierzy prądów w obwodzie zasilania modelu, tylko zasilanie RPi.

📊 Monitoring (I2C)

UPS HAT komunikuje się z RPi przez szynę I2C (Adres 0x42). Dzięki temu w GCS widzisz dokładnie:

  • Procent naładowania baterii RPi.

  • Napięcie i natężenie prądu.

🥪 Montaż "Kanapka"

W Tier 3 często budujemy "kanapkę":

  • Na dole Raspberry Pi 5.

  • W środku UPS HAT.

  • Na górze GPS RTK HAT (używając przedłużonych pinów GPIO).

⚡ Tier 5: The Pro Pilot (Nomad + XR4 ExpressLRS + System FPV)

To konfiguracja dla profesjonalistów, którzy potrzebują 100% pewności połączenia na dystansach liczonych w kilometrach bez użycia internetu. Wykorzystujemy tutaj link radiowy mLRS (MAVLink Low Latency Radio System).

📡 Dlaczego profesjonalne Radio?

  • Zasięg: WiFi kończy się po 50-100 metrach. Link radiowy (868MHz/2.4GHz) pozwala na jazdę po ogromnych torach bez lagów.

  • Telemetria MAVLink: GCS otrzymuje dane o aucie tym samym protokołem, którego używają drony wojskowe i przemysłowe.

🔌 Połączenie XR4 -> RPi 5 (UART3)

Na Raspberry Pi 5 używamy dedykowanego portu UART3, aby uniknąć konfliktów z Bluetooth i systemem.

  • VCC (5V) -> Pin 2 lub 4 w RPi.

  • GND (Masa) -> Pin 6 w RPi.

  • RX (Odbiornik) -> Pin 8 (GPIO 8 / TX) w RPi.

  • TX (Nadajnik) -> Pin 10 (GPIO 9 / RX) w RPi.

UWAGA / CRITICAL: Baudrate: Aby telemetria była stabilna i nie rwała połączenia, zarówno w GCS, jak i w konfiguracji RPi ustawiamy prędkość 57600 bodów. To "złoty standard" dla linków radiowych.

⚙️ Konfiguracja Systemowa

Aby port UART3 stał się aktywny, w pliku /boot/firmware/config.txt musi znaleźć się linijka: dtoverlay=uart3

Nasze narzędzie Deployment Tool wykona tę konfigurację automatycznie podczas przygotowywania systemu.

🧠 Tier 6: The AI Master (AI Hat + Hailo-8)

To najwyższy stopień wtajemniczenia. Dzięki modułowi Hailo-8 Twoje auto zyskuje moc obliczeniową wystarczającą do uruchamiania zaawansowanych sieci neuronowych (Behavioral Cloning, Detekcja obiektów) w czasie rzeczywistym.

🚀 Potęga NPU (Neural Processing Unit)

Standardowy procesor Raspberry Pi 5 nie jest w stanie płynnie przetwarzać wideo przez sztuczną inteligencję. Hailo-8 wykonuje te obliczenia sprzętowo (26 TOPS), pozwalając na jazdę autonomiczną z prędkością nawet 30-50 klatek na sekundę.

🛠️ Montaż i PCIe

  • Instalacja: Zamontuj AI Kit na RPi 5. Bądź bardzo ostrożny z taśmą PCIe — jest niezwykle delikatna!

  • Dysk M.2: Upewnij się, że moduł Hailo jest solidnie dokręcony śrubką do płytki HAT.

  • Chłodzenie: Wymagany Active Cooler. RPi 5 z modułem AI generuje dużo ciepła. Bez wentylatora system zwolni, a AI zacznie "lagować".

⚙️ Konfiguracja PCIe Gen 3

Dla maksymalnej wydajności musimy wymusić na RPi 5 szybszą komunikację z modułem AI. W pliku /boot/firmware/config.txt dodajemy: dtparam=pciex1_gen=3

$$!TIP$$

Jeśli po wgraniu systemu GCS nie widzi procesora Hailo, sprawdź czy taśma PCIe nie jest wypięta lub odwrotnie włożona. To najczęstsza przyczyna problemów w Tier 5.

🧠 Sekcja Inżynieryjna: Hardware Masterclass (Prawda z Kodu)

Ten podrozdział opisuje, co dokładnie dzieje się pod maską oprogramowania nałożonego na nasz hardware. Wiedza ta jest kluczowa dla inżynierów diagnozujących usterki i budujących customowe konstrukcje (Tier 4, Tier 5, Tier 6).

1. Wykrywanie Sensorów i Resiliencja (SensorRegistry)

Moduł SensorAggregator.py na RPi wykorzystuje zaawansowany wzorzec automatycznego wykrywania sterowników (SensorRegistry).

  • IMU Auto-detection: Podczas uruchamiania, system skanuje magistralę I2C na standardowych adresach (domyślnie 0x68, 0x69). Potrafi automatycznie rozpoznać i załadować odpowiednie profile dla układów takich jak: LSM6DS3 (v6.0+), MPU6050 (Legacy), czy potężny BNO055 (Absolute Orientation).

  • Kompensacja Magnetyczna (Nowość!): Odczyty z żyroskopu i magnetometru są programowo korygowane o aktualną wartość parametru Throttle (Gazu). Zniwelowano w ten sposób szumy i zakłócenia elektromagnetyczne (EMI) generowane przez duże prądy płynące do bezszczotkowego silnika głównego.

  • Modularność i Hot-plug: Brak fizycznego podłączenia peryferiów (UPS, GPS, LiDAR) nie blokuje startu całego systemu. Zamiast crashu, system rzuca pojedynczy Warn-Once w logach. Pętla co 10 sekund ponawia skanowanie – jeśli podłączysz sprzęt w trakcie pracy (Hot-plug), włączy się on do ekosystemu bez restartowania usługi.

2. Precyzyjne Sterowanie (PCA9685) i Failsafe

Fizyczna warstwa ruchu zarządzana jest przez moduł Hatak/PCA9685 pracujący domyślnie z częstotliwością 50Hz.

  • Kompensacja Kwarcu (Autokalibracja): RPi obs?uguje sprz?towo-programow? autokalibracj? PCA9685, je?eli w konfiguracji hardware.pca9685.auto_calibrate jest aktywne i wykonano przew?d pomiarowy z kana?u kalibracyjnego do GPIO. Domy?lna konfiguracja u?ywa kana?u 15 oraz GPIO 17.

  • Wymagania: Konieczne jest stałe połączenie (zworka) między pinem wyjściowym PCA CH15 a pinem GPIO 17 (Physical Pin 11) w Raspberry Pi.

  • Algorytm: Po starcie, RPi wysyła impulsy do CH15 i nasłuchuje ich na GPIO17. Używając filtra medianowego (7 próbek), oblicza realne taktowanie i przestraja układ z dokładnością do 1 ticka (~5µs). Daje to gwarancję, że 1500µs wysłane z GCS to fizyczne 1500µs na serwie. Ograniczenie bezpieczeństwa w kodzie blokuje dziwne odczyty poniżej 15 MHz i powyżej 35 MHz.

  • Sprzętowy Failsafe (Pin OE)

Moduł obsługuje pin OE (Output Enable) kontrolera PCA.

  • Łączymy go z pinem GPIO 27 w RPi.

  • Logika Active-Low: Niski = układ pracuje, Wysoki = układ zablokowany. Natychmiast po wykryciu utraty pakietów (zerwanie sieci) lub zamknięciu serwisu, RPi wymusza stan WYSOKI, wprowadzając wyjścia PWM w stan wysokiej impedancji (High-Z). Silniki i serwa zostają natychmiast rozłączone.

  • Hard Clamping: Bez względu na to, co GCS wyśle po sieci, natywny mikser obcina sygnały kierownicy i gazu do twardych limitów (steering_min, steering_max, max_acceleration) zadeklarowanych w systemowym pliku rc_config.json.

3. Zaawansowane Peryferia (UART)

System na RPi 5 wymusza specyficzne routingi dla portów szeregowych (UART):

  • RF Link (ELRS/Nomad): Używamy sprzętowego portu UART3 (aktywowanego wpisem dtoverlay=uart3 w config.txt). Daje nam to dostęp do /dev/ttyAMA3 na pinach GPIO 8 (TX) oraz GPIO 9 (RX), co unika konfliktów z wbudowanym Bluetooth na RPi 5.

  • LiDAR LD08: Praca na mostku USB-UART (/dev/ttyUSB0) z bardzo agresywną prędkością 230400 bodów. Przesyła gęstą, 360-stopniową chmurę punktów dla silnika BreezySLAM.

  • GPS / GNSS (RTK): Domyślnie używa systemowego UART0 (/dev/ttyAMA0) przy 9600 baud. Jeśli wprowadzono ustawienia NTRIP, aplikacja dynamicznie wstrzykuje poprawki korygujące do modułu, redukując błąd geolokacji.

4. Strażnicy Sprzętowi (Tier 6 ESP32 Watchdog)

Zewn?trzny watchdog ESP32 traktuj jako wariant in?ynieryjny do test?w laboratoryjnych i w?asnych integracji, a nie jako gwarancj? bezpiecze?stwa dla ci??kich platform. W modelu produkcyjnym podstaw? pozostaj? ARM/DISARM, watchdog PWM/I2C, failsafe RPi oraz poprawnie skonfigurowany ESC.

  • Heartbeat: wariant z zewn?trznym ESP32 wymaga dedykowanego firmware, osobnego okablowania i test?w na stojaku. Aktualny kod RPi nie powinien by? opisywany jako samoczynne przej?cie magistrali I2C przez ESP32 bez tej dodatkowej integracji.

  • Manual Override: Zewnętrzna aparatura nadawcza może wymusić przejęcie pełnej kontroli poprzez podanie sygnału na GPIO 21. Wtedy RPi świadomie zwalnia szynę I2C, zapobiegając kolizjom danych.

🖥️ Zdalny dostęp (SSH)

Kiedy auto jest już złożone, nie musisz podłączać do niego monitora. Możesz zarządzać nim zdalnie przez terminal (SSH).

Jak się połączyć?

  • Otwórz PowerShell lub Terminal w Windows.

  • Wpisz komendę: ssh pi@ADRES_IP_TWOJEGO_AUTA (np. ssh pi@100.x.y.z).

  • Hasło:

$$!TIP$$

Jeśli używasz Visual Studio Code, zainstaluj rozszerzenie Remote - SSH. Pozwoli Ci to edytować pliki bezpośrednio na aucie tak, jakby były na Twoim dysku. Możesz też użyć programu Filezilla.

🔍 Diagnostyka (Przydatne komendy)

Jeśli coś nie działa, połącz się przez SSH i sprawdź status za pomocą tych poleceń:

Komenda Co sprawdza?
i2cdetect -y 1 Skanuje magistralę I2C. Jeśli nie widzisz 40 lub 68, czujniki są źle podpięte.
ls /dev/ttyAMA* Sprawdza dostępne porty UART (dla GPS i Radia).
cat /dev/ttyAMA0 Podgląd surowych danych z GPS (LC29H). Jeśli ekran zalewa tekst, GPS działa!
hailortcli fw-control --identify Sprawdza, czy moduł AI Hailo-8 jest poprawnie wykryty.
vcgencmd measure_temp Sprawdza temperaturę procesora. Jeśli > 80°C, potrzebujesz lepszego chłodzenia.
sudo docker logs -f rcsim_industrial Podgląd logów aplikacji w czasie rzeczywistym.

🛠️ Podsumowanie Adresów I2C

  • 0x40: Sterownik PWM PCA9685.

  • 0x68 / 0x69: Żyroskop/Akcelerometr IMU.

  • 0x42: Monitor baterii (INA219 w UPS Hat).