Lab 10 - Lokalizacja topologiczna
Lab. 10 - Lokalizacja topologiczna
1. Lokalizacja topologiczna
Lokalizacja topologiczna to metoda określania pozycji robota w jego środowisku na podstawie rozpoznawania cech charakterystycznych czy punktów odniesienia, a nie precyzyjnych pomiarach.
W tym sposobie lokalizacji robot tworzy mapę środowiska, która przedstawia relacje między różnymi kluczowymi punktami w przestrzeni. Te punkty mogą obejmować wyraźne cechy, takie jak przejścia, krawędzi czy konkretne obiekty. Następnie robot nawiguje rozpoznając te miejsca, pozwalając lokalizować się w znanej mapie topologicznej.
Jedną z kluczowych cech lokalizacji topologicznej jest zmniejszona wrażliwość na wszelkiego rodzaju błędy pomiarowe. Ponieważ opiera się o wyróżniające cechy a nie dokładne pomiary, może okazać się bardziej odporna na zmiany w środowisku.
Mapy topologiczne są często reprezentowane jako grafy, gdzie węzły reprezentują kluczowe lokalizacje. Mogą to być osobne pomieszczenia, lub punkty w jednym pomieszczeniu.
2. Cel zajęć
Celem zajęć jest poznanie podstaw lokalizacji topologicznej na przykładzie RTAB-Map (Real-Time Appearance-Based Mapping).
3. Przygotowanie środowiska
Wersja 1: Obraz (większy rozmiar)
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/MFJrUyUtD9ZcgB0/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_10. UWAGA! Skrypty po uruchomieniu usuwają kontener o takiej nazwie przed utworzeniem nowego.
W wersji z przygotowanym obrazem konieczne jest doinstalowanie:
apt install ros-humble-imu-complementary-filter
Wersja 2: Dockerfile
Plik Dockerfile jest dostępny tutaj. Można go pobrać poleceniem:
wget https://raw.githubusercontent.com/kamilmlodzikowski/LabARM/main/Lab10-LokalizacjaTopologiczna/Dockerfile
Skrypt budujący jest dostępny tutaj. Można go pobrać poleceniem:
wget https://raw.githubusercontent.com/kamilmlodzikowski/LabARM/main/Lab10-LokalizacjaTopologiczna/arm_10_build.sh
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_10. 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_10 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
Pobranie baga
Domyślnie bag powinien znajdować się pod ścieżką /arm_ws/bags
, ale w razie czego można go pobrać:
cd /arm_ws/bags
wget http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_03_medium/MH_03_medium.bag
rosbags-convert MH_03_medium.bag
4. Uruchomienie rtabmap
W tej instrukcji będziemy wykorzystywać paczkę rtabmap_ros. Używanym przykładem będzie sekwencja ze zbioru The EuRoC MAV Dataset. RTAB_Map jest systemem SLAM opartym o grafy, który może pracować z danymi RGB-D, stereo, skanami 2D oraz Lidarem.
Uruchomić system można następującym poleceniami:
ros2 bag play -p bags/MH_03_medium
---
ros2 launch rtabmap_examples euroc_datasets.launch.py
---
cd /arm_ws
rviz2 -d rtabmap.rviz
Powinno pojawić się okno rviz2, w którym będzie wizualizowany przebieg lokalizacji i budowy mapy, a także okno RTAB_Map. Po odpauzowaniu baga, zaczyna się budowanie mapy. W RTAB_Map z lewej strony są widoczne 3 obrazy (Pyt.1 Czym one są?) a po prawej jest budowana mapa i zaznaczana ścieżka (Pyt. 2 Czym są kwadraty rysowane na tej ścieżce?).
W oknie rviz2 widoczne są rysowane niebieskie i czerwone linie (Pyt. 3 Czym one są?).
5. Podgląd utworzonej mapy
Po zakończeniu odtwarzania baga, możliwe jest przetworzenie, zapisanie i wizualizacja utworzonej mapy. W tym celu należy:
- Wcisnąć przycisk pauzy (w lewym górnym rogu)
- Pobrać wszystkie chmury (przycisk na lewo od pauzy) i wybrać opcję "Global map optimized"
- Z menu "Edit" wybrać "View point clouds..."
Proszę zapisać zrzut ekranu tak wyświetlonej mapy.
6. Zadanie do samodzielnej realizacji
Proszę odpowiedzieć na pytania zadane w tekście instrukcji oraz o zamieszczenie zrzutu ekranu wygenerowanej mapy.
Informacje dodatkowe
Autor: Kamil Młodzikowski