Lab 1 - Wprowadzenie do ROS - struktury danych

Metody i algorytmy planowania ruchu - laboratorium
Lab 1 - Wprowadzenie do Robot Operating System - struktury danych w planowaniu ruchu i wyświetlanie w RViz

1. Instalacja środowiska
Na zajęciach będziemy używali systemu Linux (Ubuntu 22.04) i Robot Operating System w wersji 2. Wspieraną wersją ROSa dla Ubuntu 22.04 jest Humble Hawksbill. Środowisko ROS2 trzeba zainstalować na swoim komputerze, a instrukcja instalacji znajduje się tutaj: https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
Po instalacji konieczna jest konfiguracja przestrzeni roboczej (workspace):
https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Configuring-ROS2-Environment.html
2. Wprowadzenie
ROS jest meta-systemem operacyjnym dla robotów o otwartych źródłach. Podobnie jak w systemie operacyjnym dostarczane są np. narzędzia pozwalające na komunikację ze sprzętem i sterowanie niskopoziomowe, komunikację pomiędzy procesami (węzłami) oraz zarządzanie pakietami.
Więcej informacji oraz tutoriale można znaleźć na stronie: https://docs.ros.org/en/humble/Tutorials.html
⚠️ Na komputerach w laboratorium przestrzeń robocza (katalog
~/ros2_ws) może być czyszczony przy starcie systemu. Jeżeli zamierzasz zrestartować komputer, zrób kopię zapasową swoich danych z tego katalogu.⚠️ Dane na komputerze przechowuj w katalogu
~/Documents.⚠️ Komputery w laboratorium są używane do wielu zajęć i prac dyplomowych. W przypadku uszkodzenia przywracana jest wersja z kopii zapasowej. Wszystkie dane są wtedy usuwane.
Podczas zajęć zamierzamy używać wielu terminali do uruchamiania poleceń ROSa. Ponieważ przełączanie pomiędzy oknami nie jest efektywne, rekomendujemy trzy inne podejścia:
Podział okna terminala na mniejsze okna - najpopularniejszymi programami, które to umożliwiają są:
Terminator (zalecane rozwiązanie)
Uruchamianie poleceń w zakładkach. Do terminala można dodać nową zakładkę za pomocą polecenia:
Ctrl+Shift+T. Aby przełączać się pomiędzy zakładkami użyjAlt+numer_zakładki, np.Alt+1.
3. Uruchomienie Robot Operating System
W ROS2 nie ma potrzeby uruchamiania centralnego modułu w stylu roscore (ROS Master). Wystarczy skonfigurować środowisko ROS za pomocą polecenia:
source /opt/ros/humble/setup.bashaby móc korzystać z globalnie zainstalowanych paczek/modułów.
Chcąc pracować w lokalnym środowisku (workspace), wystarczy przejść do odpowiedniej przestrzeni roboczej ROS:
cd ~/ros2_wsi (jeśli workspace był już zbudowany) skonfigurować środowisko poleceniem:
source install/setup.bash⚠️ Pamiętaj, aby w każdym nowym terminalu zanim rozpoczniesz pracę skonfigurować środowisko ROS komendą
source /opt/ros/humble/setup.bashlubsource install/setup.bash
Należy to robić w każdym nowy terminalu lub zakładce. W kolejnym terminalu uruchom poniższe polecenie, aby sprawdzić czy ROS działa poprawnie:
ros2 topic listPowinna pojawić się lista aktywnych topików.
4. Przykładowe struktury danych w planowaniu ruchu
4.1 Mapy zajętości
Zainstaluj paczkę ros-humble-nav2-map-server:
sudo apt-get install ros-humble-nav2-map-server ros-humble-nav2-bringup python3-vcstoolNastępnie pobierz repozytorium, które zawiera przykładowe mapy:
cd ~/ros2_ws/src
git clone --branch humble https://github.com/dominikbelter/example_mapsSkompiluj wszystkie paczki znajdujące się w przestrzeni roboczej:
cd ~/ros2_ws/
colcon build --symlink-installJeżeli kompilacja zakończyła się sukcesem, można uruchomić serwer, który udostępnia mapę zajętości:
ros2 run nav2_map_server map_server --ros-args --params-file src/example_maps/param/map_server_params.yamlW osobnym terminalu:
ros2 lifecycle set /map_server configure
ros2 lifecycle set /map_server activate⚠️ Jeśli pojawia się błąd dot. pliku YAML, należy otworzyć plik
src/example_maps/param/map_server_params.yamlw edytorze tekstu i sprawdzić, czy parametr (ścieżka)yaml_filenamejest odpowiednio ustawiony (trzeba dopasować nazwę użytkownika w ścieżce).
Server map_server wczytuje mapę zdefiniowaną w pliku
src/example_maps/maps/map_home.yaml i udostępnia ją w
topiku o nazwie /map. Mapę można wyświetlić w terminalu za
pomocą polecenia:
ros2 topic echo /mapKolejne liczby w mapie określają komórki zajęte (100), wolne (0) i nieznane (-1). Mapę można również wyświetlić w programie przeznaczonym do wizualizacji RViz:
ros2 run rviz2 rviz2Wizualizację można dodać za pomocą przycisku “Add” znajdującym się w lewym dolnym rogu ekranu:

Pojawi się okno pokazane poniżej, w którym trzeba wybrać odpowiedni topik:

Po wybraniu odpowiedniego topika należy zmienić domyślne ustawienia Reliability Policy i Durablility Policy w zakładce Map / Topic na następujące:

a mapa pojawi się w oknie RViz:
![]()
Możliwe jest przybliżanie i obracanie mapy za pomocą klawiszy myszy.
4.2 Mapy kosztów
Wczytaną wcześniej mapę wykorzystamy do uzyskania mapy kosztów. Każda
komórka w mapie kosztów będzie reprezentowała koszt przebywania robota w
danym miejscu. Oczywiście będzie on najwyższy dla przeszkód. Do
konwersji mapy zajętości na mapę kosztów wykorzystamy gotowy węzeł
nav2_costmap_2d. Węzeł ten służy do obliczania mapy kosztów
na mapach 2D.
Na początku należy uruchomić moduł wczytujący mapę z dysku:
ros2 run nav2_map_server map_server --ros-args --params-file src/example_maps/param/map_server_params.yamli go skonfigurować:
ros2 lifecycle set /map_server configureModuł do obliczenia mapy kosztu uruchamiamy poleceniem:
ros2 run nav2_costmap_2d nav2_costmap_2dKonieczne jest również publikowanie przekształcenia pomiędzy robotem (base_link) i mapą (map):
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 map base_linkKonieczna jest również konfiguracja modułu:
ros2 lifecycle set /costmap/costmap configurePojawi się topik reprezentujący globalną mapę kosztów (/costmap/costmap).
🔨 Zadanie 4.2.1
Wyświetlić globalną mapę kosztów w RViz. Po ustawieniu topików w Rviz, pamiętaj o aktywowaniu modułu poleceniem:
ros2 lifecycle set /costmap/costmap activatePóźniej aktywuj moduł map_server:
ros2 lifecycle set /map_server activateOczekiwany efekt wygląda następująco:
![]()
🔨 Zadanie 4.2.2
Zmodyfikować sposób wyświetlania mapy kosztów (parametr “Color Scheme”). Oczekiwany efekt wygląda następująco:
![]()
🔨 Zadanie 4.2.3
Korzystając z komend
w terminalu odczytaj bieżące wartości dwóch parametrów w węźle
/costmap/costmap:
inflation_layer.cost_scaling_factorinflation_layer.inflation_radius.
Zmień wartości tych parametrów w trakcie działania węzła i zaobserwuj efekt w Rvizie.
5. Uruchomienie budowy mapy z wykorzystaniem biblioteki Octomap
System budowy mapy z wykorzystaniem modułu Octomap opisany jest na stronie: https://octomap.github.io/
W mapie typu Octomap przestrzeń podzielona jest na komórki 3D (woksele). Każdy z nich zawiera informację o prawdopodobieństwie zajętości. Aby uruchomić bibliotekę Octomap, należy ją wcześniej zainstalować z repozytorium:
sudo apt-get install ros-humble-octomap ros-humble-octomap-server python3-vcstoolPotrzebny nam będzie również model robota Turtlebot:
sudo apt-get install ros-humble-turtlebot3*Następnie pobierzemy repozytorium zawierające skrypty uruchomieniowe oraz przykładowe mapy:
cd ~/ros2_ws/src
git clone --branch humble https://github.com/dominikbelter/example_maps
git clone https://github.com/iKrishneel/octomap_server2.git
cd octomap_server2 && vcs import . < deps.reposSkompiluj wszystkie paczki znajdujące się w przestrzeni roboczej:
cd ~/ros2_ws/
colcon build --symlink-install⚠️ W przypadku błędu w kompilacji:
fatal error: message_filters/message_event.hpp: No such file or directory 44 | #include <message_filters/message_event.hpp>należy przejść do katalogu
/home/student/ros2_ws/src/perception_pcli cofnąć się do jednego z wcześniejszych commitów:git checkout -b new_branch 44d02743e451296d6bc871b101cea33c59adc1d6
Jeżeli kompilacja zakończyła się sukcesem, należy zmodyfikować model robota Turtlebot3, tak aby korzystał z kamery głębi. W tym celu otworzyć plik:
sudo gedit /opt/ros/humble/share/turtlebot3_gazebo/models/turtlebot3_waffle/model.sdfI dokonać zmian w liniach:
line 369: <sensor name="camera" type="depth">
line 400: <frame_name>camera_rgb_optical_frame</frame_name>
Teraz można uruchomić symulację robota Turtlebot3 wraz z systemem do
budowy mapy (wszystkie uruchamiane moduły oraz ich parametry znajdują
się w pliku
~/ros2_ws/src/example_maps/launch/turtlesim3_waffle_octomap.launch.py):
source install/setup.bash
export TURTLEBOT3_MODEL=waffle
ros2 launch example_maps turtlesim3_waffle_octomap.launch.pyDo sterowania robotem wykorzystamy moduł
turtlebot3_teleop (w osobnym terminalu):
cd ~/ros2_ws
source install/setup.bash
export TURTLEBOT3_MODEL=waffle
ros2 run turtlebot3_teleop teleop_keyboardSterowanie robotem odbywa się za pomocą klawiszy ‘a’, ‘s’, ‘d’, ‘w’, ‘x’. Podczas poruszania się robota powstaje mapa 3D Octomap.
Oczekiwany wynik jest następujący:
![]()
🔨 Zadanie 5.1
Zmodyfikuj plik launch uruchamiający symulację
(~/ros2_ws/src/example_maps/launch/turtlesim3_waffle_octomap.launch.py),
tak żeby wielkość komórki wynosiła 10 cm.
Oczekiwany wynik:
![]()