Algorytmy robotyki mobilnej – budowanie mapy
Wprowadzenie
Celem zadania jest poznanie aspektów praktycznych budowania
mapy otoczenia przez robota mobilnego na przykładzie
mapy w formie siatki zajętości.
Przygotowanie
Przed zajęciami należy zapoznać się z opisem zadania oraz
materiałami pomocniczymi w podanym niżej zakresie:
-
Transformacje układów współrzędnych.
-
Struktura mapy reprezentowanej jako siatka zajętości,
w tym formy reprezentacji zajętości pól
(prawdopodobieństwo, reprezentacja logarytmiczna,
trafienia/odczyty)
-
Algorytm aktualizacji mapy, w tym przeanalizować model
odwrotny czujnika dla skanera laserowego.
Część 1 – generowanie mapy przy stałej pozycji skanera
-
Zdefiniować mapę dwuwymiarową z polami reprezentującymi
obszary o kształcie kwadratu o określonym rozmiarze
(program powinien dawać możliwość łatwej zmiany
rozmiaru reprezentowanego obszaru).
-
Przy nieruchomym robocie wyznaczyć prawdopodobieństwo
zajętości obszaru.
Uwaga: Wiązkę skanera uznać za linię prostą (o zerowej
szerokości), a w podstawowej implementacji
uwzględniać tylko zwiększanie prawdopodobieństwa
zajętości w punkcie, w którym została wykryta
przeszkoda.
-
Zweryfikować zmianę oszacowania prawdopodobieństwa
przy kolejnych pomiarach w tej samej konfiguracji
(także w przypadku ruchomego obiektu w zasięgu czujnika).
Część 2 – generowanie mapy dla ruchomego czujnika
-
Uwzględnić w algorytmie informację o położeniu i orientacji
robota z funkcji ReadPose().
Uwaga: Uwzględnić fakt, że skaner jest umieszczony przed
środkiem robota, którego pozycję zwraca ReadPose().
-
Zweryfikować poprawność generowanej mapy przy podstawowych
ruchach robota: przesunięciu przód-tył i obrocie w miejscu.
Uwaga: Weryfikację wykonać dla pomiarów przy zatrzymanym
robocie.
-
Uruchomić generowanie mapy podczas jazdy robota.
Ocenić otrzymane wyniki (w szczególności zwrócić
uwagę na działanie algorytmu podczas obrotów robota).
Uwaga: Zadawanie ruchu robota może się odbywać
z niezależnie uruchomionego programu.
Zadania opcjonalne
-
Uwzględnić zmniejszanie prawdopodobieństwa
w przypadku swobodnego przejścia wiązki skanującej
przez dany obszar.
Sprawdzić działanie dla ruchomego obiektu
(np. osoby przechodzącej przed robotem).
Uwaga: Zwrócić uwagę na dwa możliwe podejścia, dające
różne rezultaty: analizowanie każdej wiązki oddzielnie
(łatwiejsze),
lub wstępne wykonanie mapy dla pojedynczego skanu
i połączenie tej informacji z dotychczasową mapą
(trudniejsze, lecz bardziej odporne).
-
Zamiast skanera laserowego do budowy mapy wykorzystać
sonary (z najprostszym modelem sensora uwzględniającym
odległość od przeszkody i szerokość wiązki).
Porównać mapy z obu czujników.
Uwaga: Jest to zadanie czasochłonne, w szczególności
wymaga uwzględnienia pola widzenia czujnika.
Sprawozdanie
Sprawozdanie w formacie PDF należy przesłać pocztą elektroniczną
przed terminem rozpoczęcia kolejnego zadania laboratoryjnego.
Sprawozdanie powinno zawierać:
- Krótki opis użytego sposobu reprezentacji mapy i algorytmu
jej budowy.
- Przykładowe wyniki (w tym dla dostarczonego pliku map_round.json).
- Podsumowanie z obserwacjami i wnioskami.
Przykłady gotowych map
Map laboratorium L1.5 dla różnych rozdzielczości (autrzy: Beata Berajter, Ada Weiss, Małgorzata Witka-Jeżewska)
Przykładowy kod
Wyświetlenie tablicy dwuwymiarowej jako mapy
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
f = np.array([[1,2,3], [4,5,6], [7,8,9]]);
plt.imshow(f, interpolation="nearest",cmap='Blues')
plt.colorbar()
plt.show()