Skip to content

Latest commit

 

History

History
155 lines (97 loc) · 6.21 KB

README.md

File metadata and controls

155 lines (97 loc) · 6.21 KB

Łazik Simulator

Symulacja uniwersyteckiego łazika w Unity

Skompilowane Wersje

Wersja 3, 29.01.18 Windows Mac Linux

  • nagrywanie depth mapy każdej kamery
  • optymalizacje
    • kamery łazika renderują tylko kiedy trzeba
    • wysyłanie obrazu przez socket w oddzielnym wątku
    • wyłączony VSync co pozwala na częstsze wysyłanie obrazu
  • naprawiono bug: "ostatnia nagrana próbka jest na początku trasy"

Wersja 2, 22.01.18 Windows Mac Linux

  • [23.01.17] - naprawiono bug: "symulator wysyła obraz z prawej kamery zamiast centralnej"
  • nowy system sterowania
  • całkiem nowe menu
  • możliwość zapisywania i zmieniania ustawień
  • logo continuum w splash screenie

Wersja 1, 14.01.18 Windows Mac Linux


Jak korzystać

Po uruchomieniu pliku wykonywalnego, powinno pojawić się okno z konfiguracją.

graphic

"Graphics quality" radzę ustawić, tak żeby aplikacja działała płynnie i nie zmieniać jej już później, gdyż może ona wpłynąć na wygląd nagrywanych przejazdów. Rozdzielczość nie powinna mieć wpływu na nagrane przejazdy.

input

Aby uzyskać sterowanie "łazikowe", Accel ustaw na lewą gałkę, a Steering na prawą.

Menu

Po naciśnięciu Play, powinno ukazać się Menu.

menu

Przyciski Training i Autonomous uruchamiają przejazd w odpowiednim trybie.

Ustawienia

  • Top Speed - Ograniczenie prędkości na kołach
  • Recording FPS - ilość zapisywanych sampli na sekundę (w rzeczywistości może ona być trochę mniejsza, ta opcja gwarantuje tylko, że nie przekroczy tej wartości)
  • Camera Resulotion - rozdzielczość nagrywanych oraz wysyłanych obrazów
  • SocketIO Settings - IP i Port serwera, na który symulator wysyła dane i od którego otrzymuje sterowanie (Tryb Autonomous)

Ustawienia są zapisywane w pliku settings.json w folderze Data. Przycisk Apply zapisuje obecne ustawienia, a przycisk Revert wczytuje je z pliku.

Tryb Training

W trybie tym łazik sterowany jest manualnie. Wartość Accel odpowiada za jazdę w przód i w tył, a wartość Steering za obracanie łazikiem.

ui_training

W UI widnieją aktualne wartości Accel i Steering oraz prędkość łazika obliczana jako średnia prędkości na wszystkich kołach.

Nagrywanie przejazdu

Aby rozpocząć nagrywanie przejazdu naciśnij klawisz Record (domyślnie r) lub przycisk nagrywania widoczny w prawym dolnym rogu aplikacji.

output

Jeśli wyskoczy okienko z wyborem folderu, wskaż folder zapisu i ponownie naciśnij przycisk nagrywania. Nagrywanie powiwnno się rozpocząć, a ikona przycisku powinna zmienić się na ikonę Stop.

Aby zakończyć nagrywanie ponownie naciśnij przycisk.

saving

Aplikacja zacznie odtwarzać trasę i zapisywać zrzuty z kamer na dysk.

Kamery

Łazik posiada 3 zestawy kamer: jeden na środku oraz 2 z boku obrócone o 20 stopni. Pozycje kamer przedstawia poniższy rysunek:

cameras

Każdy zestaw składa się z kamery renderującej rzeczywisty obraz oraz kamery, która renderuje depth mapę.
Przykład próbki jednego zestawu:

sample sample_depth

Obraz z kamery nagrywany jest w formacie JPEG (dla oszczędności pamięci), a depth mapa w formacie PNG (aby uniknąć zniekształceń)

Czytanie depth mapy

Obiekt w odległości 30cm lub mniejszej - piksel czarny
Obiekt w odległości 30m lub większej - piksel biały
Wszystko pomiędzy liniowo przechodzi od czarnego do białego

Czytanie logów

We wskazanym folderze powstanie plik driving_log.csv. Każdy rekord tego pliku ma postać:

camera1,camera2,...,cameraN,accel,steering,speed,mode

Znaczenie powyższych pól:

  • camera - ścieżka do zrzutu z kamery. Domyślnie jest 6 kamer: Left, Center, Right oraz odpowiadające im depth mapy
  • accel - wartość Accel zadana w danym momencie
  • steering - wartość Steering zadana w danym momencie
  • speed - prędkość łazika wyrażona w km/h (średnia prędkości na wszystkich kołach)
  • mode - tryb sterowania (M - manual, A - Autonomous)

Tryb Autonomous

W tym trybie sterowanie domyślnie przekazywane jest przez protokół Socket.IO. Przykładowy program, do którego może się połączyć symulator znajduje się w folderze example.

ui_autonomous

W UI widnieje dodatkowa informacja o aktualnym trybie sterowania (Manual lub Autonomous). Przyciskiem Control (domyślnie lewy ctrl) można przełączać się między trybami.

Przykładowy program

Wymagania:

  • Python (testowano na wersji 3.6.4)
  • pakiety z pliku requirements.txt. Można je zainstalować poleceniem pip install -r requirements.txt

Uruchamianie:

  1. Uruchom symulator
  2. Wybierz tryb Autonomous
  3. Uruchom skrypt drive.py

Działanie:

  • skrypt tworzy serwer Socket.IO na porcie 4567
  • symulator łączy się z serwerem
  • symulator po otwarciu połączenia, wysyła Event telemetry, zawierający dane o aktualnej prędkości łazika oraz obraz z centralnej kamery
  • skrypt odbiera event, konwertuje otrzymany obraz do postaci tablicy RGB i pokazuje plot tego obrazka
  • gdy użytkownik zamknie plot, skrypt wysyła Event steer z losowymi wartościami accel i steering
  • symulator odbiera dane sterowania i przekazuje je do kontrolera łazika
  • skrypt wysyła Event request_telemetry
  • symulator odbiera event i wysyła telemetry przy następne klatce