Lab 03 - SLAM 2D i AMCL
Lab. 03 - SLAM 2D i AMCL
1. Czym jest SLAM i AMCL?
SLAM, czyli Simultaneous Localization And Mapping, jest to problem ciągłej konstrukcji i aktualizacji mapy nieznanego środowiska z jednoczesną estymacją pozycji agenta (np. robota).
AMCL, czyli Adaptive Monte Carlo Localization to system probabilistycznej lokalizacji agenta, który wykorzystuje filtr cząsteczkowy (ang. particle filter) do śledzenia pozycji na znanej mapie.
2. Cel zajęć
Celem tych zajęć będzie uruchomienie systemów SLAM i AMCL na symulowanym robocie turtlebot3. Zostanie wygenerowana mapa środowiska robota oraz przeprowadzona autonomiczna nawigacja w znanym środowisku.
Poprzez modyfikację parametrów systemów będzie można przeanalizować ich wpływ na działanie algorytmów.
3. Przygotowanie środowiska
Przed przystąpieniem do pracy należy przygotować środowisko: pobrać obraz dockera i utworzyć na jego podstawie kontener.
Obraz konieczny do wykonywania dzisiejszych zajęć opiera się o osrf/ros:humble-desktop-full
, ale zawiera paczki, które są niezbędne do prawidłowego wykonania zadań. Obraz można pobrać z tego linku, lub korzystając z polecenia:
wget --content-disposition --no-check-certificate https://chmura.put.poznan.pl/s/pszNFePmGXxu1XX/download
Pobrany obraz należy wczytać, korzystając z polecenia, podając odpowiednią ścieżkę:
docker load < path/to/file.tar.gz
Następnie można przejść do tworzenia kontenera korzystając ze skryptów przygotowanych dla osób korzystających wyłącznie z CPU lub wyposażonych w GPU Nvidia. Można pobrać odpowiedni skrypt korzystając np. z wget
.
Domyślnie kontener nosi nazwę ARM_03. UWAGA! Skrypty po uruchomieniu usuwają kontener o takiej nazwie przed utworzeniem nowego.
Korzystanie z kontenera
Po każdym ponownym uruchomieniu komputera (oraz w przypadku problemów z wyświetlaniem aplikacji okienkowych w dockerze), 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_03 bash
Konieczne będzie zbudowanie środowiska
cd /arm_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install
ROS_DOMAIN_ID
W przypadku pracy na komputerze w laboratorium może okazać się konieczne ustawienie ROS_DOMAIN_ID
. Domyślnie, ROS2 rozgłasza wszystko innym komputerom w sieci z tym samym ROS_DOMAIN_ID. Wartość tej zmiennej można ustawić korzystając z:
export ROS_DOMAIN_ID = <wybrana_wartość>
Proszę wybrać losową wartość.
Wygodne może być dodanie tego exportu do bashrc:
echo 'export ROS_DOMAIN_ID=<wybrana_wartość>' >> ~/.bashrc
4. Uruchomienie systemu SLAM
Prace będą odbywać się na robocie Turtlebot3, konieczne jest zatem podanie wersji, z której będziemy korzystać:
export TURTLEBOT3_MODEL=burger
Dostępne są: burger
, waffle
i waffle_pi
.
Następnie można przejść do uruchomienia symulacji świata:
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
W nowym terminalu uruchamiamy węzeł cartographer
, który jest modułem SLAM:
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
Jak widać w rviz2, system zaczął proces budowania mapy. Jako, że robot aktualnie się nie porusza, otoczenie jest widziane cały czas z jednego punktu, więc nie ma pomiarów koniecznych do budowy kompletnej mapy. Niezbędne będzie ruszanie robotem i przejazd po "świecie".
W osobnym terminalu uruchamiamy węzeł do teleoperacji przy użyciu klawiatury:
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboard
Następnie, korzystając z klawiszy w
, a
, s
, d
oraz x
należy sterować robotem tak, aby została zbudowana mapa całego "świata".
Utworzoną mapę możemy zapisać poleceniem:
cd /arm_ws
mkdir maps
ros2 run nav2_map_server map_saver_cli -f /arm_ws/maps/turtlebot3_world_map
Po zapisaniu mapy można wyłączyć symulację.
5. Uruchomienie AMCL
Podobnie jak w poprzednim przypadku, pracę należy rozpocząć od uruchomienia symulacji:
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
Następnie możliwe jest uruchomienie węzła navigation2
. Konieczne jest przekazanie informacji o wykorzystywaniu czasu z symulacji oraz lokalizacji pliku z zapisaną wcześniej mapą. W nowym terminalu:
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=/arm_ws/maps/turtlebot3_world_map.yaml
Po uruchomieniu robot nie jest zlokalizowany w mapie. Konieczne jest podanie początkowej estymacji jego pozycji.
- Kliknij
2D Pose Estimate
w oknie rviz2. - Kliknij w miejsce na mapie, jak najlepiej oceniając gdzie znajduje się robot i przeciągnij w kierunku jego przodu.
- Powtarzaj kroki 1 i 2 aż do satysfakcjonującego efektu.
Autonomiczna nawigacja
Zadanie autonomicznej nawigacji można uruchomić klikając przycisk Navigation Goal
w menu rviz2. Strzałkę, podobnie jak w przypadku 2D Pose Estimate
, należy ustawić zgodnie z żądaną końcową pozycją robota.
6. Zadanie do samodzielnej realizacji
W ramach pracy samodzielnej należy:
- Przeprowadzić procedury z punktów 4 i 5 dla innego świata symulacji - "turtlebot3_house"
- W paczce
turtlebot3_navigation2
, w folderzeparam
znajduje się plikburger.yaml
. Proszę opisać jak modyfikacja poniższych parametrów wpływa na działanie modułu nawigacji AMCL:beam_skip_distance
przydo_beamskip
ustawionym naTrue
\laser_max_range
ilaser_min_range
max_beams
max_particles
resample_interval
update_min_a
iupdate_min_d
Na eKursy proszę udostępnić:
- zapisaną mapę (przekonwertowaną do png lub zrzut ekranu)
- odpowiedź na punkt 2 w formie tekstu na eKursach lub pliku .txt.
Autor: Kamil Młodzikowski
Na podstawie: Turtlebot3 Simulation docs.