Robot omijający przeszkody¶
Cel ćwiczenia¶
Zapoznanie się z działaniem czujników odległości. Zaplanowanie i zaprogramowanie sterownika realizującego nawigację z omijaniem przeszkód.
Wstęp teoretyczny¶
W zadaniu nawigacji robotów mobilnych duże znaczenie ma rozpoznawanie cech geometrycznych otoczenia (rozpoznawanie i omijanie przeszkód). Zadanie to realizowane jest przez tworzenie bitowych lub wektorowych map otoczenia. Pozyskiwanie informacji o otoczeniu może być realizowane online (tworzenie dynamicznej mapy otoczenia) lub offline (stworzenie statycznej mapy otoczenia która zostanie użyta do zaprojektowania optymalnej ścieżki). W drugim przypadku mapa może być uaktualniana na bieżąco, aby uwzględnić zmiany środowiska.
Układy współrzędnych¶
Obserwację otoczenia realizują czujniki odległości. Czujniki rozmieszczone są zwykle na obwodzie robota i skierowane w różnych kierunkach (dla robota jadącego wyłącznie do przodu nie ma sensu stosować czujników wycelowanych do tyłu). Każdy z czujników mierzy odległość od przeszkody w kierunku na wprost od siebie (a więc w układzie współrzędnych związanym z danym czujnikiem). Jednak to, co nas interesuje, to położenie przeszkód w obiektywnym układzie współrzędnych (układzie świata). Dlatego współrzędne zmierzone przez czujnik należy przekształcić najpierw do układu współrzędnych związanych z robotem (uwzględniając położenie i orientację czujników) a następnie do uładu zewnętrznego (uwzględniając położenie i orientację robota). Współrzędne przeszkody leżącej w odległości \(d_i\) od i-tego czujnika w jego układzie współrzędnych wynoszą \(\begin{bmatrix}d_i\\0\\1\end{bmatrix}\) (są to tak zwane współrzędne jednorodne znormalizowane). Macierz przekształcenia dla rotacji o kąt \(\theta'\) i translacji o wektor \(\begin{bmatrix}x'\\y'\end{bmatrix}\) ma postać:
Tak więc współrzędne przeszkody w układzie świata będą wynosić:
gdzie \((x, y, \theta)\) są położeniem i orientacją robota a \((x_{s_i}, y_{s_i}, \theta_{s_i})\) położeniem i orientacją i-tego czujnika względem robota (położenie czujnika wyznaczamy względem środka odcinka między kołami).
Sumowanie wektorów i zachowanie Avoid-Obstacles¶
Pomiar każdego czujnika da nam wektor do zmierzonej przeszkody. Czujniki, które nie napotkały przeszkody, zmierzą wartość “nieskończoną” (nieskończoność dla czujnika ultradźwiękowego to wartość \(2550\) wyrażona w milimetrach natomiast dla czujnika podczerwonego to \(100\) co odpowiada odległości \(70\) cm). W związku z tym zachowanie Avoid-Obstacles (unikaj przeszkód) możemy zaprogramować wykorzystując zachowanie Go-to-Goal z poprzedniego ćwiczenia. Jako wektor do celu wykorzystamy wektor, będący sumą wektorów czujników. W przypadku braku przeszkód czujniki skierowane na boki wzajemnie się znoszą, natomiast czujniki skierowane do przodu lub pod kątem do przodu dadzą wkład wyłącznie w kierunku do przodu (składowe poprzeczne wzajemnie się znoszą). W przypadku, gdy czujniki po jednej stronie zauważą przeszkodę, ich wkład będzie mniejszy i sumaryczny wektor będzie odchylał się w kierunku przeciwnym. W efekcie robot nie widzący przeszkód będzie jechał na wprost a robot w pobliżu przeszkody będzie skręcał w kierunku od przeszkody. Ilustruje to poniższy rysunek.
Wykonanie ćwiczenia¶
W ćwiczeniu wykorzystany jest robot educator z trzema czujnikami odległości.
Zainstaluj czujnik ultradźwiękowy zgodnie z instrukcją (zamocowany centralnie i skierowany do przodu) oraz czujniki podczerwone po obu stronach skierowane pod kątem \(60^\circ\). Mocowanie zaprojektuj samodzielnie lub wykorzystaj ten opis. Zmierz odległości (współrzędne \(x\) i \(y\)) od środka robota do czujników.
Zaprogramuj robota realizującego funkcję avoid-obstacles.
Ponieważ w robocie wykorzystywane są czujniki różnych typów, prawdopodobnie konieczne będzie przeskalowanie ich wskazań do wspólnej bazy (np. do wartości w centymetrach).
Prawdopodobnie przydatne będzie wprowadzenie wagi (np. czujnik centralny będzie miał inny wkład niż boczne).
Mnożenie macierzy wykonaj ręcznie lub wykorzystaj możliwości pakietu numpy (możliwe, że trzeba go będzie doinstalować poleceniem
apt-get install python3-numpy
lub pobrać i zainstalować ręcznie, jeśli roboty nie mają dostępu do internetu).w zadaniu można wykorzystać klasę
Pose
z symulatorapySimiam
. Warto również zapoznać się z realizacją kontroleraavoidobstacles.py
w tym symulatorze.
Przetestuj działanie robota. Prawidłowo zaprogramowany robot powinien jeździć po sali nie wpadając na przeszkody.
Opis sprawozdania¶
Sprawozdanie z ćwiczenia powinno zawierać:
Opis modyfikacji mocowania czujników odległości (jeśli różne od zaproponowanych w instrukcji).
Listingi programów (pliki .py i/lub .ev3) z optymalnymi wartościami parametrów.
Wnioski – dyskusja wyników.