Lab 11 - Laboratoria problemowe 2
Lab. 11 - Laboratorium problemowe 2 - “Robot w labiryncie”
1. Laboratoria problemowe
W ramach laboratorium problemowego stawiany jest przed Państwem problem, zagadnienie, które wymaga pracy własnej, szukania rozwiązań, kreatywnego podejścia.
Efektem tego laboratorium nie musi być rozwiązanie problemu. Skupiamy się tutaj na możliwych podejściach, rozważaniu co może zadziałać a co nie zadziała, jakie potencjalne problemy możemy napotkać.
Wynikiem końcowym ma być krótki raport (wiecej na dole instrukcji) oraz ewentualnie program realizujący rozwiązanie problemu. Raport będzie oceniany jak standardowe zadanie domowe, natomiast za implementację możliwe jest do uzyskania dodatkowo do 5 punktów.
2. Problem
Dany jest robot TurtleBot3 typu waffle. Robot funkcjonuje w
środowisku z nieznaną mapą. Jest wyposażony w skaner laserowy (topic
/scan) o zasięgu 3,5 metra oraz sensor IMU.
Robot dysponuje informacją o tym, w jakiej odległości (w linii
prostej) znajduje się od celu (topic
/referee/distance_left) oraz ile czasu już trwa przejazd
(topic /referee/time_elapsed).
Zadaniem robota jest dotarcie do celu (czerwonego punktu) w labiryncie w jak najkrótszym czasie.
3. Przygotowanie środowiska
Przed przystąpieniem do pracy należy przygotować środowisko: Instrukcja przygotowania środowiska do zajęć.
Domyślnie kontener nosi nazwę ARM_11.
UWAGA! Skrypty po uruchomieniu usuwają kontener o takiej nazwie przed utworzeniem nowego.
Korzystanie z kontenera
Po każdym ponownym uruchomieniu komputera, proszę pamiętać o wywoływaniu:
xhost +local:root
Nowy terminal można dołączyć do kontenera korzystając z polecenia:
docker exec -it ARM_11 bash
ROS_DOMAIN_ID
W przypadku pracy na wielu komputerach w tej samej sieci lokalnej
(eduroam też może tego wymagać), konieczne może być ustawienie
zmiennej środowiskowej ROS_DOMAIN_ID na różnych
wartościach. Należy wybrać dowolną liczbę całkowitą z zakresu 0-100.
Wartość tę należy ustawić w pliku ~/.bashrc:
export ROS_DOMAIN_ID=10 # przykładowa wartość
lub bezpośrednio w terminalu (wtedy będzie obowiązywać tylko w tym terminalu):
export ROS_DOMAIN_ID=10 # przykładowa wartość
Sugerowane jest użycie dwóch ostatnich cyfr numeru IP komputera jako
wartości ROS_DOMAIN_ID, aby uniknąć konfliktów z innymi
użytkownikami w sieci. Aby sprawdzić swój adres IP, można użyć
polecenia:
ip addr show
adres IP będzie widoczny przy interfejsie sieciowym, np.
wlan0 lub eth0.
Wygodne może być dodanie tego exportu do bashrc:
echo 'export ROS_DOMAIN_ID=<wybrana_wartość>' >> ~/.bashrc
4. Uruchomienie symulacji
Do zajęć jest przygotowana paczka arm11_sim.
Dostępne są dwa symulowane światy: simple_maze i
complicated_maze. Ten drugi jest większym światem, który
uniemożliwia rozwiązanie trywialne.
Simple maze:
ros2 launch arm_11_sim simple_maze.launch.py
Complicated maze:
ros2 launch arm_11_sim complicated_maze.launch.py
5. Zadanie do samodzielnej realizacji
W ramach zajęć należy zaproponować sposób rozwiązania problemu postawionego w punkcie 2.
Efektem ma być przygotowanie raportu, który będzie zawierał proponowaną strukturę programu (wraz z node’ami i topicami, które będą one wymieniać), paczki z sieci, które można wykorzystać do realizacji zadania oraz opis potencjalnych problemów, na które można napotkać. Mile widziane są reprezentacje graficzne.
Opcjonalnie, można również przygotować program realizujący postawione zadanie (wraz z jego opisem w ramach raportu). Za implementację można otrzymać dodatkowo do 5 punktów.
Proszę o możliwie spójny opis, raport w formie sprzyjającej jego czytaniu :)
Autor: Kamil Młodzikowski