Celem projektu będzie stworzenie autonomicznego modelu samochodu potrafiącego poruszać się po makiecie miasta ze skrzyżowaniem i światłami, samochód będzie w stanie sam poruszać się po drodze, odpowiednio reagować na światła drogowe, oraz podejmować decyzje o swojej trasie.
W ramach kursu Interdyscyplinarny projekt zespołowy przez 15 tygodni w grupie 4 osób będziemy pracować nad stworzeniem automocznego pojazdu, potrafiącego poruszać się na stworzonej drodze i reagować na światła drogowe. Cały projekt jest udokumentowany a pliki będą dostępne tutaj. Rownież poniżej będzie dostępny i pokazany cały proces tworzenia projektu, więc chętne osoby będą mogły spróbować odtworzyć tą koncepcję. Samo stowrzenie takiego pojazdu wraz z całym systemem i makietą jest zadaniem wymagającym dużej wiedzy z zakresu programowania, elektroniki i mechaniki. Do dzieła!
- zbudowanie pojazdu mobilnego
- stworzenie środowiska po którym będzie poruszał się pojazd
- stowrzenie systemu świateł drogowych na skrzyżowaniu
- implementacja oprogramowania z systemem wizyjnym
- stworzenie bazy danych
- stworzenie strony internetowej
Szczegółowy plan projektu dostępny jest tutaj
Realizacja projektu skłądała się na 4 główne etapy:
- Makieta skrzyżowania
- Strona internetowa
- Program strujący makietą miasta
- samochód Wszystkie potrzebne kody i modele znajdują się na tutaj. Teraz opiszę każdy z etapów, aby przybliżyć sposób w jaki projekt został zrealizowany. Zaczynajmy!
Makieta miała składać się ze skrzyżowania, które posiada 4 drogi wejściowe i wszystkie z dróg łączą się ze sobą tworząc zewnętrzy prostokątny pierścień. Na skrzyżowaniu są 4 światła drogowe, każde z nich osobne do kierowania ruchem przy danej drodze wejściowej. przed wjazdem na środek skrzyżowania na każdej z dróg jest również ustawiony czytnik RFID. Czytnik ten za każdym razem, gdy przejeżdza auto ze swoją kartą RFID zczytuje ją i informuje server o tym że dane auto znalazło się właśnie na danej drodze. Aby wszystko mogło działać potrzebny był mikrokontroler do sterowania światłąmi i RFID. Wybraliśmy esp32, które posiada modół bluetooth oraz wifi co ułatwi komunikację z samochodem. Wszystkie światła i czujniki trzebabyło połączyć z mikrokontrolerem co nie jest lada zadaniem. Ze względu na wielkość makiety i ilość potrzebnych połączeń (tutaj warto dodać że czujniki RFID było zkomunikowane za pomocą protokołu SPI), wykorzystaliśmy płytkę prototypową do dzięki której uzyskaliśmy uporządkowany i zchludny układ elektryczny makiety. Poniżej pewne zdjęcia i filmy przedstawiające proces powstawania makiety:
Makieta zwana przez nas "miastem" pełni w tym projekcie wiele aspektów. Odpowiada ona za odpowiednie przełączanie świateł, komunikuje się z serverem i przesyła informacje o odczytanych przejazdach samochodu, oraz musi komunikować się z samochodem aby informować go w momencie gdy przejeżdża on przez skrzyżowanie czy aktualne światło mu na to zezwala. Wszelkie kody można znaleźć w katalogu projektu i powinny one wyjaśnić wszelkie niepewności.
Projekt miał być tak zrobiony, że w teorii można by było wiele samochodów puścić po podobnej makiecie, tylko większej. W związku z tym na serwerze python-anywhere postawiono bardzo prostą stronę internetową (Flask + HTML) oraz podłączono do niej relacyjną bazę danych (MySQL). Baza ta ma 3 tabele: Car, Server oraz City_Trafic. W pierwszej tabeli są wszystkie samochody, które mogą jeździć po makiecie - każdy ma swoje ID oraz status isDriving (czy aktualnie ejst w trakcie jazdy). Dodatkowo przy każdy są przyciski START i STOP - samochody maja być autonomiczne i można nimi sterowac z poziomu strony internetowej, klikając w przycisk Start samochód o danym ID startuje. Druga tabela Server przechowuje informacje o tym, o której godzinie zaczął i skończył jazdę samochód o danym ID w mieście o danym ID. Trzecia tabela to jest kontrola, o której godzinie samochód o danym ID przejechał przez światła (w naszym projekcie były 4: Północ, Południe, Wschód i Zachód).
Na samochód składają się w sumie 4 części:
- model 3D
- elektronika
- model do rozpoznawania znaków
- program sterujący Pliki .stl do wydrukowania modelu samochodu można znaleźć w repozytrium projektu. Składa się z dwóch warst, pomiędze znajduje się powerbank, który głównie determinuje wymiary samochodu. Zawera specjalny uchwyt na kamerę a sterowanie kołami przednimi odbywa się przy pomocy micro-serva. W kontekście elektroniki samochód jest napędzany dwoma silnikami na tylnej osi. Silniki są kontrolowane sygnałąmi PWM z drivera LN289. Zasilanie silników jest z pakietu Li-Po 3s i przetwornicy zmniejszającej napięcie do 6V. Głównym komponentem jest RaspberryPi 4 które pełni funkcję sterowania całym samochodem. Złożony samohchód wygląda następująco: Do rozpoznawania znaków użyto biblioteki fastAi, która kożysta z PyTorch. Zostało zrobione łącznie 400 zdjęć o 4 różnych etykietach tj. prawo, lewo, prosto i bez znaku. Następnie wytrenowano model zgodnie z kodem dostępnym w repozytorium projektu. Całość została wykonany w google colab więc w łatwy sposób można prześledzić tok postępowania. Gotowy model posiadał błąd w wysokości 1%. Najtrudniejszym zadaniem było stworzenie programu do sterowania. Aby przygotować program jeszcze przed stworzeniem samochodu i dostępem do mikrokomputera została stworzona symulacja w środowisu Unity. Symulacja pozwalała na przygotowanie podstaw skryptu. Działanie skryptu i symulacji przedstawia poniższe nagranie:
FirstSimulationWithIntersection.mp4
Następnie gdy samochód był gotowy należało przygotować środowisko na raspberry. W celu instalacji wszystkich bibliotek zaleca się skorzystanie z minicondy i następnie na stworzonym wirtualnym środowisku zainstalować wszystkie wszystkie biblioteki. Ważne jest również aby system był odpowiedi do zainstalowania PyTorch (potrzebny system 64-bitowy). Program składa się z lokalnej strony na której można mieć podgląd na żywo z widoku kamery co jest bardzo pomocne do debugowania błędów.
CAMERA_TEST.mp4
Gdy wszystko było przygotowane możnabyło przetestować kod na stowrzonym testowtm torze. Po wielu próbach osiągnięto pozytywne rezultaly co prezentuje poniższy film:
VID_20240608215514.mp4
Całość już połączonego systmu wszytskich elementó można zobaczyć na głównym filmie przedstawiającym cały projekt!.