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:
  1. Transformacje układów współrzędnych.
  2. Struktura mapy reprezentowanej jako siatka zajętości, w tym formy reprezentacji zajętości pól (prawdopodobieństwo, reprezentacja logarytmiczna, trafienia/odczyty)
  3. Algorytm aktualizacji mapy, w tym przeanalizować model odwrotny czujnika dla skanera laserowego.

Część 1 – generowanie mapy przy stałej pozycji skanera

  1. 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).
  2. 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.

  3. 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

  1. 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().

  2. 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.

  3. 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

  1. 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).

  2. 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ć:
  1. Krótki opis użytego sposobu reprezentacji mapy i algorytmu jej budowy.
  2. Przykładowe wyniki (w tym dla dostarczonego pliku map_round.json).
  3. 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()