Ten projekt jest próbą stworzenia autonomicznego systemu do sterowania samochodem w symulowanym środowisku. Poligonem w tym przypadku jest symulator Carla, którego zasada działania opiera się na istnieniu serwera, który emuluje świat, a dostęp do niego jest przy użyciu python'owego klienta.
W obecnym momencie bardziej skupiam się nad stworzeniem wygodnego interfejsu i przydatnych narzędzi, które w przyszłości pozwolą mi lepiej rozwijać ten projekt. Sam model sterowania teraz nie odgrywa najważniejszej funkcji.
- Dashboard
- Rozbudowany klient z równoległymi procesami (wymagania usprawnienia)
- System do zapisywania przejazdu
- Skrypt do uczenia modelu i przetwarzania danych
- Skrypt do porównywania modelu z rzeczywistym przejazdem
- Proces do autonomicznej jazdy w kliencie
- Rozpoznawanie obiektów
System rozwijany jest pod Linux'em, a w szególność Manjaro. Nie był testowany na innych platformach
- Carla 0.7.1
- Python 3
- Keras
- Tensorflow GPU
- OpenCV 3.4.0
- Pygame
- całe requirements.txt
Pobieramy repozytorium i tworzymy wirtualne środowisko
$ git clone https://github.com/ATh0m/AutonomousDriving.git
$ cd AutonomousDriving
$ virtualenv --system-site-packages venv
$ . venv/bin/activate
$ pip install -r requirements.txt
Symulator pobieramy z GitHub i wypakowujemy do folderu CARLA. Następnie
$ cd CARLA/PythonClient
$ pip install -r requirements.txt
$ python setup.py install
./CarlaUE4.sh /Game/Maps/Town02 -carla-server -benchmark -fps=15 -windowed -ResX=800 -ResY=600
./main.py
utils/model.py [-h] [--load LOAD] [--save SAVE] [--validation VALIDATION] [--epochs EPOCHS] data
utils/plot_steer.py [-h] --data DATA [--model MODEL]
Jest to główny system do łączenia się z serwerem i gromadzena infromacji. Widoki z kamer można dostosowywać do przyjętego modelu. Największym problemem jest konieczność rozdzelenia obiowiązków pomiędzy wiele procesów, żeby osiagnąć jak najwyższą wydajność. Jest to obecnie zrobione dla połączenia z serwerem oraz zapisywania obrazów w trakcie nagrywania. Brakuje tego jeszcze dla przetwarzania wyświetlanych kamer. Dasgboard wyświetla dodatkowo informacje na temat ilości FPS, obecnej prędkości, kąta sterowania, przyspieszenia oraz statusu nagrywania. Nagrywanie uruchamia się po przez wciśnięcie R na klawiaturze.
Kontrola samochodu odbywa się obecnie przy pomocy pada do Xboxa One. Prawa gałka odpowiada za przyspieszenie, a lewa za kąt sterowania. Jest to lepsze rozwiązanie, niż użycie wyłącznie klawiatury, ponieważ uzyskujemy wartości z ciągłego przedziału.
Nagrania zapisywane są w folderze data i folderze z datą uruchomienia klienta. W katalogu IMG znajdują się zapisane obrazy z kamer, a w pliku driving_log.csv dane łączące obrazy z pozostałymi wartościami (w nagłówku są odpowiednie informacje).
Jak wspominałem wczesniej, w obecnym stanie projektu model nie jest jego najważniejsza częścią. Założenie jest takie, żeby model na podstawie wyłącznie widoku z przedniej kamery potrafił dobrać odpowiedni kąt sterowania.
Do modelu samochodu zamontowane są 3 kamery RGB. Jedna patrzy centralnie na wprost, druga jest odchylona lekko w lewo, a trzecia w prawo. Dodatkowo zbierane są standardowe informacje tj. prędkość, kąt sterowania, przyspieszenie. Użytkownik wykonuje poprawny przejazd trasy (w moim przypadku było to objechanie mapy zewnętrzną drogą). Zakładając, że człowiek jeździ dobrze to chcemy nauczyć model podobnego zachowania. Posiadanie 3 kamer zwiększa nam znaczącą zakres danych uczących. Dla centralnej kamery mamy odpowiednie wartości, natomiast bocznym będziemy chcieli zmodyfikować trochę kąt. Jeśli model w przyszłości zobaczy taki obraz jak w lewej kamerze to znaczy, że trochę za bardzo zjechał w lewo i musi odbić w prawo (korekta wynosi 0.1).
Zestaw testowy został zebrany osobno i częsciowo jadąc w przeciwną stronę
- ucięcie górnej połowy
- przejście do skali szarości
- przeskalowanie do rozmiaru 128x128
Sprawdziłem jak dla zbioru testowego wyglądają rzeczywiste kąty, a jak te przewidziane przez model
I nie wygląda to za ciekawie. Widać, że model nie radzi sobie z zakrętami. Jedyne z czym sobie może poradzić to jazda prosto. Jest to część nad którą należy popracować.
Do tego zostanie wykorzystany model YOLO v2 oraz biblioteka darkflow