Projekt polega na przygotowaniu robota Sharky z kamerą ESP32-CAM do jazdy po czarnej linii oraz rozpoznawania prostych znaków lub sytuacji na trasie. Robot wykorzystuje obraz z kamery, który jest analizowany przez model AI przygotowany w Teachable Machine. Na podstawie rozpoznanej klasy program wybiera odpowiednią komendę ruchu, na przykład jazdę prosto, skręt w prawo lub skręt w lewo. Projekt pozwala w praktyce połączyć programowanie, elektronikę, obsługę kamery oraz podstawy sztucznej inteligencji.
[przykładowe - prosimy o edycję]
1. esp32 cam
2. Silniki DC
Projekt robota z kamerą ESP32-CAM wykorzystującego sztuczną inteligencję do rozpoznawania trasy
1. Wprowadzenie
Projekt dotyczy przygotowania i zaprogramowania robota mobilnego Sharky wyposażonego w kamerę ESP32-CAM. Głównym zadaniem robota jest poruszanie się po wyznaczonej trasie oraz reagowanie na obraz rejestrowany przez kamerę. Robot ma rozpoznawać określone sytuacje występujące na torze, takie jak jazda po prostej, zjazd z linii, skręt w lewo, skręt w prawo lub łagodny skręt. Na podstawie rozpoznanej sytuacji program sterujący wybiera odpowiednią komendę ruchu, dzięki czemu robot może samodzielnie pokonywać trasę.
Projekt łączy kilka ważnych zagadnień technicznych. Z jednej strony obejmuje podstawy programowania mikrokontrolerów w środowisku Arduino IDE, a z drugiej strony pokazuje praktyczne zastosowanie sztucznej inteligencji w prostym systemie robotycznym. Uczeń nie tylko uruchamia gotowy kod, ale również uczy się, w jaki sposób obraz z kamery może zostać wykorzystany do podejmowania decyzji przez urządzenie fizyczne. Dzięki temu projekt ma charakter praktyczny i pozwala lepiej zrozumieć, jak działają podstawowe systemy autonomiczne.
Robot Sharky pełni tutaj rolę platformy testowej. Został wyposażony w układ napędowy, kamerę ESP32-CAM oraz oprogramowanie umożliwiające komunikację przez sieć Wi-Fi. Kamera obserwuje trasę znajdującą się przed robotem, a komputer lub strona internetowa analizuje obraz i przypisuje go do jednej z wcześniej przygotowanych klas. Każda klasa odpowiada konkretnej sytuacji na torze. Przykładowo, jeśli kamera widzi czarną linię na środku obrazu, robot powinien jechać prosto. Jeśli linia przesunie się w prawo lub w lewo, robot powinien wykonać korektę toru jazdy. Jeśli pojawi się zakręt lub znak sugerujący skręt, robot powinien odpowiednio mocniej skręcić.
Najważniejszą częścią projektu jest więc połączenie obrazu z kamery z reakcją robota. Nie jest to klasyczny line follower działający wyłącznie na podstawie prostych czujników odbiciowych. W tym przypadku robot wykorzystuje kamerę oraz model sztucznej inteligencji przygotowany w narzędziu Teachable Machine. Dzięki temu można pokazać, że uczenie maszynowe nie musi być tylko teorią, ale może zostać wykorzystane w realnym urządzeniu, które porusza się i reaguje na otoczenie.
2. Cel projektu
Głównym celem projektu jest zaprogramowanie robota Sharky tak, aby potrafił przejechać po przygotowanym torze z czarną linią i odpowiednio reagować na zmiany trasy. Robot powinien rozpoznawać obraz z kamery, przyporządkowywać go do jednej z przygotowanych klas, a następnie wykonywać odpowiednią funkcję ruchu.
Projekt ma również cel dydaktyczny. Uczestnik projektu poznaje podstawy pracy z mikrokontrolerem ESP32-CAM, środowiskiem Arduino IDE, programem Processing oraz narzędziem Teachable Machine. Dzięki temu zdobywa praktyczne umiejętności z kilku obszarów: elektroniki, programowania, robotyki, przetwarzania obrazu i sztucznej inteligencji.
Jednym z celów jest także pokazanie, że poprawne działanie systemu AI zależy nie tylko od samego kodu, ale również od jakości danych uczących. Robot będzie działał poprawnie tylko wtedy, gdy zdjęcia użyte do trenowania modelu będą dobrze przygotowane. Jeżeli zdjęcia będą niewyraźne, źle dobrane albo będą przedstawiały kilka różnych sytuacji jednocześnie, model może błędnie rozpoznawać klasy. Wtedy robot może skręcać w złą stronę, gubić linię albo zatrzymywać się w nieodpowiednim miejscu.
Projekt uczy więc cierpliwego testowania i poprawiania systemu. Nie wystarczy raz uruchomić robota. Trzeba sprawdzać jego działanie na torze, obserwować błędy, poprawiać zdjęcia, ponownie trenować model i dobierać parametry funkcji ruchu. Jest to bardzo podobne do prawdziwej pracy inżynierskiej, gdzie projekt rzadko działa idealnie od razu i wymaga wielu prób oraz poprawek.
3. Wykorzystane elementy i narzędzia
Do wykonania projektu wykorzystano robota Sharky z zamontowaną kamerą ESP32-CAM. Kamera pozwala na rejestrowanie obrazu trasy znajdującej się przed robotem. Obraz ten jest następnie wykorzystywany do przygotowania zbioru danych oraz do późniejszego rozpoznawania klas.
Do programowania robota używane jest środowisko Arduino IDE. W nim otwierany jest kod programu, konfigurowana jest płytka ESP32 oraz wgrywany jest program do mikrokontrolera. Ważne jest prawidłowe ustawienie parametrów płytki, takich jak typ płytki, schemat partycji, włączona pamięć PSRAM oraz prędkość Monitora Portu Szeregowego. Bez poprawnej konfiguracji program może się nie wgrać lub kamera może nie działać prawidłowo.
Kolejnym narzędziem jest Processing. Służy on do przechwytywania obrazu z kamery ESP32-CAM i zapisywania go jako zdjęcia. Zdjęcia te są później wykorzystywane do tworzenia klas w Teachable Machine. Processing pełni więc funkcję pomocniczą, ponieważ pozwala zebrać materiał potrzebny do wytrenowania modelu AI.
Najważniejszym narzędziem do przygotowania modelu sztucznej inteligencji jest Teachable Machine. Jest to prosta platforma internetowa, która umożliwia trenowanie modeli rozpoznawania obrazów bez konieczności pisania skomplikowanego kodu uczenia maszynowego. Użytkownik tworzy klasy, dodaje do nich zdjęcia, uruchamia trening modelu, a następnie eksportuje gotowy model w formie linku. Link ten można wkleić do strony robota, dzięki czemu robot może korzystać z wytrenowanego modelu.
Do projektu potrzebny jest również tor jazdy. Tor powinien być wydrukowany na dużej powierzchni, na przykład w formacie A0. Na torze znajduje się czarna linia, po której robot ma się poruszać. Trasa zawiera proste odcinki oraz zakręty. Dodatkowo mogą znajdować się na niej kolorowe znaki, które pomagają modelowi rozpoznawać kierunek skrętu.
4. Zasada działania robota
Działanie robota można podzielić na kilka etapów. Najpierw ESP32-CAM łączy się z siecią Wi-Fi. Po uruchomieniu programu w Monitorze Portu Szeregowego pojawia się adres IP robota. Ten adres należy wkleić do przeglądarki internetowej, aby otworzyć stronę sterującą robotem lub podgląd działania kamery.
Następnie kamera rejestruje obraz znajdujący się przed robotem. Obraz może przedstawiać czarną linię na środku, linię przesuniętą w lewo lub prawo, zakręt albo znak informujący o kierunku jazdy. Każda taka sytuacja powinna zostać wcześniej przygotowana jako osobna klasa w Teachable Machine.
Program analizuje obraz i sprawdza, która klasa została rozpoznana z największym prawdopodobieństwem. Jeżeli rozpoznana zostanie klasa odpowiadająca jeździe prosto, robot uruchamia funkcję jazdy do przodu. Jeśli rozpoznana zostanie klasa oznaczająca skręt w prawo, robot wykonuje skręt w prawo. Analogicznie działa to dla skrętu w lewo lub korekty toru jazdy.
W kodzie programu najważniejsze są instrukcje warunkowe if oraz else if. To one sprawdzają, jaka klasa została rozpoznana. Przykładowo, jeśli zmienna przechowująca wynik rozpoznawania ma wartość „Class1”, program wykonuje funkcję jazdy prosto. Jeśli wartość wynosi „Class2”, wykonywana jest funkcja skrętu w prawo. W ten sposób wynik działania modelu AI zostaje połączony z ruchem robota.
Przykładowe przypisanie klas może wyglądać następująco: Class1 oznacza jazdę prosto, Class2 oznacza korektę w prawo, Class3 oznacza korektę w lewo, Class4 oznacza mocny skręt w prawo, Class5 oznacza łagodny skręt w prawo, a Class6 oznacza skręt w lewo. Każdej klasie przypisana jest konkretna funkcja sterująca silnikami robota.
5. Konfiguracja programu i połączenie z robotem
Pierwszym praktycznym krokiem jest otwarcie kodu programu w Arduino IDE. Kod może być długi i zawierać wiele fragmentów, jednak nie wszystkie części trzeba dokładnie analizować. Najważniejsze są fragmenty odpowiedzialne za konfigurację Wi-Fi, obsługę kamery, sterowanie silnikami oraz reakcję na rozpoznane klasy.
Na początku programu znajdują się dane sieci Wi-Fi. Należy wpisać nazwę sieci oraz hasło, aby ESP32-CAM mogło się z nią połączyć. Po wgraniu programu do płytki i uruchomieniu Monitora Portu Szeregowego pojawia się adres STAIP. Jest to adres, pod którym można otworzyć stronę robota w przeglądarce.
W Arduino IDE należy ustawić odpowiednią płytkę, czyli ESP32 Dev Module. Należy również wybrać opcję Huge APP w ustawieniach Partition Scheme oraz włączyć PSRAM. Jest to ważne, ponieważ obsługa kamery i strony internetowej wymaga odpowiedniej ilości pamięci. Monitor Portu Szeregowego powinien być ustawiony na prędkość 115200 baud, żeby można było poprawnie odczytać komunikaty wysyłane przez ESP32.
Po wgraniu programu i uruchomieniu strony robota można sprawdzić, czy kamera działa poprawnie. Jeśli pojawia się podgląd lub strona sterująca, oznacza to, że podstawowa komunikacja działa. Jeśli obraz się nie pojawia, trzeba sprawdzić adres IP, połączenie Wi-Fi, zasilanie oraz ustawienia płytki.
6. Zbieranie zdjęć do modelu AI
Aby robot mógł rozpoznawać sytuacje na torze, potrzebny jest zbiór zdjęć. Zdjęcia wykonuje się z kamery ESP32-CAM za pomocą programu Processing. Program Processing łączy się z adresem IP kamery i zapisuje kolejne obrazy w folderze na komputerze.
W kodzie Processing należy wpisać taki sam adres IP, jaki został odczytany z Monitora Portu Szeregowego. Jeśli adres jest błędny, program nie będzie mógł pobierać obrazu z kamery. Po uruchomieniu programu obrazy są zapisywane jako pliki graficzne, które później można wykorzystać w Teachable Machine.
Zdjęcia należy posegregować do folderów odpowiadających klasom. Na przykład zdjęcia, na których linia znajduje się na środku obrazu, trafiają do klasy jazdy prosto. Zdjęcia, na których linia jest przesunięta w prawo, trafiają do klasy korekty w prawo. Zdjęcia zakrętów lub znaków należy umieścić w klasach odpowiadających konkretnym skrętom.
Bardzo ważna jest jakość zdjęć. Zdjęcia powinny dobrze przedstawiać daną sytuację. Jeśli zdjęcie jest źle wykadrowane, linia jest ucięta albo na obrazie znajduje się zbyt wiele przypadkowych elementów, model może nauczyć się niewłaściwych cech. Wtedy robot będzie źle rozpoznawał trasę.
Dobrą praktyką jest wykonywanie zdjęć z różnych ustawień robota. Nie powinny to być wyłącznie idealne zdjęcia wykonane na wprost. W rzeczywistej jeździe robot może być lekko obrócony, może znajdować się bliżej lub dalej od linii, a oświetlenie może się zmieniać. Dlatego zbiór zdjęć powinien być różnorodny, ale nadal uporządkowany.
Na jedną klasę wystarczy zwykle około 200–300 zdjęć. Zbyt mała liczba zdjęć może sprawić, że model nie nauczy się dobrze rozpoznawać danej sytuacji. Zbyt duża liczba zdjęć może natomiast utrudnić pracę w Teachable Machine i wydłużyć proces treningu. Najważniejsze jest to, żeby zdjęcia były dobrze dobrane, a nie tylko żeby było ich jak najwięcej.
7. Tworzenie klas w Teachable Machine
Po zebraniu zdjęć należy otworzyć Teachable Machine i utworzyć projekt rozpoznawania obrazów. Następnie trzeba dodać klasy odpowiadające sytuacjom, które robot ma rozpoznawać. Każda klasa powinna mieć nazwę, na przykład Class1, Class2, Class3 lub bardziej opisowo: jazda prosto, skręt w prawo, skręt w lewo.
Do każdej klasy należy wgrać odpowiednie zdjęcia. Jeśli klasa ma oznaczać jazdę prosto, powinny się w niej znajdować tylko zdjęcia, na których linia jest na środku lub robot powinien kontynuować jazdę prosto. Nie powinno się mieszać zdjęć różnych sytuacji w jednej klasie, ponieważ model może później nie rozróżniać ich poprawnie.
Po dodaniu zdjęć do wszystkich klas można uruchomić trening modelu. Teachable Machine analizuje wtedy dostarczone obrazy i uczy się rozpoznawać różnice między klasami. Po zakończeniu treningu można przetestować model przy użyciu kamery. Jeśli model dobrze rozpoznaje obrazy, można go wyeksportować.
Eksport modelu odbywa się przez wybranie opcji TensorFlow.js i wygenerowanie linku. Ten link jest następnie kopiowany i wklejany do strony robota w polu Model Path. Po naciśnięciu przycisku Start Recognition robot może korzystać z modelu i rozpoznawać klasy w czasie rzeczywistym.
8. Sterowanie robotem na podstawie klas
Po rozpoznaniu klasy program robota wykonuje odpowiednią funkcję. Dla każdej klasy trzeba określić, jaki ruch ma wykonać robot. Przykładowo, jeśli rozpoznana zostanie Class1, robot jedzie prosto. Jeśli rozpoznana zostanie Class2, robot skręca lekko w prawo. Jeśli rozpoznana zostanie Class3, robot skręca lekko w lewo.
Funkcje ruchu mogą mieć parametr liczbowy, na przykład 183. Parametr ten może odpowiadać za prędkość lub intensywność działania silników. Wartość tę trzeba dobrać doświadczalnie. Jeżeli robot jedzie za wolno, może nie pokonywać dobrze zakrętów. Jeżeli jedzie za szybko, może gubić linię albo zbyt późno reagować na rozpoznane klasy.
Ważne jest również, aby nie wykonywać niektórych funkcji zbyt często. Jeśli robot co chwilę rozpoznaje tę samą klasę i natychmiast wykonuje skręt, może zacząć się szarpać lub reagować zbyt gwałtownie. W projekcie stosuje się więc opóźnienia lub warunki czasowe podobne do działania funkcji delay, ale bez całkowitego zatrzymywania programu. Dzięki temu kamera może działać płynniej, a robot nie wykonuje niektórych ruchów zbyt często.
Dobór funkcji i parametrów jest jednym z najważniejszych etapów testowania. Nawet dobrze wytrenowany model nie wystarczy, jeśli funkcje ruchu są źle dobrane. Robot może poprawnie rozpoznawać skręt w prawo, ale jeśli skręt będzie zbyt słaby, i tak wyjedzie z trasy. Z drugiej strony zbyt mocny skręt może spowodować, że robot gwałtownie zjedzie z linii.
9. Testowanie robota na torze
Po przygotowaniu modelu i przypisaniu klas do funkcji należy przetestować robota na torze. Najlepiej rozpocząć od prostego fragmentu trasy. Na początku wystarczą trzy podstawowe klasy: jazda prosto, korekta w prawo i korekta w lewo. Dzięki temu można sprawdzić, czy robot potrafi utrzymać się na linii.
Dopiero po poprawnym działaniu na prostych odcinkach warto dodawać klasy dla zakrętów i znaków. Jeśli od razu stworzy się zbyt wiele klas, trudniej będzie znaleźć przyczynę błędów. Robot może mylić klasy, źle skręcać albo reagować na niewłaściwe elementy obrazu. Stopniowe dodawanie klas pozwala łatwiej kontrolować cały proces.
Podczas testów należy obserwować, w jakich sytuacjach robot popełnia błędy. Jeśli myli skręt w lewo ze skrętem w prawo, trzeba sprawdzić zdjęcia użyte w tych klasach. Być może są zbyt podobne albo zawierają niepotrzebne elementy. Jeśli robot nie reaguje na zakręt, warto dodać więcej zdjęć zakrętu wykonanych z różnych odległości i kątów.
Testowanie może wymagać wielokrotnego trenowania modelu. Po każdej poprawce zdjęć model trzeba wytrenować ponownie i ponownie wkleić link do strony robota. Jest to czasochłonne, ale pozwala stopniowo poprawiać skuteczność działania systemu.
10. Najczęstsze problemy
Jednym z częstych problemów jest błędne rozpoznawanie klas. Może ono wynikać ze źle dobranych zdjęć, zbyt małej liczby przykładów albo zbyt dużego podobieństwa między klasami. Jeśli na zdjęciach w różnych klasach pojawiają się podobne elementy, model może nie wiedzieć, czym naprawdę ma się kierować.
Drugim problemem może być złe kadrowanie zdjęć. Jeśli linia jest ucięta, model może nauczyć się rozpoznawać nie linię, ale na przykład białe tło kartki. Wtedy robot może błędnie interpretować sytuację, szczególnie gdy wyjedzie poza linię. Dlatego podczas zbierania zdjęć trzeba pilnować, aby najważniejsze elementy były widoczne.
Kolejnym problemem może być zbyt szybka jazda robota. Jeśli robot jedzie zbyt szybko, kamera i model mogą nie nadążać z rozpoznawaniem obrazu. W takiej sytuacji robot reaguje za późno i może wypaść z trasy. Rozwiązaniem jest zmniejszenie prędkości lub poprawienie funkcji sterujących.
Może pojawić się również problem z połączeniem Wi-Fi. Jeśli robot nie połączy się z siecią, nie będzie możliwe otwarcie strony z podglądem kamery. W takim przypadku trzeba sprawdzić nazwę sieci, hasło, zasięg Wi-Fi oraz adres IP wyświetlany w Monitorze Portu Szeregowego.
Problemem może być też niewłaściwa konfiguracja Arduino IDE. Jeżeli nie zostanie wybrana odpowiednia płytka, pamięć PSRAM albo schemat partycji, program może się nie wgrać lub działać niestabilnie. Dlatego przed wgraniem programu należy dokładnie sprawdzić ustawienia.
11. Znaczenie projektu
Projekt ma duże znaczenie edukacyjne, ponieważ pozwala zrozumieć kilka ważnych zagadnień jednocześnie. Uczeń poznaje podstawy działania robota mobilnego, uczy się konfigurować mikrokontroler ESP32-CAM, pracuje z obrazem z kamery oraz przygotowuje prosty model sztucznej inteligencji.
Ważne jest także to, że projekt pokazuje praktyczne zastosowanie uczenia maszynowego. AI nie jest tutaj tylko pojęciem teoretycznym. Model wytrenowany na zdjęciach realnie wpływa na zachowanie robota. Jeśli model dobrze rozpoznaje obraz, robot jedzie poprawnie. Jeśli model działa źle, błędy od razu widać na torze.
Projekt rozwija także umiejętność analizy błędów. Uczestnik musi zastanowić się, dlaczego robot źle zareagował. Czy problemem był kod? Czy zdjęcia były źle dobrane? Czy model został źle wytrenowany? Czy robot jechał za szybko? Takie pytania są bardzo ważne w pracy technicznej, ponieważ uczą logicznego szukania przyczyny problemu.
Dodatkowo projekt pokazuje, że nawet prosty robot może zostać rozbudowany o bardziej zaawansowane funkcje. Po opanowaniu podstaw można dodać rozpoznawanie znaków drogowych, skrzyżowań, rozwidleń, ostrzejszych zakrętów albo wykorzystać inne metody computer vision. Projekt może więc stanowić bazę do dalszego rozwoju.
12. Podsumowanie
Projekt robota z ESP32-CAM polegał na stworzeniu systemu, który łączy robota mobilnego, kamerę, komunikację Wi-Fi oraz model sztucznej inteligencji. Robot porusza się po torze z czarną linią i na podstawie obrazu z kamery rozpoznaje, jaki ruch powinien wykonać. Do przygotowania modelu wykorzystano zdjęcia zebrane z kamery oraz narzędzie Teachable Machine.
Najważniejszym etapem projektu było przygotowanie odpowiednich klas oraz zebranie dobrych zdjęć. To od jakości danych uczących zależy, czy model będzie poprawnie rozpoznawał sytuacje na trasie. Następnie model został wytrenowany, wyeksportowany i podłączony do strony robota. Program robota na podstawie rozpoznanej klasy wykonywał odpowiednie funkcje sterujące silnikami.
Projekt pozwolił na praktyczne poznanie działania systemów robotycznych wykorzystujących obraz i sztuczną inteligencję. Uczestnik mógł zobaczyć, jak kamera, program, model AI i silniki robota współpracują ze sobą w jednym układzie. Dzięki temu projekt dobrze pokazuje, jak można połączyć programowanie, elektronikę, robotykę i uczenie maszynowe w jednym praktycznym zadaniu.
Całość projektu jest również dobrym przykładem nauki przez eksperymentowanie. Robot wymaga testowania, poprawiania zdjęć, ponownego trenowania modelu oraz dostosowywania parametrów jazdy. Dzięki temu uczestnik nie tylko wykonuje instrukcję krok po kroku, ale również uczy się samodzielnie analizować błędy i wprowadzać poprawki. Jest to bardzo ważna umiejętność w pracy z robotami i systemami automatyki.