26 lipca 2018 odbył się pierwszy Meetup grupy Warsaw Self-Driving Cars! Rozmawialiśmy o projektach w skali 1:10 i projektach w skali świata. Udostępniamy prezentacje i nagranie z wydarzenia!
Pierwszy Meetup grupy Warsaw Self-Driving Cars
Na meetupie można było porozmawiać o budowaniu własnego pojazdu, o zastosowanych algorytmach oraz o pracy w tematyce. Zaprezentowane były również 3 pojazdy w skali 1:10 które można było obejrzeć i dowiedzieć się szczegółów od ich twórców!
Udostępniamy nagranie z pierwszego Meetupu! Tutaj możesz obejrzeć nagranie:
Prezentacja wprowadzająca
Powitanie oraz informacje jakie są plany rozwoju grupy. Do pobrania tutaj:
Oraz film z prezentacji:
Transkrypcja
Karol Majek: Dzień dobry, witajcie na Meetupie Warsaw Self-Driving Cars i mam nadzieję, że nie będzie to pierwszy i ostatni, natomiast wszystko wygląda na to, że będzie tego więcej. Jaki mamy pomysł na zrealizowanie, co chcielibyśmy tutaj poruszać? Pierwsza rzecz, właśnie ten networking, żeby można było przyjść w jednym miejscu, spotkać się z innymi osobami, które są zainteresowane tematem, robią coś w tym temacie bądź szukają pracy bądź szukają pracowników. Więc mam nadzieję, że tutaj się uda właśnie coś w związku z pracą w tematyce. To co chcemy też pokazywać to praktyczną wiedzę, czyli dzielić się właśnie informacjami, jak stworzyć samochody autonomiczne, jak wprowadzać takie technologie w większej skali. Tutaj mam nadzieję, że uda się poprosić kolegę od samochodu 1:1, żeby też pokazał, pokazał swoje doświadczenia i prace nad tym. I ewentualnie są też w późniejszej fazie jakieś szkolenia, warsztaty, kursy, tego typu rzeczy. Więc jeśli chodzi o te przyszłe tematy to mamy tutaj na przykład prezentację na temat zawodów Self-Racing Cars, które odbyły się już wielokrotnie w Stanach, w Kalifornii. Ja brałem w tym udział i chciałbym się też podzielić po prostu moimi doświadczeniami. Rzecz jest ciekawa, bo chodzi o samochód w skali 1:1. W pierwszym roku, gdy brałem udział to była KIA Soul, to jest taki miejski samochód, na torze wyścigowym może dziwne, natomiast jakoś się jeździło.
To było dość przerażające.
Jeśli chodzi o kolejne zawody, które odbyły się w tym roku to była to już Toyota Prius, więc tak bardziej klasycznie, więc to jest to czego byśmy oczekiwali, jeżeli chodzi o autonomizowanie. Ale to już więcej ewentualnie w naszej przyszłej prezentacji. Samochód F1/10, czyli samochód autonomiczny w skali 1:10. W sumie te trzy samochody prawdopodobnie będą na zawodach w Turynie.
KNR: My budujemy samochód jeszcze raz od zera. Ten z ostatnich zawodów
Karol Majek: No to myślę, że tutaj dojdziemy do tego w drugiej prezentacji, bo tutaj głos Koła Naukowego Robotyków i oni mają dzisiaj prezentację na temat ich rozwiązania. Jest też propozycja na wykrywanie obiektów, czyli już tak bardziej deep learning. Jak możemy, co możemy zastosować, jak to zrobić, wykrywanie obiektów, wykrywanie masek, czyli kontury i jakieś tego typu rzeczy. Informacje na przykład o kursie Self-Driving Car Nanodegree organizowanym przez Udacity. I mamy doświadczenia, bo dwóch z nas skończyło ten kurs. Myślę, że jeszcze ktoś się pewnie znajdzie, jedna osoba wciąż bierze udział. No i jeszcze oczywiście zbieramy pomysły, zbieramy chętnych na prezentowanie. No więc jeśli chodzi o to, co się dzisiaj wydarzy, może wstęp, to właśnie trwa i już zbliża się do końca. Później prezentacja samochodu autonomicznego w skali 1:10, bo mamy tutaj dwa różne rozwiązania, dwa różne projekty. Następnie prezentacja tutaj kolegów z Koła Naukowego Robotyków, samochód z ostatnich zawodów, gdzie wygrali. I tutaj szacunek dla pracy. Mam nadzieję, że pokażą jakieś filmy. I na koniec HD mapy od kolegi z Tom Toma.
Jeśli chodzi o organizatorów, założycieli grupy, czy tam jakieś inne takie mocne stwierdzenia,
no to jestem ja właśnie, kolega Maciek i kolega Łukasz. I trochę słów o nas. Mnie widać tutaj. Ja jestem magistrem inżynierem robotyki mobilnej, to z Politechniki Warszawskiej, z Wydziału Mechatroniki. Później skończyłem tam kurs właśnie Self-Driving Car Nanodegree. Stąd moje zainteresowanie deep learningiem, w zasadzie pogłębione, bo już wcześniej też się tam interesowałem. I tak naprawdę był taki start wprost w tą tematykę samochodów autonomicznych. Ja bym chciał zbudować właśnie taką społeczność tutaj w Warszawie, właśnie organizować takie meetupy, zbierać ludzi i jakoś właśnie wprowadzać ten networking w pewną atmosferę dobrą, pozytywną. I co robię? Co lubię robić, co robię na co dzień? Właśnie stosuję te sieci neuronowe do wykrywania obiektów i tu mam taki przykład, to jest to, co można znaleźć w Internecie i po tym mnie tam można rozpoznać, gdyż trzeba to wyszukać, czyli różne sieci neuronowe przetestowane na jednym data secie, żeby można było zobaczyć, w łatwy sposób sobie porównać jakie są wyniki. Tak jak tutaj mamy, tu mamy różne sieci takie do wykrywania obiektów, jak YOLO. Są dokumentacje pokazane na tym filmie. Jest też mnóstwo, jakieś tam SSD, Faster RCNN i tak dalej. Tego jest tam kilkadziesiąt. Może przesadzam, natomiast mam tego sporo przetestowanego. Trenowałem też sieci do wykrywania obiektów. Nie trenowałem jeszcze sieci wykrywania masek, Mask RCNN, tylko wykorzystywałem. I mamy też segmentację semantyczną, gdzie przypisujemy klasę do każdego z pikseli. I to też trenowałem. Czyli tak w sumie brakuje mi tylko ta Mask RCNN, natomiast też się przymierzam. Tu bym chciał przedstawić kolegę.
Łukasz Sztyber: W zasadzie wszystko jest napisane, ja jestem doktorantem IBS PAN. To co najbardziej mnie interesuje i to, czym się zajmuje w ramach studiów to te systemy sterowania. Też skończyłem kurs ten, o którym Karol wspomniał, gorąco polecam, jeżeli ktoś chciałby się zmierzyć i ma dużo czasu, bo niestety wymagania są dość spore. Tam wspominają o kilkunastu godzinach tygodniowo, natomiast dużo osób mówi, że efektywnie wychodzi tak koło trzydziestu, czterdziestu godzin, żeby to w terminie wszystko pozaliczać. No i pasjonuję się różnymi rozwiązaniami opartymi na sztucznej inteligencji, w tym między innymi samochodami autonomicznymi. Przygotowujemy się w ramach jednego zespołu do zawodów w październiku.
Maciej Dziubiński: Cześć, ja się nazywam Maciek i skończyłem fizykę na UW, zrobiłem magistra, potem uznałem, że jeszcze mi mało, zrobiłem doktorat z biofizyki. Potem zrobiłem, a raczej jestem w trakcie robienia właśnie tego kursu, o którym była mowa. Zostały mi dwa tygodnie na oddanie ostatniego projektu i coś czuję, że się nie wyrobię. Jestem też członkiem takiej organizacji, grupy zrzeszającej znajomych, którzy zajmują się uczeniem maszynowym, to się nazywa OPIUM i możecie sobie znaleźć. A pracuję, jako inżynier uczenia maszynowego w firmie, która się nazywa Nethone, gdzie nie analizuje, a analizuję coś zupełnie innego, bardziej ustrukturyzowane dane i zdobywam doświadczenie w uczeniu maszynowym.
Budowa samochodu 1:10 – Calvin F1/10
O budowie samochodu autonomicznego, oraz danych jakie można pobrać już teraz by zacząć pracę bez pojazdu. Zachęcam do zajrzenia do pierwszego posta o F1/10. A prezentacja do pobrania tutaj:
Filmy z prezentacji:
Transkrypcja
Maciej Dziubiński: No cześć, więc pomysł był taki, żeby zbudować samochód do konkursu F1/10, czyli wszystko zgodnie ze specyfikacją. Zwłaszcza, że ja nie mam doświadczenia w elektronice, więc dość mocno polegałem na tych materiałach, które były udostępnione przez organizatorów. I zbudowałem sobie samochód na bazie troszeczkę innego podwozia niż to, co było w specyfikacji. Wszystko w zgodzie, może być i tak dalej i tak dalej. I to jest Traxxas Slash i on ma napęd na tylne koła. To jest ten samochód, który jest proponowany w F1/10, ma napęd na cztery koła. To nie jest chyba jakaś strasznie duża różnica, gdy się jedzie po płaskim. No i ten samochód, który zbudowałem jest tutaj. Na końcu powinien być filmik, gdzie jest, w środku właściwie powinien być filmik, gdzie tym samochodzikiem jeżdżę po biurze. I teraz jak zbudowałem ten samochód? Więc pierwszy krok to było to podwozie.
Takie podwozie to jest koszt 1000 złotych około,
więc nie jest to tania impreza. No ale tak, to od razu mówię, że to może kosztować trochę, jeżeli się chce faktycznie robić to dokładnie zgodnie ze specyfikacją. Druga kwestia to była taka, że z racji tego, że to podwozie jest troszeczkę dłuższe niż to, które jest w specyfikacji to musiałem sobie drukować elementy 3D, które miały być elementami nadwozia, które trzymają kamerkę, są podstawą do lidara i są podstawą do Jetsona, w sensie do komputera pokładowego. I tutaj są takie przykładowe elementy, które wydrukowałem przy pomocy kolegów z firmy, która się nazywa Skriware. Oni nie zajmują się wydrukiem, ale zajmują się też sprzedażą drukarek 3D i też zajmują się kursami z robotyki. I oni byli tak mili, że podrukowali po pierwsze, mi te elementy, a po drugie, powiedzieli, że jeżeli będą tutaj na tym spotkaniu jacyś ludzie, którzy są zainteresowani budowaniem takiego samochodu i będą chcieli faktycznie na tym samym podwoziu, co ja buduję, będą chcieli te elementy to wystarczy się zgłosić na Slacku tego meetupa i wtedy mogą po prostu za darmo wydrukować tego typu elementy. Przy czym może nie każdemu, no bo jeżeli ktoś robi samochód i faktycznie ambitnie chce do tego podejść to wtedy ma to sens, ale jeżeli się więcej osób zgłosi to wtedy przestaje mieć sens. No ale generalnie jak byście byli zainteresowani, chcieli sobie taki samochodzik zbudować to wiedzcie, że jest taka możliwość, żeby dostać te elementy już gotowe. Jednostka obliczeniowa.
Na pokładzie jest Jetson, ja użyłem Jetsona TX1.
Tutaj są zapisane jakieś parametry. Przede wszystkim to, co jest najważniejsze to, że jest tam karta graficzna. W sensie jest tam GPU, takie programowalne GPU, na którym stoi płyta, którą da się, na której da się rozliczyć sieci neuronowe w taki szybki sposób. Czyli jest to jednostka, która wspiera TensorFlow, wspiera inne biblioteki do uczenia sieci neuronowych. I to jest tak naprawdę kluczowe, bo jakby można równie dobrze to budować na Raspberry PI, ale jeżeli się nie chce wykorzystywać sieci neuronowych to warto mieć GPU na pokładzie. Czy coś jeszcze powinienem powiedzieć o Jetsonie? W zasadzie to nie. Ale to jest koszt, kolejny koszt 1000 złotych około, jeżeli się kupuje takiego Jetsona z jakimiś tam dodatkowymi zniżkami. I teraz, w ramach tego konkursu F1/10 jest wystawiony projekt takiego układu zasilającego, oni to nazywają power board, który zarówno ma na sobie mikrokontroler, za pomocą którego sterujemy servo, czyli kołami, jak i sterujemy silnikiem. Trzeba sobie ten układ wydrukować jakoś. Jako, że nie miałem doświadczenia w elektronice to musiałem się dość mocno namęczyć ze zdobyciem tego projektu i ze zrealizowaniem tego projektu. Jestem już prawie na końcu. To co potrzebuje jeszcze to jest coś, co się nazywa LiPo Protection, to jest ochrona do baterii LiPo, przed nadmiernym rozładowywaniem się. I ten samochodzik, który zbudowałem tutaj on jest bez jeszcze, jeszcze bez tego power boarda, jest po prostu ze zwykłym mikrokontrolerem, ten mikrokontroler to jest Teensy, to jest coś na modłę Arduino. Tak. Dobrze. I teraz jedna z ważnych rzeczy. Ja sobie zamówiłem takich płytek, tych, które widzicie po lewej, bez samych komponentów w sumie dziesięć, bo tak po prostu, najzwyczajniej na świecie, jest taniej. Więc jeżeli ktoś z was byłby zainteresowany taką płytką, to ja też chętnie mogę udostępnić, to nie ma problemu. Dalej idąc. Kolejnym elementem, który jest drogi i który jakby, jeżeli by się chciało go robić zgodnie ze specyfikacją i który należałoby kupić to kamerka 3D ZED. I to jest też rząd 1000 złotych. Więc naprawdę się to zaczyna robić drogie.
No i właśnie w tym samochodzie mam tę kamerkę ZED.
Coś czego nie mam, a czego nie mam w specyfikacji to jest LIDAR i to jest coś, co Łukasz ma na swoim samochodzie i coś, co jest bardzo, bardzo przydatne przy sterowaniu takimi samochodami. I to jest tak naprawdę tych komponentów, które są naprawdę drogie. I tutaj już jest zbudowany taki samochodzik, ten po lewej. Zresztą to jest ten sam co tutaj. I mam króciutki filmik, gdzie jeżdżę nim po biurze. Czyli tak, sterowanie idzie z pada, właśnie to jeszcze nie jest autonomiczna wersja samochodzika, to jest jakby sterowanie z ręki. Sterowanie z pada idzie bezpośrednio przez Bluetootha, idzie do Jetsona. Na Jetsonie stoiROS, który to zbiera ten sygnał, transformuje go, wysyła przez mikrokontroler do servo i do silnika. Te dane są jakby zbierane, w sensie obraz z kamerki, wizja jest zbierana. Sygnał z pada jest zbierany. Tak, aby potem można było nauczyć model na przykład sieci neuronowej robić regresję, która steruje tym samochodem. No i tutaj sobie jeżdżę po swoim biurze. Tam na pokładzie mam ekran, który w pewnym momencie spada z tego samochodu. To było spowodowane tym, że miałem pewne problemy z parametryzacją tego, w jaki sposób się zachowuje ten samochód. O właśnie, tutaj jest ten moment. Więc chciałem w każdej chwili móc coś zmienić. No i dobra, i słuchajcie. Może bardzo szybko kończąc, jeżeli macie jakieś pytania, na temat tego jeszcze, jak wyglądała budowa tego samochodu, z jakimi problemami musiałem się zmagać i tak dalej i tak dalej no to pewnie już po meetupie możecie podejść i spytać. Nie wiem, możemy spróbować też uruchomić ten samochodzik znowu.
A teraz może jeszcze parę słów o prostszym podejściu…
Karol Majek: Czy ja wiem, od razu prostszym… Natomiast tak, teraz o drugim rozwiązaniu. O tym pojeździe. Tutaj mamy Raspberry Pi, czyli dużo mniejszą moc obliczeniową, więc powiedziałbym, że problem jest trudniejszy. Natomiast używamy lasera do lokalizacji, do sterowania. Obecnie jeszcze lokalizacja nie jest zaimplementowana. Znaczy testowaliśmy lokalizację, natomiast nie na pojeździe. Więc na laptopie w takich warunkach wygodnych. Można ten samochód kupić za 400, czy 500 euro w sklepie tam Erle Robotics. I on jest gotowy, znaczy bez lasera. Więc jest samochód. Nie wiem, czy tam jest pilot? Jest pilot. Więc to jest bardzo fajne rozwiązanie. To chciałem Tobie dać głos, ale to jeszcze chcę powiedzieć, dobrze. Jak to wyglądało w praktyce? Bo robiliśmy sporo testów w biurze Daftcode, a otóż kod źródłowy można znaleźć na Meethubie, więc to Open Source jest, więc to też nie będzie problemu. Mamy na zdjęciu dwa pojazdy, ten jeszcze nie wygląda tak świetnie jak tutaj, bo to zdjęcie jest już stare, natomiast jeśli chodzi o dane, bo zebraliśmy tutaj z kilku przejazdów dane, które udostępniamy również po to, żeby można było zacząć, zacząć tworzyć właśnie rozwiązania jakieś, algorytmy, czy inne sterowania, prawda? Na podstawie danych, które są z takich samochodów bez kupowania samochodów. Więc możemy pobrać zbiory danych. Pierwszy zbiór danych to jest zbiór danych, gdzie mamy obraz z kamery. Kamera jest zamontowana na… to jest z tej kamery tutaj z Erle Rovera, więc tak wygląda obraz z kamery. Tutaj mieliśmy jeszcze taką ideę, żeby zrobić pierwszą taką prostą rzecz, czyli jeżdżenie po linii.
Taki line follower niby. Natomiast z tego zrezygnowaliśmy
z uwagi tego, że na zawodach będzie to jeżdżenie po trasie, która będzie wytyczona przez ścianę o wysokości tam 30 centymetrów po to, żeby właśnie wykorzystać laser. Tutaj mamy też odnośnie tego pierwszego zbioru danych post na blogu. Ja później wstępnie te prezentacje, chyba tak, w meetupie, myślę, że tam gdzieś w dyskusji wrzucę, jakiś znajdę sposób. Bo obecnie sposobu nie znam, jak to udostępnić. Więc znajdę jakiś sposób właśnie na udostępnienie tam w meetup tych prezentacji. W ogóle film z wydarzenia będzie udostępniony też chyba na YouTubie, tam oczywiście będzie wycięte jakoś, natomiast będzie to udostępnione. I jeszcze mamy drugi zbiór danych, gdzie mamy dane z lasera. I myślę, że to jest bardzo ciekawe, bo to jest już w kontekście, bardziej właśnie w kontekście zawodów, gdzie mamy trzy przejazdy, zdaje się, w jedną stronę i trzy przyjazdy w przeciwną stronę po budynku Daftcode, gdzie tu jest stworzona mapa właśnie, mapa tego budynku. Minus jest taki tego pojazdu w obecnym stanie, że
nie ma on odometrii, a więc mapa jest stworzona na podstawie samego lasera.
Są tam błędy, to jest pewne. Natomiast widać, że mapa jest spójna. A tutaj pośrodku widzimy pojedynczy skan z lasera. Pojedynczy skan z lasera, gdzie tam zasięg jest 30 metrów, gdzie po prostu 30 metrów to jest ta największa odległość w tym skanerze. Planujemy jeszcze przetestować skanery firmy SICK, tam jest chyba zasięg 10 metrów, też podobnej wielkości. No i oczywiście zachęcam tutaj do pobrania zbioru danych do jakichś, prawda, eksperymentów. Nie ma jeszcze żadnego posta na blogu odnośnie właśnie tego zbioru danych, natomiast myślę, że w przyszłości to się pojawi. Chciałem zaprezentować krótką rzecz właśnie a propos tego skanera firmy SICK, oni bardzo fajną prezentację zrobili, więc tak tutaj chciałem pożyczyć i wykorzystać. Więc jeśli ktoś nie zna idei, jak działają skanery laserowe, tutaj widać tę ideę. Mamy tam po prostu obracające się lustro i jest obniżony czas odbicia wiązki od przedmiotu i powrotu do skanera. I na podstawie tej wiedzy, że wiemy, jaka jest prędkość światła i wiemy, jaki jest czas powrotu, jesteśmy w stanie wyznaczyć odległość. I czekam na, czekam jeszcze na ten jeden rysunek, o.
I to jest ten zasięg 10 metrów w 270 stopniach dookoła.
I dzięki właśnie zastosowaniu laserów możemy tutaj omijać przeszkody dość precyzyjnie, bo mamy, załóżmy, centymetr albo trzy centymetry dokładności. Więc to nam pozwala wnieść informację metryczną, budować mapy dwuwymiarowe bądź trójwymiarowe. O mapach trójwymiarowych mam nadzieję, że w ostatniej prezentacji dzisiaj będzie więcej. I po tym krótkim wprowadzeniu do skanerów laserowych chciałem pokazać, jak wygląda ten nasz zbiór danych, ten drugi, już posiadający również dane z kamery, ale również dane z lasera. Więc nasz pojazd znajduje się tutaj, w tym miejscu, pośrodku i z prawej strony widzimy ścianę, którą tutaj, tutaj widać, a po lewej stronie biurka różnego rodzaju i inne przeszkody. I mając taką informację tam w promieniu 20 metrów, czy 15 metrów możemy budować mapę, możemy się lokalizować na tej mapie i to byśmy chcieli zrobić.
Chcielibyśmy zbudować mapę w pierwszym przejeździe, a następnie wykorzystać tę mapę do lokalizacji i do znajdowania się na trajektorii.
I na podstawie tego już sterować pojazdem wykorzystując model ruchu i tak zrobić to naprawdę profesjonalnie. Natomiast do tego jeszcze troszeczkę brakuje. Obecnie nasze rozwiązanie sprawdza po prostu, gdzie jest najbardziej obiecujący kierunek i w tym kierunku samochód rozpoczyna jazdę. Natomiast próbuje cały czas zachować równą odległość od obu ścian, co nam zapewnia przejazd na środku korytarza. I możemy tutaj jeździć różnymi prędkościami, natomiast jest pewny, mały problem, że za zakrętem przestajemy widzieć samochód, dlatego zwalniamy po prostu. Bo tutaj mamy takie rozwiązanie zrobione, że prędkością sterujemy z ręki, żeby w razie czego zatrzymać ten pojazd, natomiast skręcanie jest zrobione automatycznie. Tak, co do pojazdu, on się potrafi rozpędzić do, jeśli nie skłamię, to do kilkudziesięciu kilometrów na godzinę. Więc to są dość duże prędkości i to może być po prostu niebezpieczne. Tutaj staramy się jednak pracować w biurach, po nocy zwyczajnie, gdy już raczej nikogo nie będzie. Natomiast też pojawiają się w związku z tym problemy. A tak to wygląda z pierwszej osoby. Tutaj poświęciłem własny telefon. No i widać, tam zresztą ktoś sprzątał. Więc też zrezygnowaliśmy z dalszej. I to będzie ostatni slajd w tej prezentacji. Co do, co do zbiorów danych to informacje były, linki się pojawią na stronie meetupu, a teraz bym chciał zaprosić zespół, zespół z Koła Naukowego Robotyków.
KNR PW MEiL – Selfie
Prezentacja pojazdu Koła Naukowego Robotyków z Politechniki Warszawskiej z wydziału Wydziału Mechanicznego Energetyki i Lotnictwa. Studenci właśnie wygrali zawody International Autonomous Robot Racing Challenge 2018 w Kanadzie. Obecnie szykują się do zawodów F1/10.
Film pokazujący samochód:
Transkrypcja
Michał: No to chyba możemy zaczynać drugą prezentację. Cześć, ja jestem Michał i dzisiaj razem…
Mateusz: Z Mateuszem.
Michał: Przedstawimy wam nasz projekt autonomicznego samochodu realizowany przez Koło Naukowe Robotyków na Politechnice Warszawskiej. My samochodami autonomicznymi zajmujemy się od półtora roku. Zbudowaliśmy dwa samochody. Pierwszy na zawody Carolo-Cup w Niemczech, a drugi na zawody w Kanadzie International Autonomous Robot Racing Challenge. To jest ten drugi samochód. Pokażemy także trochę filmów związanych z pierwszym samochodem, ale generalnie prezentacja jest nastawiona na samochód, który widzicie i na slajdzie i przed nami. Dlatego, że jest bardziej dopracowany i osiągnęliśmy troszeczkę lepsze rezultaty. Jeżeli chodzi o plan prezentacji to zaczniemy od krótkiego wprowadzenia, od czego zaczynamy etap projektowy, pokażemy wam, co wsadziliśmy do tego samochodu i co naszym zdaniem warto stosować, trochę sztuczek, jakie w softwarze zastosowaliśmy i ewentualnie odrobinę, jak to u nas wygląda od strony zarządzania projektem. Samą fazę projektową każdego samochodu rozpoczynamy od ogólnych konceptów, które zależą od wymagań, jakie są na konkretnych zawodach. To znaczy ten samochód jest stworzony na zawody, które odbywają się na dworze, przy zmiennych warunkach oświetlenia, na parkingu, który jest bardzo wyboisty i zupełnie inny samochód buduje się pod takie zastosowanie, a całkiem inny pod samochód, który będzie jechał w izolowanym środowisku, które symuluje drogę, a jest w pomieszczeniu. To co my zawsze się staramy zrobić to jest minimalizacja wszelkich zbędnych komponentów, optymalizacja tego, co my tam wsadzimy, żeby sensorów było jak najmniej, tylko to, co potrzebujemy. Minimalizujemy też w ten sposób koszty. A przy tym, jeżeli chodzi o samą strukturę samochodu, zawsze jest to struktura bardzo modułowa. To znaczy staramy się, aby dało się testować podsystemy jak najbardziej w sposób jednostkowy i żeby zespoły mogły pracować wiele razy, żeby różne zespoły mogły pracować nad różnymi elementami całego systemu. Tutaj odrobina historii. Nasz samochód z pierwszych zawodów, z Carolo-Cup właśnie.
Wtedy samochód miał za zadanie poruszać się po symulowanym środowisku drogowym ze skrzyżowaniami,
które trzeba obsłużyć, ze znakami pionowymi i poziomymi tylko, że w innej kategorii, parkować równolegle i prostopadle, ustępowanie pierwszeństwa pieszym jeszcze było i z grubsza tyle. Jeżeli chodzi o zarządzanie to spotykamy się co tydzień i wydaje nam się, że tylko w ten sposób da się rozsądnie prowadzić taki projekt, gdzie jest trochę więcej osób, bo nas jest około dziesięcioro. I żeby każdy był na bieżąco, jest to całkiem rozsądne wymaganie. Jesteśmy podzieleni na cztery główne podzespoły, mechanikę, wizję maszynową, tak zwany embeded i planowanie trajektorii albo inaczej optymalizacja algorytmów. Nie są to aż tak sztywne, sztywne podziały. Bardzo często osoba jest na granicy gdzieś między dwoma, takie ma po prostu zadanie. Jeżeli chodzi o aplikacje, standardowo stosujemy Githuba, Slacka i w pewnych zastosowaniach Trello, ale w bardzo marginalnych. I teraz rozpoczniemy akapit, jak to jest zrobione właściwie. Samą konstrukcję rozpoczynamy od modelu 3D samochodu, który realizuje zespół mechaników. Następnie podczas konsultacji z całym zespołem, wszystkimi członkami, to znaczy zarówno z elektronikami, jak i tymi od wizji odpowiednio rozmieszczamy i planujemy, dobieramy komponenty takie jak powiedzmy komputer, układ zasilający, czy wszystkie sensory. Chcemy przewidzieć jak najwięcej się da już na tym etapie, żeby od razu była to przemyślana koncepcja i żeby oszczędzić sobie błędów na później. Bardzo aktywnie wykorzystujemy tu 3D, wiele uchwytów i różnych elementów montażowych jest właśnie z druku. Lekkie, wytrzymałe, do naszego projektu idealne. W tym samochodzie jeszcze mamy zderzak, dlatego że miał być na wyścigi i przy testach, ale i na właściwym konkursie czasem takie coś się przydaje, jeżeli przy dużej prędkości mamy jeździć.
Mateusz: Teraz opowiemy trochę o tym, jaki hardware mamy najważniejszy zastosowany u nas. Więc jako główną jednostkę obliczeniową zastosowaliśmy procesor Intela i3. Jest to taka ewolucja w naszym projekcie, ponieważ na początku pracowaliśmy na płytkach Raspberry, również testowaliśmy platformę Jetson, co prawda inną niż tutaj, bo my wersję TK1, a ostatecznie do zawodów w Carolo zdecydowaliśmy na ODroida, czyli taką troszeczkę mocniejszą wersję Raspberry. Obecnie działamy na tym i udało nam się uzyskać około dwunastokrotnie większą wydajność względem ODroida, więc architektura Intela jest rzeczywiście o wiele wydajniejsza, jeśli chodzi o OpenCV, które stosujemy. Do pobierania obrazu zastosowaliśmy kamerę firmy IDS,
przy naszej rozdzielczości możemy osiągać nawet do 100 fpsów mniej więcej,
jest to również rozwój, ponieważ na Carolo mieliśmy sensor, który miał tylko 30 fpsów. Przy większych prędkościach wiadomo, musimy mieć większą częstotliwość odświeżania, bo inaczej nie do końca wiemy, gdzie się znajdujemy. Równie ważny jest dla nas kąt widzenia, tutaj mamy taki obiektyw dobrany, aby mieć 130 stopni. Chcemy widzieć po prostu jak najszersze pole pasa. Natomiast jeśli chodzi o zebranie danych ze wszystkich sensorów i kontrolowanie silników to zastosowaliśmy kontroler lotu AnyFC, który ma w sobie mikrokontroler STM F7. Jest to najmocniejsza wersja tego mikrokontrolera, często z niego korzystamy w kole, więc był to dość oczywisty wybór, a jednocześnie ma do naszych zastosowań wydajność. Warto wspomnieć, że na pokładzie jest też IMU, więc nie problemu z podłączaniem jakichś dodatkowych peryferiów.
Michał: I architektura systemu, jeżeli chodzi o poszczególne połączenia i komunikację. Tak naprawdę to architektura systemu wymusza trochę podział na zespoły, ponieważ jedną odrębną rzeczą jest komputer, a drugą właśnie kontroler, czyli AnyFC w tym wypadku. To, co zaimplementowaliśmy szczególnie ostatnio to nacisk na zdalny monitoring i diagnostykę. Mamy trzy teraz bezprzewodowe łącza, czyli Bluetootha, fale radiowe i WiFi i okazało się strzałem w dziesiątkę, ponieważ operator tak naprawdę z aparatury już dokładnie wie, co się stało, co poszło nie tak, gdzie jest błąd. I przekazujemy na bieżąco kluczowe parametry pojazdu. Staramy się też optymalizować czasowo wszelkie przesyły, dlatego nie ma jakichś podwójnych, podwójnego przekazywania informacji. Komputer z AnyFC jest spięty po USB, w dwie strony jest wymiana parametrów, które są, są potrzebne. Główne obliczenia są oczywiście na komputerze, tam jest zarówno wszystko związane z wizją maszynową, jak i z planowaniem trajektorii. Jeżeli chodzi o sensory to mamy tak naprawdę dwa główne, LIDAR, który służy do lokalizacji przy dużej prędkości przeciwników i umożliwia nam późniejsze wyprzedzanie ich. To znaczy rozpoznajemy poprzez LIDAR przeciwnika, podajemy to do naszej aplikacji, która wyznacza optymalną trajektorię i ona sobie już z tym radzi. Drugim czujnikiem jest TF mini, jest to laserowy, punktowy czujnik o zasięgu 12 metrów.
Pozwala nam zatrzymywać się w konkurencji Drag Race,
w której chodzi o 60 metrów wyścigu po prostej, gdzie musimy zatrzymać się na końcu, na specjalnej strefie hamowania. A tak duży dystans pozwala nam zaplanować etap hamowania. Bo jeżeli jeździmy z prędkością 10 metrów na sekundę, czy nawet 13 metrów na sekundę to rozsądniej jest hamować po jakiejś rampie. Na mikrokontrolerze mamy system czasu rzeczywistego z odpowiednią priorytetyzacją wątków, to znaczy na samej górze jest aparatura RC. Aparatura pozwala zdalnie przejąć kontrolę nad pojazdem, wyłączyć napędy, jest generalnie takim awaryjnym zabezpieczeniem, jeżeli coś pójdzie nie tak. Pozostałe wątki po kolei są ustawiane według jakiejś hierarchii. Na samym dole tradycyjnie telemetria, Bluetooth też dosyć nisko, nie są to ważne rzeczy. Stresowanie u góry.
Mateusz: Teraz opowiemy, jak wygląda strona softwareowa detekcji tych linii i generalnie, jak to zrobiliśmy. Pierwszym sposobem, jaki wykorzystujemy, pobierając obraz z kamery, dokonujemy najpierw transformacji perspektywy, aby uzyskać taki pseudorzut z góry. Dzięki temu wszelkie kąty między liniami są zachowane, bo z perspektywy kamery wygląda to zupełnie inaczej. Następnie taki dość typowy sposób, zmieniamy przestrzeń barw z RGB na HSL. I dzięki temu na kanale saturacji możemy łatwo wykryć linię żółtą, natomiast na kanale jasności bardzo łatwo wykryć jest linię białą. W ten sposób też rozróżniamy, która jest gdzie i co jest z lewej, co jest z prawej. Natomiast jeżeli mamy już takie obrazy binarne to korzystamy z metody takich poruszających się regionów zainteresowania. Na początku skanujemy oczywiście cały obraz, a potem w kolejnych klatkach aktualizujemy ich położenie, wykonując w każdych z nich histogram. I po prostu szczyt histogramu jest to wykryta przez nas linia. Jak widać, nawet jeżeli po drodze mamy gdzieś oślepienie sensora przez światło, ten czerwony kwadrat, to możemy ratować się poprzez uśrednienie pozycji. Pierwsza metoda jest wykorzystywana w drag race, ponieważ tam nie ma znacznych odchyleń, więc te kwadraty raczej się nie gubią. Natomiast w circut’ie
korzystamy z metody Douglasa-Peuckera.
Polega ona w skrócie mniej więcej na tym, tak jak na dole widać, kiedy mamy już ten obraz binarny, każdy piksel uznajemy za wierzchołek pewnej wielołamanej i próbujemy ją jak najbardziej uprościć. Łączymy pierwszy i ostatni punkt, zataczamy pewne ypsylonowe ich otoczenie i jeżeli kolejny punkt znajduje się w tym otoczeniu to znaczy, że nasza prosta jest odpowiednim ich przybliżeniem. Jeśli nie to znaczy, że ten punkt musimy również uwzględnić w wyjściowej łamanej, aby zachować oryginalny kształt. I w ten sposób budujemy to, co widać na prawym obrazku, jako czerwone linie. To jest ta końcowa łamana, a niebieskie to jest ta początkowa. I to następnie przesyłamy przy pomocy shared memory do naszej kolejnej aplikacji, która zajmuje się wyznaczeniem optymalnej trajektorii. To jest ona, te fioletowe kwadraty są to pola, w których wykryliśmy naszą linię i następnie dla każdej lewej i prawej linii wyliczamy polyline, który przybliża mniej więcej trasę, w której chcemy się poruszać, a następnie dla środkowego uśrednienia tych obydwu linii wyznaczamy styczne, gdzieś w oddali i tuż przy aucie. Następnie uśredniamy je z pewnymi wagami i mamy, mamy kontr na servo, które steruje naszym pojazdem. Również jeżeli zobaczymy, że w oddali gdzieś mocno nam trasa skręca to na tej bazie regulujemy prędkość naszego pojazdu. Warto też wspomnieć, w jaki sposób wykorzystujemy LIDAR, LIDAR służy nam do wykrywania oczywiście przeciwników. Jeżeli w danym sektorze na trasie znajdziemy jakąś przeszkodę to staramy się sprawdzić, czy to jest przeciwnik, czy to jest być może pachołek. Jak będzie widać na filmach, czasami na trasie stoją też pachołki. Generalnie robimy to na zasadzie, jeżeli nasza prędkość zgadza się z tym, jak skraca się odległość względem obiektu to znaczy, że jest to obiekt stacjonarny. A jeżeli on się od nas oddala to wtedy wiemy, że jest to przeciwnik i dajemy odpowiedni offset, aby przesunąć się i móc przejechać koło niego.
W jaki sposób testujemy?
Ze względu na to, że jesteśmy podzieleni na grupy to najpierw każda z grup robi testy we własnym zakresie. Jeżeli jesteśmy pewni, że dane rozwiązanie jest gotowe, wdrażamy je i łączymy to wszystko już na bazowym pojeździe, sprawdzamy, sprawdzaliśmy szybkie poruszanie oraz detekcję i bezpieczeństwo, na przykład to hamowanie, jeżeli nagle na trasie coś nas zaskoczy, przednim sensorem, aby móc się zatrzymać bezpiecznie, w nic nie uderzyć. Jeżeli chodzi o bezpieczeństwo, tak jak było mówione, system czasu rzeczywistego daje nam możliwość spriorytetyzowania aparatury, dzięki czemu kontroler zawsze ma możliwość wyłączenia awaryjnego systemu. Również na platformie Intel, na płycie głównej mamy napisanego przez nas watchdoga, który uruchamia odpowiednie konfiguracje, aplikacje, sprawdza ich, pilnuje, aby sprawdzić, czy poprawnie działają. Jeżeli są jakieś błędy to podejmuje odpowiednie działania. Testowanie. Testowanie w złym miejscu, na rzeczywistej trasie, gdzie zawsze coś może nas zaskoczyć, w różnych warunkach jak widać. No i dobieranie parametrów, aby jak najlepiej zaprezentować się na konkretnej trasie. I tak wyglądały już nasze zawody. To jest akurat start do Circuita, cztery auta naraz. I w jaki sposób tam nam się udało? Jakie wyniki udało nam się tam osiągnąć? Na drag race 9 metrów na sekundę, prędkość maksymalna.
I cały czas przejazdu po trasie 60 metrów 8 sekund.
Było to spowodowane tym, że prowadzący, organizatorzy wprowadzili ograniczenie, żeby auta nie jechały powyżej 10 metrów na sekundę, tak w celach bezpieczeństwa. Natomiast w momencie, kiedy już było po zawodach, spróbowaliśmy jechać szybciej, mieliśmy 13 metrów na sekundę i zmniejszyliśmy ten czas do 6 sekund. Natomiast w konkurencji circuit trzy okrążenia, 5 metrów na sekundę mniej więcej jechaliśmy i 4:48 był wynik. Oba te wyniki dały nam pierwsze miejsca w obydwóch kategoriach, co ostatecznie przełożyło się na zwycięstwo w całym konkursie. Dziękujemy za możliwość zaprezentowania się na tym meetupie, jeżeli macie jakieś pytania do nas, może czegoś nie dopowiedzieliśmy, to chętnie na nie odpowiemy. Zaprezentujemy też zaraz jakieś filmy z naszych przejazdów, żebyście zobaczyli lepiej, jak to wyglądało.
Michał: No tak, filmów nie mamy w prezentacji, ale trochę przed chwilą ściągnęliśmy na komputer, więc możemy pokazać. Z tych zawodów. Z poprzednich nic chyba nie. Ale z tych zawodów coś pokażemy.
mężczyzna: Pytanie będzie szybkie, jak dużo czasu wam zajęło zbudowanie takiego prototypu od momentu koncepcji jakiejś do całego gotowego rozwiązania?
Michał: Trzy, cztery miesiące ten samochód.
mężczyzna: I w zespole dziesięcioosobowym, tak?
Michał: W zespole dziesięcioosobowym, tak. Tam od czasu do czasu jest wymiana osób, ale staramy się dosyć dobrze ten transfer wiedzy w kole trzymać, dlatego trzymamy poziom jak na razie.
mężczyzna: Jak robicie testy do tych każdych jakby z komponentów z osobna, to jak byście mogli powiedzieć coś więcej na temat tego, jak wyglądają te testy? No jakiś przykład. A po drugie, czy robicie na przykład testy łączenia tych komponentów i jakiego rodzaju to by były testy z kolei?
Michał: Jeżeli chodzi o początkową część, no to jedną rzeczą jest na przykład detekcja linii. Więc wizja maszynowa testuje linie oddzielnie, niekoniecznie na pojeździe. I analogicznie tak naprawdę wszystkie pozostałe elementy gdzieś tam…
mężczyzna: A na przykład kalibracja, że kamerka jest akurat w takim położeniu, które… nie wiem, czy sprawdzacie na przykład, czy udało wam się sklecić to z powrotem?
Michał: No naturalnie też, oczywiście też. Więc z kamerami jest podobnie. Właściwie cały samochód po kolei trzeba przetestować na taką sytuację. A jeżeli chodzi już o łączenie to możesz powtórzyć jeszcze raz, o co chodziło?
mężczyzna: Jak na przykład masz dwa komponenty i one ze sobą wchodzą w interakcję to prawdopodobnie trzeba by mieć też testy, w jaki sposób one razem wykonują swoje zadanie. Czy macie taki test właśnie super hiper fikuśny, że tam połączenie wizji z czymś tam i coś tam, coś tam?
Michał: Generalnie na przykład połączenie między komputerem, a mikrokontrolerem tak. I to sprawdzamy za każdym razem, przy każdym uruchomieniu. Jeżeli nie ma tego to już operator ma na aparaturze, czy na Bluetoothie informację, że coś jest nie tak. Tak samo stan aplikacji, czy na przykład, że kamera nie jest podłączona, bo wyskoczył jakiś błąd. Więc my to wrzucamy na bezprzewodowe jakieś łącza.
Filmy z zawodów:
Tom Tom HD Maps
Ostatnia prezentacja, która poszerzyła horyzont ze skali mikro do nawigacji samochodów autonomicznych po całym świecie. Obecnie w oddziale w Łodzi jest 76 miejsc pracy. Zachęcam do sprawdzenia ofert tutaj lub na stronie Tom Tom.
Linki
- Warsaw Self-Driving Cars
- Nagranie z Meetupu
- Pierwszy post o F1/10 z danymi do pobrania!
- Prezentacje:
- Zawody F1/10 w Turynie
- Oferty pracy w Tom Tom
Szczególnie chciałbym podziękować Natalii Zaborniak, która przygotowała transkrypcję tego i następnego wydarzenia. Dzięki!