Planowanie scie˙zki – metoda potencjałowa
Transkrypt
Planowanie scie˙zki – metoda potencjałowa
Planowanie ścieżki – metoda potencjałowa 1 Cel zadania Nabycie umiej˛etności korzystania z szablonów std::vector<> i std::list<>. 2 Opis zadania Należy napisać program, który umożliwi przemieszczenie punktowego robota z pozycji startowej do pozycji docelowej. Ścieżka, wzdłuż której ma przemieszczać si˛e robot, ma umożliwić mu omini˛ecie przeszkód. Zakłada si˛e, że przeszkody reprezentowane sa˛ przez koła, które moga˛ mieć różne promienie. Program powinien umożliwić zmian˛e rozmieszczenia przeszkód, ich ilość oraz wielkość. Powinien również pozwalać na zmian˛e współrz˛ednych punktu docelowego oraz punktu startowego, jak też parametrów zastosowanego algorytmu. Pełna lista elementów, które powinny podlegać zmiane znajduje si˛e w przykładzie działania programu (patrz rozdz. 4). 3 Metoda rozwiazania ˛ Do rozwiazania ˛ problemu należy zastosować podejście potencjałowe. Bazuje ono na analogii zachowania si˛e ładunków elektrycznych. Rozważajac ˛ tylko oddziaływania elektrostatyczne można przyjać, ˛ że przeszkody maja˛ ten sam ładunek jaki ma przemieszczajacy ˛ si˛e obiekt punktowy (robot). Natomiast punkt docelowy ma ładunek przeciwny. Dobierajac ˛ odpowiednio wielkość ładunków punkt docelowy w naturalny sposób b˛edzie przyciagał ˛ robota, zaś przeszkody b˛eda˛ go odpychały. Wykorzystuja˛ opisana˛ ide˛e, zadanie sterowania ruchem robota należy rozwiazać ˛ iteracyjnie. Przyjmujemy, że robot w każdym kroku iteracji przemieszcza si˛e o stała odległość dR . Przyjmujemy również jako warunek zakończenia działania algorytmu pewna˛ odległość do celu dε . Jeżeli odległość robota od celu b˛edzie poniżej dε , to uważamy zadanie za rozwiazane. ˛ Rysunek 1: Idea sterowania ruchem robota w oparciu o model pól elektrostatycznych. Najdogodniej jest przyjać, ˛ że dε = 0.55dR . Rozwiazanie ˛ sterowanie ruchem robota można wykonać w kilku podstawowych krokach: 1. Sprawdź czy odległość robota od celu jest mniejsza niż dε . Jeżeli tak, to cel został osia˛ gni˛ety i zakończ działanie. W przypadku przeciwnym przejdź do nast˛epnego kroku. 2. Wyznacz kierunek siły działajacej ˛ na robota. 3. Przesuń robota wzdłuż wyznaczonego kierunku o dR . 4. Przejdź do punktu 1. Opisana metoda nie gwarantuje znalezienia rozwiazania ˛ dla każdej konfiguracji przeszkód. Spowodowane jest to wyst˛epowaniem lokalnych minimów potencjału. Dlatego też, aby nie doprowadzić do zap˛etlenie programu w opisanej powyżej procedurze należy wprowadzić dodatkowy warunek stopu. B˛edzie nim ilość wykonanych kroków. 4 Przykład działania programu jkowalsk@noxon: zad>./sterow_robotem Menu glowne: s - start algorytmu p - przywroc pozycje wyjsciowa z - zmiana wspolrzednych startu c - zmiana wspolrzednych celu u - usun przeszkode w - wstaw nowa przeszkode e - edytuj przeszkode d - zmiana dlugosci pojedynczego przemieszczenia i - zmiana jednorazowej ilosci krokow l - zmiana ladunku celu a - wyswietl aktualny stan sceny i robota ? - wyswietlenie menu k - wyjscie z programu (Wyswietl menu: ?) > a Aktualny stan: Dlugosc pojedynczego przemieszczenia: 2 Jednorazowa ilosc krokow: 10 Ilosc wykonanych krokow: 0 Start: (20.0, 10.0) ====> Robot: (20.0, 10.0) Cel: (70.0, 70.0) Ladunek celu: -100.0 Polozenie przeszkod: 1: (10.0, 2: (30.0, 3: (14.0, 4: (25.0, 20.0) 40.0) 25.0) 30.0) Rozmiar: Rozmiar: Rozmiar: Rozmiar: 3 6 2 3 (Wyswietl menu: ?) > s Laczna ilosc krokow: 10 Aktualna pozycja robota: (38.6, 6.7) :-\ Cel nie jest jeszcze osiagniety. (Wyswietl menu: ?) > s Laczna ilosc krokow: 20 Aktualna pozycja robota: (54.1, 19.0) :-\ Cel nie jest jeszcze osiagniety. (Wyswietl menu: ?) > a Aktualny stan: Dlugosc pojedynczego przemieszczenia: 2.0 Jednorazowa ilosc krokow: 10 Ilosc wykonanych krokow: 20 Start: (20.0, 10.0) ====> Robot: (54.1, 19.0) Cel: (70.0, 70.0) Ladunek celu: -100.0 Polozenie przeszkod: 1: (10.0, 2: (30.0, 3: (14.0, 4: (25.0, (Wyswietl menu: ?) >_ 20.0) 40.0) 25.0) 30.0) Rozmiar: Rozmiar: Rozmiar: Rozmiar: 3 6 2 3 Rysunek 2: Zrzut okienka obrazujacej ˛ aktualny stan sceny. 5 Materiały pomocnicze Dodatkowe pomocnicze elementy ułatwiajace ˛ rozpocz˛ecie realizacj˛e zadania znaleźć można na serwerze diablo lub panamint w katalogu ˜bk/edu/po/zad/z6. W katalogu tym znajduja˛ si˛e nast˛epujace ˛ podkatalogi i pliki: ˜bk/edu/po/zad/z6/. bin.diablo/sterow_robotem bin.panamint/sterow_robotem przyklad1/Makefile przyklad1/src/start.cpp przyklad1/src/lacze_do_gnuplota.cpp przyklad1/inc/lacze_do_gnuplota.hh przyklad2/Makefile przyklad2/src/start.cpp przyklad2/src/lacze_do_gnuplota.cpp przyklad2/inc/lacze_do_gnuplota.hh bin.diablo/sterow_robotem, bin.panamint/sterow_robotem Sa˛ to programy binarne. Stanowia˛ one przykład realizacji programu, w wersji podstawowej, który został skompilowany odpowiednio na serwerze diablo i na serwerze panamint. przyklad1 Katalog zawiera przykład użycia modułu lacze_do_gnuplota pozwalajacego ˛ uruchomić program gnuplot z poziomu własnego programu i nawiazać ˛ z nim komunikacj˛e. W przykładzie pokazane jest rysowanie z wykorzystaniem grafiki 2D. przyklad2 Katalog zawiera rozszerzenie przykładu znajdujacego ˛ si˛e w podkatalogu przyklad1. W rozszerzeniu tym zostało pokazane użycie szablonu listy std::list<>. 5.1 Sposób wykorzystania przykładów Zastosowana w dostarczonych przykładach technika wykorzystania programu gnuplot do wyświetlenia stanu sceny polega na przygotowaniu w plikach odpowiednich danych, a nast˛ep- nie wymuszeniu wyświetlenia ich przez program gnuplot. We wspomnianych przykładach plikami tymi sa: ˛ dat/robot.xyr, dat/start.xyr, dat/cel.xyr, dat/przeszkody.xyr, dat/sciezka.xy. Wszystkie pliki maja˛ postać tekstowa.˛ W plikach z rozszerzeniem xyr w pojedynczej linii zapisywane sa˛ współrz˛edne punktu x i y oraz rozmiar kółka, którym oznaczany jest dany punkt. Przykładowa zawartość pliku dat/robot.xyr to: 20.7 10.5 5 Uwaga: rozmiar zawsze musi być liczba˛ całkowita˛ wi˛eksza˛ niż 0. Zaleca si˛e, aby nie był wi˛ekszy niż 20. W plikach dat/robot.xyr, dat/start.xyr, dat/cel.xyr znajduja˛ si˛e współrz˛edne i rozmiar tylko pojedynczego punktu. W pliku dat/przeszkody.xyr liczba punktów odpowiada ilości przeszkód, które sa˛ symbolizowane przez te punkty. Nieco odmienna˛ budow˛e ma plik dat/sciezka.xy. znajduja˛ si˛e w nim tylko i wyłacznie ˛ współrz˛edne kolejnych punktów ścieżki robota. Na tej podstawie rysowana jest łamana odzwierciedlajaca ˛ kształt ścieżki. Przekazaniem danych z pliku do programu gnuplot (tak jest w przypadku plików z rozszerzeniem xyr) lub też wskazaniem mu z jakich plików maja˛ być bezpośrednio pobierane dane (tak jest w przypadku plików z rozszerzeniem xy) zajmuje si˛e obiekt klasy PzG::LaczeDoGNUPlota (w dostarczonych przykładach wyst˛epuje on pod nazwa˛ Lacze). Programista musi jedynie podać nazwy plików, z których b˛eda˛ pobierane dane. Można to zrobić za pomoca˛ odpowiednich metod z klasy PzG::LaczeDoGNUPlota: • dla plików *.xyr jest to metoda DodajNazwePliku_PunktyRoznejWielkosci, • dla plików *.xy jest to metoda DodajNazwePliku_Lamana. Ogólny schemat działania programu, który wymusi właściwe narysowanie aktualnego stanu sceny roboczej, powinien wygladać ˛ nast˛epujaco: ˛ 1. Wykonaj zadana˛ sekwencj˛e kroków i przemieść robota. Zapami˛etaj współrz˛edne kolejnych punktów, do których dotarł robot. 2. Zapisz do pliku dat/robot.xyr aktualna˛ pozycj˛e robota i jego rozmiar. Do pliku dat/sciezka.xy zapisz punkty, do których dotarł robot w poszczególnych krokach. 3. Wywołaj metod˛e Rysuj() obiektu stanowiacego ˛ łacze ˛ z programem gnuplot. Edycja położenia przeszkód, czy też punktu startu lub punktu docelowego wia˛że si˛e z odpowiednia˛ aktualizacja˛ zapisów odpowiednio w plikach dat/przeszkody.xyr, dat/start.xyr, dat/cel.xyr. Kasowanie ścieżki powinno być zrealizowane w ten sposób, że zapis w pliku dat/sciezka.xy redukowany jest do aktualnej pozycji robota. Uwaga: Przed wywołaniem metody Rysuj() wszystkie pliki, z których maja˛ być pobierane dane musza˛ istnieć i mieć prawidłowa˛ struktur˛e. 5.2 Dla użytkowników MS Windows – Uruchomienie rysowania w trybie interaktywnym Dołaczony ˛ moduł łacza ˛ do programu gnuplot umożliwia z nim współprac˛e tylko w systemie UNIX i systemach UNIXopodobnych (np. Linux). Pracujac ˛ pod kontrola˛ innych systemów operacyjnych (np. MS Windows) niestety nie można skorzystać z ułatwień, które dostarcza ten moduł. Można jednak uruchomić program gnuplot w trybie interaktywnym (program można pobrać ze strony http://www.gnuplot.info). Jest to bardziej ucia˛żliwe niemniej realizacja zadania jest wcia˛ż możliwa. Uruchamiamy go poleceniem gnuplot, a nast˛epnie wydajemy polecenie ustawiajace ˛ zakres współrz˛ednych, np.: gnuplot> set xrange [0:100] gnuplot> set yrange [0:80] Nast˛epnie można uruchomić rysowanie zawartości plików z danymi. Przykładowe polecenie prezentowane jest poniżej: gnuplot> plot ’dat/sciezka.xy’ w l, ’dat/robot.xyr’ w errorbars,\ ’dat/cel.xyr’ w errorbars, ’dat/start.xyr’ w errorbars,\ ’dat/przeszkody.xyr’ w errorbars Polecenie to trzeba b˛edzie powtarzać po każdorazowej zmianie zawartości plików. Jego efekt nie jest imponujacy. ˛ Niemniej pozwala zorientować si˛e w położeniu poszczególnych elementów na scenie. Przykład zrzutu okienka przedstawiony jest poniżej. Rysunek 3: Zrzut okienka obrazujacego ˛ aktualny stan sceny. Rysunek został utworzony z wykorzystaniem polecenia przedstawionego powyżej. 6 Rozszerzenie zadania – cz˛eść nieobowiazkowa ˛ W ramach wersji rozszerzonej należy zrealizować obraz sceny robota w postaci przestrzennego wykresu rozkładu potencjału. Wartości potencjału można wyliczyć modelujac ˛ przeszkody jako punkty, tak jak w wersji podstawowej. Jako dalsze rozrzerzenie proponuje si˛e rozważyć repezentacj˛e przeszkód w postaci wieloboków. Wszystkie niezb˛edne materiały, zarówno od strony teoretycznej jak też przykładów użycia łacza ˛ do programu gnuplot, można znaleźć w sekcji Dodatki .