Projekt „Traktor” to mobilny robot z kamerą, sterowany mikrokontrolerem ESP32-CAM. Działa w dwóch trybach: manualnym, z podglądem na żywo i sterowaniem z poziomu przeglądarki w smartfonie, oraz autonomicznym. W trybie inteligentnym robot analizuje obraz w czasie rzeczywistym, samodzielnie śledzi czerwone obiekty, podjeżdża do nich i podnosi je za pomocą ruchomego ramienia z łyżką.
Aby zrealizować projekt, niezbędne są:
Elektronika i mechanika:
-
Gotowy robot mobilny z podwoziem i czterema silnikami DC.
-
Mikrokontroler ESP32-CAM (z modułem kamery).
-
Serwomechanizm (podłączony do pinu 15 ESP32).
-
Łyżka koparki (montowana z przodu pojazdu).
-
Opcjonalnie: moduły czujników linii.
Narzędzia montażowe i przewody:
-
Elementy usztywniające konstrukcję: opaski zaciskowe (trytytki) i mocna taśma dwustronna.
-
Zestaw przewodów połączeniowych typu Dupont.
Do programowania i sterowania:
-
Konwerter USB-UART (np. oparty na układzie FTDI) z przełącznikiem logiki na 3.3V.
-
Komputer z oprogramowaniem Visual Studio Code i PlatformIO IDE (lub Arduino IDE).
-
Smartfon z modułem Wi-Fi i przeglądarką internetową (jako kontroler).
1. Działanie projektu i zastosowane algorytmy
Robot Traktor to mobilny pojazd sterowany przez mikrokontroler ESP32-CAM ze zintegrowanym modułem kamery. Komunikacja na linii użytkownik–robot odbywa się poprzez responsywny interfejs webowy, udostępniany bezpośrednio przez mikrokontroler. Po uruchomieniu urządzenie tworzy własny punkt dostępowy Wi-Fi o nazwie SIC_Robot_SHARKY.
Interfejs wyświetlany w przeglądarce internetowej (np. na smartfonie) nie wymaga instalacji dodatkowych aplikacji. Zawiera on podgląd obrazu z kamery na żywo oraz zestaw przycisków sterujących.
Pojazd może pracować w dwóch głównych trybach:
Tryb manualny
Naciśnięcie przycisków w interfejsie generuje asynchroniczne żądania HTTP GET. Pozwala to na:
-
Kierowanie pojazdem we wszystkich kierunkach.
-
Płynną regulację prędkości silników (przy użyciu sygnałów PWM).
-
Sterowanie położeniem ramienia roboczego zakończonego łyżką.
Tryb autonomicznej detekcji i śledzenia
Po aktywacji tego trybu ESP32-CAM analizuje obraz z kamery w czasie rzeczywistym, poszukując obiektów w kolorze czerwonym. Proces ten składa się z kilku etapów:
-
Przetwarzanie obrazu: Klatki pobierane w rozdzielczości QVGA są konwertowane w locie z formatu JPEG do surowego formatu RGB565.
-
Filtracja barwna: Algorytm analizuje obraz piksel po pikselu, wyodrębniając składowe R, G i B. Wykrywane są tylko te obszary, w których czerwień przekracza wyznaczony próg jasności i jednoznacznie dominuje nad resztą kanałów.
-
Redukcja szumów i błędów: Program odrzuca pojedyncze piksele oraz małe skupiska (poniżej 25 pikseli), eliminując zakłócenia świetlne i szum matrycy. Pomijane są również dolne partie obrazu, aby wykluczyć sprzętowe zniekształcenia obiektywu.
-
Obliczanie trajektorii (sprzężenie zwrotne): Po wykryciu czerwonej plamy algorytm oblicza jej środek ciężkości. Wyznaczony w ten sposób błąd położenia względem środka kadru steruje ruchem robota. Silniki otrzymują krótkie impulsy, korygując tor jazdy tak, aby cel znajdował się w centrum.
-
Interakcja: System szacuje odległość na podstawie rozmiaru plamy barwnej. Gdy obiekt jest wystarczająco blisko (liczba czerwonych pikseli przekracza zadany próg), robot zatrzymuje się i uruchamia sekwencję serwomechanizmu: opuszczenie łyżki, zagarnięcie ładunku i jego podniesienie.
-
Tryb skanowania: W przypadku utraty celu z pola widzenia, pojazd zaczyna powoli obracać się wokół własnej osi krok po kroku, aż obiekt ponownie pojawi się w kadrze.
2. Napotkane problemy i ich rozwiązania
W procesie projektowania i testowania robota zidentyfikowano trzy główne wyzwania techniczne, które wymagały usprawnień.
-
Problem 1: Niestabilna detekcja koloru w zmiennym oświetleniu
Początkowy algorytm był zbyt czuły i reagował na szumy oraz ciepłe barwy otoczenia (np. drewnianą podłogę).
Rozwiązanie: Zaostrzono warunki progowe – wartość kanału czerwonego (R) musi teraz przekraczać 50, być co najmniej dwukrotnie wyższa od kanału zielonego (G) i wyraźnie wyższa od niebieskiego (B). Wykorzystano dodatkową pamięć PSRAM oraz sprzętowe podbicie saturacji matrycy. -
Problem 2: Ograniczenia wydajnościowe układu ESP32-CAM
Jednoczesna obsługa kamery, analizy matematycznej, serwera Wi-Fi i sterowania silnikami powodowała zawieszanie procesora, a ramki pobierane w trakcie obrotu robota były rozmyte, co fałszowało odczyty barw.
Rozwiązanie: Wprowadzono ruch krokowy z systemem mikrosekundowych opóźnień, pozwalających matrycy na stabilizację po każdym impulsie silników. Zoptymalizowano bufor kamery (odrzucanie przestarzałych klatek) oraz poprawiono wydajność bitową obliczeń pod kątem architektury Little-Endian. Dzięki temu ESP32 płynnie przetwarza obraz bez konieczności użycia zewnętrznego serwera. -
Problem 3: Mechaniczne mocowanie osprzętu
Gotowe podwozie nie posiadało otworów montażowych dla serwomechanizmu i łyżki, przez co ramię odginało się pod obciążeniem.
Rozwiązanie: Zastosowano techniki szybkiego prototypowania – użyto mocnej taśmy montażowej oraz opasek zaciskowych. Konstrukcja zyskała odpowiednią sztywność, niezbędną do poprawnego wykonywania zadań w fazie testów.
3. Instrukcja odtworzenia projektu
Projekt można łatwo odtworzyć w warunkach pracowni szkolnej lub domowego warsztatu, wykorzystując zmontowanego robota oraz udostępniony kod źródłowy.
Krok 1: Przygotowanie środowiska
Zainstaluj na komputerze edytor Visual Studio Code oraz rozszerzenie PlatformIO IDE (alternatywnie: Arduino IDE). PlatformIO jest zalecane ze względu na automatyczne pobieranie kompilatorów i bibliotek (w tym wymaganego rdzenia w wersji 2.0.14).
Krok 2: Pobranie kodu
Pobierz repozytorium projektu z GitHuba, rozpakuj archiwum i otwórz folder w wybranym środowisku programistycznym.
Krok 3: Podłączenie mikrokontrolera
Podłącz moduł ESP32-CAM do komputera za pomocą konwertera USB-UART (np. FTDI).
-
Uwaga: Zasilanie pinu 5V na płytce ESP32 wymaga napięcia 5V, ale logika sygnałowa konwertera (RX/TX) musi być ustawiona na 3.3V (inaczej układ może ulec uszkodzeniu).
-
Połącz masę (GND) obu układów.
-
Skrzyżuj linie komunikacyjne: pin TX konwertera połącz z RX modułu, a RX konwertera z TX modułu.
Krok 4: Wgrywanie programu
Aby wprowadzić ESP32 w tryb programowania, zewrzyj pin GPIO 0 z masą (GND) przed podłączeniem zasilania. Kliknij „Upload” w środowisku IDE. Po zakończeniu procesu odłącz zworkę z pinu GPIO 0 i zrestartuj układ.
Krok 5: Uruchomienie
Włącz robota. Na smartfonie wyszukaj i połącz się z siecią Wi-Fi o nazwie SIC_Robot_SHARKY. Otwórz przeglądarkę i wpisz adres 192.168.4.1. Otworzy się panel sterowania robota.
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
build_src_filter = -<*> +<examples/Esp32-cam-RC-Car/> +<examples/serwo.cpp>
build_flags =
-D BOARD_HAS_PSRAM
lib_deps =
madhephaestus/ESP32Servo