Lab 10 - Lokalizacja topologiczna

Lab. 10 - Lokalizacja topologiczna

Mapa utworzona RTAB_Map

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.

Przewaga robotów sprzątających wykorzystujących SLAM.
Mapa zajętości (po lewej) oraz odpowiadająca jej mapa topologiczna (po prawej). źródło

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:

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