Skocz do zawartości

Lokalizacja na podstawie dalmierza laserowego i mapy


Kabotyn

Pomocna odpowiedź

Witajcie,
mój pierwszy post na forum 🙂

Tworzę nowy temat, bo nie znalazłem nic co by przypominało mój problem (źle szukam?).

Mam nadzieje, że mój problem okaże się na tyle ciekawy, że wywoła to dyskusję i "burzę mózgów" 😉

Do rzeczy.

Mam dalmierz laserowy (UTM-30LX), z którego otrzymuję dane w postaci punktów (współrzędne, kąt).

Mam też mapę pomieszczenia (też w postaci współrzędnych).

Teraz opis problemu. W pomieszczeniu, którego mapę mam (np. długi korytarz), umieszczam dalmierz laserowy, skanuje dowolny fragment pomieszczenia.

Jak najprościej na podstawie powyższych danych:

1) zlokalizować miejsce, z którego dokonano pomiaru (lokalizacja czujnika względem pomieszczenia)?

2) Pokazać pokazać drobne różnice (np. dostawiony śmietnik, albo zabrana szafa)?

Punkt drugi jest oczywiście przy założeniu, że różnice są na tyle małe, że nadal można zlokalizować miejsce pomiaru.

Na porównanie dwóch odczytów z dalmierza mam pewien pomysł. Promienie lasera rozchodzą się promieniowo, więc nie mogę porównać całego odczytu z mapą bo będą inne (w odczycie tracę narożniki, które są w mapie). Wymyśliłem aby wyodrębnić krawędzie ciągłe, tzn jeżeli odległość punku k+1 nie jest większa niż ileś niż odległość punktu k to zakładam, że jest to jedna krawędź (ściana, cokolwiek). Wtedy takie krawędzie mogę porównywać z mapą.

Do porównania, wymyśliłem sobie, aby zastosować algorytm Smitha–Watermana, który po drobnych zmianach względem pierwotnego założenia, może mi pokazać różnice w dwóch obrazach. Świadomy jestem, że mogą występować błędy w przypadku powtarzalnego kształtu pomieszczenia (np. długi prostokąt).

Co o tym sądzicie? Może jakieś inne pomysły? Śmiało.

Problemem jest dla mnie lokalizacja czujnika na mapie. Mam pewne pomysły, ale są one jeszcze mgliste.

Może ktoś z Was miał podobny problem? Jakieś pomysły, hasła? Jakiekolwiek punkty zaczepienia będą dla mnie pomocne.

Pozdrawiam, Artur

Link do komentarza
Share on other sites

Programowałem kiedyś robota Pioneer 3-DX, pełnił podobną funkcję. Sęk w tym, że miałem do dyspozycji 18 sonarów (20cm÷5m) rozłożonych dookoła robota, salę o zróżnicowanej geometrii (stoły, krzesła, szafy, stojaki na przewody, walizki itd) i robot miewał spore problemy z samolokalizacją. Owszem, przy dłuższej jeździe w końcu ustalał swoje położenie, ale nieraz oznaczało to odwiedzenie praktycznie każdego charakterystycznego miejsca na mapie. Obawiam się, że z pojedynczym dalmierzem ten czas samolokalizacji znacznie się wydłuży... Natomiast w momencie, kiedy robot "zaskoczył" na ogół już się nie gubił. Używałem softu MobileEyes przez zdalny pulpit, moja rola ograniczyła się w zasadzie tylko do zaprogramowania wyznaczania ścieżki ruchu w przypadku pojawienia się przeszkody nieujętej na mapie, ale po co wyważać otwarte drzwi 😉

Link do komentarza
Share on other sites

Nawyk, no to tu zamiast 18 sonarów masz ich ponad 1000 🙂

Kabotyn, napisz jak wygląda pokrycie powierzchni pomieszczenia 30-metrowym zakresem pracy tego UTMa. Jeżeli zawsze widzisz całość pokoju, to sprawa chyba trochę się upraszcza. Jeżeli w pomieszczeniu mogą znaleźć się przedmioty nie stojące pod ścianami, w pierwszej kolejności spróbowałbym się ich z obrazu pozbyć przejeżdżając kawałek i nakładając kilka skanów na siebie. Wtedy mógłbyś "zajrzeć" za takie przeszkody i oszacować rzeczywisty kształt ścian odrzucając echa przeszkód. Potem mając już taki obraz spróbowałbym metod korelacyjnych. Acha, rozumiem, że dalmierz oddaje dane w układzie biegunowym (kąt, odległość). Do takiego samego formatu przekonwertowałbym kartezjańską mapę pomieszczenia i potem już tylko na tej postaci pracował. Traktując taki dookólny (360st) skan wzorcowego pomieszczenia jak wektor liniowy, szukałbym w nim takiego wycinka (bo ten dalmierz ma mniejszy ogląd, chyba poniżej 270st) który najlepiej pasuje do obrazu ze skanera. Gdyby robot stał w tym samym miejscu, które było punktem zerowym mapy wzorcowej to super ale zwykle tak nie będzie. Wtedy skan będzie w stosunku do wzorca jakoś zniekształcony. Na płaszczyźnie to jest intuicyjnie łatwe bo to zwykłe przesunięcie równoległe kszatłtów 2D ale we współprzędnych biegunowych to będzie jakiś rodzaj sinusoidy nałożonej na skan a jej amplituda i faza będą mówiły o Twojej pozycji. Zawartość tej sinusoiudy możnaby badać robiąc np FFT na wynikach korelacji (tych które są rokujące oczywiście) i badając np. stosunek energii wybranego prążka do reszty. Pozycja miejsca w którym wycinek ze skanera najlepiej pasował do mapy będzie oczywiście kątem obrotu robota w osi pionowej. O właśnie, może tutaj pomógłby magnetometr (kompas)? Miałbyś jeden stopień swobody mniej i przynajmniej wiedziałbyś gdzie na mapie (biegunowej) szukać. No nie wiem, to takie pierwsze co mi do głowy przyszło...

Link do komentarza
Share on other sites

marek1707, ale po kiego męczyć się we współrzędnych biegunowych, skoro konwersja do kartezjańskich jest banalna, a otrzymane dane są wtedy znacznie bardziej przyjazne choćby do wyświetlenia na ekranie?

Kabotyn, w jakim formacie masz tą mapę? Czy jest to zbiór punktów zebranych wcześniej skanerem?

Ogólnie polecam pogooglać następujące hasła: scan matching (w szczególności metodę PLICP), SLAM (simultaneous localization and mapping), Monte Carlo localization. Wyszukuj sobie artykuły z konferencji naukowych, na powyższe tematy, zazwyczaj na początku jest przedstawiany aktualny stan wiedzy, czyli krótki opis innych dostępnych metod. To dobry punkt wyjścia do dalszych poszukiwań.

Generalnie nie widzę sensu wymyślać tutaj nic nowego, bo lokalizowanie robota w znanym pomieszczeniu w oparciu o dane ze skanera to temat bardzo dobrze opisany, z dużą ilością gotowych algorytmów.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

W porównaniu z resztą obliczeń transformacja danych z dalmierza na XY rzeczywiście jest banalna, choć trzeba ją wykonywać na każdym skanie. A zrobienie mapy biegunowej wystarczy zrobić raz i to a priori. Dlatego wydała mi się naturalną praca w układzie biegunowym. Procesorowi jest wszystko jedno jakie liczby miele a gdy już zajdzie konieczność wyświetlenia czegoś, proces to nadzorujący może sobie spokojnie robić konwersję na układ prostokątny. Wynikiem tego wszystkiego ma być tylko para liczb (plus ewentualnie orientacja w osi pionowej) i na razie nie widzę dużej przewagi układu XY nad biegunowym.

Miała być "burza muzguf" więc napisałem jak sobie to wyobrażam z pierwszego strzału. Oczywiście należy podeprzeć się rozwiązaniami już istniejącymi choć dopracowanie się własnego algorytmu mogłoby być ciekawe 🙂 To zależy od charakteru tego projektu.

Link do komentarza
Share on other sites

Dzięki za wszystkie pomysły, "obczajam" temat 🙂

jakim formacie masz tą mapę? Czy jest to zbiór punktów zebranych wcześniej skanerem?

To jest właściwie mój wybór. Najłatwiej zrobić pomiary i je ręcznie poskładać, a co dalej z tym będzie trzeba zrobić na razie nie wiem. W mojej głowie tworzy się pomysł aby zostać przy punktach.

W temacie jak widać jestem świeży ale się staram 😉

Ze wstępnego przeglądania różnych materiałów na podsunięte przez Was tematy naszła mnie jedna wątpliwość.

Czy liczba punktów z której będzie zrobiona mapa (fragmenty mapy) ma znaczenie? Chodzi mi tutaj o różnice w liczbie punktów z lasera względem mapy (np. laser "pokaże" jedną ścianę w liczbie 200 punktów, a na mapie ściana będzie dokładniejsza i odwzorowana w liczbie 400 punktów).

Czy to jest problem czy po prostu zaczynam wydziwiać i "zmyślać"? 🙂

Link do komentarza
Share on other sites

Generalnie porównywanie punkt do punktu jest mało efektywne. Lepiej jest wyodrębniać ze skanów linie proste, czy narożniki i porównywać cecha do cechy. Można też stworzyć mapę rastrową - dzielisz sobie mapę na komórki, powiedzmy 1x1cm. Komórki zajęte mają wartość 1, puste 0. Można dodać wartości pośrednie, tak aby uwzględnić błędy pomiarowe - wtedy jeden błędny pomiar nie spowoduje od razu, że robot wykryje gdzieś przeszkodę, a jedynie zasygnalizuje, że istnieje prawdopodobieństwo, że coś tam się czai.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.