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
W Arduino IDE wejdź w Plik -> Preferencje.
W polu "Dodatkowe adresy URL do menedżera płytek" wklej: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Wejdź w Narzędzia -> Płytka -> Menedżer płytek, wyszukaj esp32 i zainstaluj najnowszą wersję.
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_calibratejest 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.
⚙️ 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
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_calibratejest 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).