Zad. 10: Sterowanie manipulatorem cz. 2 i 3
Transkrypt
Zad. 10: Sterowanie manipulatorem cz. 2 i 3
Zad. 10: Sterowanie manipulatorem cz. 2 i 3 1 Cel ćwiczenia Zapoznanie si˛e dziedziczeniem klas oraz mechanizmami niejawnego rzutowania w gór˛e. Przyswojenie poj˛ecia klasy abstrakcyjnej i praktyczne jej wykorzystanie w programie. Wykształcenie umiej˛etności posługiwania si˛e metodami wirtualnymi i metodami abstrakcyjnymi. 2 Program zaj˛eć • Ocena realizacji zadania z poprzedniego laboratorium – ocenie podlega poprawność realizacji zadania, styl pisania programu oraz dokumentacja wygenerowana za pomoca˛ systemu doxygen. • Ocena przygotowania do zaj˛eć – ocenie podlega diagram klas i diagram czynności (patrz rozdział 4.1). • Modyfikacja programu wg wskazań osoby prowadzacej ˛ – ocenie b˛edzie podlegała poprawność realizacji modyfikacji. Prac˛e nad modyfikacja˛ programu (wszystkie operacje należy wykonywać na kopii) należy rozpoczać ˛ już w trakcie pierwszej fazy laboratorium, gdyż prowadzacy ˛ nie b˛edzie w stanie ocenić wcześniejszego programu wszystkim jednocześnie. • Realizacja wst˛epnej fazy prac nad nowym zadaniem – należy stworzyć uproszczona˛ wersj˛e programu, która b˛edzie rysowała dwa manipulatory. • Ocena realizacji wst˛epnej fazy zadania 3 Opis zadania programowego Niniejsze zadanie jest rozszerzeniem wcześniejszego zadania. Należy napisać program, który w otoczeniu manipulatora (tzn. na scenie roboczej) uwzgl˛edni obecność przeszkód dwojakiego typu. Sa˛ nimi przeszkody modelowane poprzez wieloboki oraz przeszkody, którymi sa˛ inne manipulatory. Teraz przy zmianie postury manipulatora należy sprawdzić czy w trakcie zmiany postury wyst˛epuje kolizja, czy też nie. Jeśli wystapi ˛ kolizja, to należy przerwać działanie programu i wyświetlić typ przeszkody (manipulator lub wielobok) oraz jej nazw˛e przeszkody. Nast˛epnie należy zakończyć działanie programu. Uwaga: W trakcie zmiany postury należy również sprawdzić, czy manipulator sam ze soba˛ nie koliduje. Tak wi˛ec manipulator sam dla siebie jest też przeszkoda.˛ 4 4.1 Przygotowanie do zaj˛eć Tydzień 0 Przed zaj˛eciami należy stworzyć diagram klas dla całego programu uwzgl˛edniajacego ˛ tylko manipulatory jako przeszkody. Należy też stworzyć odpowiedni diagram czynności dla operacji sprawdzania kolizji danego manipulatora z innym manipulatorem. 1 Rysunek 1: Przykład wizualizacji sceny roboczej manipulatora 4.2 Tydzień 1 Należy stworzyć diagram klas dla całego programu z uwzgl˛ednieniem wieloboków jako przeszkód. Tak wi˛ec teraz do zbioru przeszkód należa˛ manipulatory, jak też wieloboki. Ponadto należy napisać diagram czynności sprawdzania kolizyjności dla manipulatora z wielobokiem oraz drugi czynności obrazujacy ˛ sprawdzanie kolizyjności manipulatora ze wszystkimi przeszkodami na scenie roboczej. 5 Działanie programu Tak jak we wcześniejszej wersji programu, tak i w tej, program ma nie mieć żadnego menu. Wszystkie dane wczytywane sa˛ z plików, których nazwy podane sa˛ w linii wywołania programu. Składnia wywołania programu: ./a.out plik_konfiguracji.dat plik_sceny.dat plik_postury1.dat [ plik_postury2.dat ... ] Plik zawierajacy ˛ opis konfiguracji manipulatora oraz pliki postury manipulatora maja˛ identyczna˛ postać jak we wcześniejszej cz˛eści zadania. Plik plik_sceny.dat zawiera opis sceny roboczej, tzn. rodzaj przeszkód i dane określajace ˛ ich położenie. Ogólny schemat działania programu jest analogiczny jak w cz˛eści pierwszej zadania. Program czyta konfiguracj˛e manipulatora oraz opis sceny roboczej. Wyświetlony zostaje manipulator oraz pozostałe elementy sceny, tzn. inne manipulatory oraz wieloboki. Nast˛epnie po 2s wczytuje pierwsza˛ postur˛e i sprawdza czy koliduje ona z jakaś ˛ przeszkoda˛ na scenie (tzn. wielobokiem, innym manipulatorem lub ze samym soba). ˛ Nast˛epnie wyświetla aktualny stan sceny (niezależnie od tego czy jest kolizja czy też nie). Jeśli została stwierdzona kolizja, to program wyświetla informacj˛e z jaka˛ przeszkoda˛ nastapiła ˛ kolizja (tzn. rodzaj przeszkody i jej nazw˛e, dla pierwszego manipulatora, który jest sterowany można przyjać ˛ dowolna˛ własna˛ nazw˛e). Nast˛epnie przerywa czytanie nowych postur i przechodzi w stan oczekiwania na naciśni˛ecie klawisza ENTER, aby zakończyć działanie. Jeżeli w nowej konfiguracji manipulator nie koliduje z żadna˛ przeszkoda,˛ to program rysuje ja,˛ odczekuje 1s i przechodzi do czytania nast˛epnej postury. 5.1 Składnia pliku opisu scen W pliku z opisem sceny w każdej linii umieszczone sa˛ dane dotyczace ˛ przeszkody znajduja˛ cej si˛e na scenie roboczej. W pierwszym tygodniu zawartość pliku jest ograniczona tylko 2 do innych manipulatorów. W drugim tygodniu plik opisu sceny b˛edzie uzupełniony o opisy przeszkód w postaci wieloboków. 5.1.1 Składnia pliku dla pierwszego tygodnia zadania Format pliku ma postać: M: nazwa_manipulatora1 (x0_1 y0_1) plik_konfiguracji.dat plik_postury.dat M: nazwa_manipulatora2 (x0_2 y0_2) plik_konfiguracji.dat plik_postury.dat ... Pierwsze dwa znaki (tzn. M:) określaja˛ typ przeszkody. W tym przypadku odnosza˛ si˛e one do manipulatora. Nast˛epnym elementem jest nazwa manipulatora. Stanowi ja˛ ciag ˛ znaków, który nie jest rozdzielony żadnym znakiem białym (spacja, znak tabulacji itd.). Kolejnym elementem sa˛ współrz˛edne podstawy manipulatora, a nast˛epnie plik konfiguracji i postury manipulatora. Pliki te maja˛ identyczna˛ postać i znacznie jak w pierwszej cz˛eści zadania. Należy wi˛ec zastosować ten sam schemat do stworzenia nowego manipulatora. Różnica polega jedynie na tym, że do wyznaczonych współrz˛ednych wszystkich przegubów należy dodać współrz˛edne podstawy, które odpowiadaja˛ w tym przypadku wektorowi translacji. Plik może mieć dowolna˛ ilość pustych linii. Przykład zawartości pliku: M: Manipulator_Maly (-50 0) scena1/konf_manip_m.dat scena1/postura_manip_m.dat M: Manipulator_3 (100 0) scena1/konf_manip_3.dat scena1/postura_manip_3.dat M: Manipulator_4 5.1.2 (55 0) scena1/konf_manip_4.dat scena1/postura_manip_4.dat Składnia pliku dla drugiego tygodnia zadania W drugim tygodniu program powinien być w stanie przeczytać plik, który oprócz opisów manipulatorów b˛edzie zawierał opisy wieloboków. Tak wi˛ec ogólny format pliku ma postać: W: nazwa_wieloboku1 (x1 W: nazwa_wieloboku2 (x1 M: nazwa_manipulatora1 W: nazwa_wieloboku3 (x1 M: nazwa_manipulatora2 ... y1) (x2 y2) y1) (x2 y2) (x0_1 y0_1) y1) (x2 y2) (x0_2 y0_2) ... (xN yN) ... (xM yM) plik_konfiguracji.dat plik_postury.dat ... (xL yL) plik_konfiguracji.dat plik_postury.dat W linii opisujacej ˛ wielobok oprócz oznaczenia typu przeszkody znajduje si˛e jej nazwa i współrz˛edne poszczególnych wierzchołków. Przykład zawartości pliku: W: M: W: M: Przeszkoda_A (20 0) (20 20) (40 20) (40 0) Manipulator_Maly (-50 0) scena1/konf_manip_m.dat scena1/postura_manip_m.dat Przeszkoda_B (20 40) (20 80) (40 80) (40 40) Manipulator_3 (100 0) scena1/konf_manip_3.dat scena1/postura_manip_3.dat M: Manipulator_4 5.2 (55 0) scena1/konf_manip_4.dat scena1/postura_manip_4.dat Reakcja na bł˛edy Reakcja na bł˛edy w plikach konfiguracji, czy też postury manipulatorów powinna być analogiczna jak w cz˛eści pierwszej niniejszego zadania. Ponadto jeżeli w trakcie przetwarzania pliku 3 opisu sceny wystapi ˛ a˛ bł˛edy fatalne prowadzace ˛ do przerwania działania aplikacji, to należy wyświetlić numer linii, której przetwarzanie doprowadziło do wystapienia ˛ tego typu bł˛edu. Bł˛edy w opisie wieloboku (np. bład ˛ czytania liczby) traktujemy jako bł˛edy fatalne. Należy wówczas wyświetlić odpowiedni komunikat i przerwać działanie aplikacji. 6 Przykład działania programu Niniejszy przykład nie obejmuje widoku okienka z rysunkiem wygenerowanym przez program gnuplot. Przedstawiona˛ form˛e interakcji z użytkownikiem należy traktować jako obowiazu˛ jac ˛ a.˛ jkowalsk@panamint: rozwiazanie> ./manipulator konfig.dat scenaX.dat post1.dat post2.dat post3.dat Konfiguracja: Dlugosc ogniwa_0: Dlugosc ogniwa_1: Dlugosc ogniwa_2: Dlugosc ogniwa_2: Postura: q0 = 90.0 q1 = 0.0 q2 = 0.0 q3 = 0.0 40 45.5 64.5 32 Przegub_0: Przegub_1: Przegub_2: Przegub_3: Efektor: (0.0, (0.0, (0.0, (0.0, (0.0, 0,0) 40.0) 85.5) 150.0) 182.0) Postura wczytana z post1.dat Postura: q0 = 75.2 q1 = -20.0 q2 = -31.0 q3 = -15.0 Przegub_0: Przegub_1: Przegub_2: Przegub_3: Efektor: (0.0, 0,0) (10.2, 38.7) (36.2, 76.0) (95.0, 102.5) (126.6, 107.6) Postura wczytana z post2.dat Postura: q0 = 100.0 q1 = -30.0 q2 = -41.0 q3 = -25.0 Przegub_0: Przegub_1: Przegub_2: Przegub_3: Efektor: (0.0, 0,0) (-6.9, 39.4) (8.6, 82.1) (65.0, 113.4) (97.0, 115.7) KOLIZJA!!! Wystapila ˛ kolizja z wielobokiem o nazwie: Przeszkoda_X Dzialanie programu zostalo przerwane. Aby zakonczyc nacisnij klawisz ENTER ... Przedstawiony przykład należy uznać za obligatoryjny pod wzgl˛edem rodzaju i sposobu wyświetlania informacji. 4 7 Wymagania Oprócz samego programu należy stworzyć i wygenerować za pomoca˛ programu doxygen dokumentacj˛e programu. Powinna ona zawierać diagramy wymagane w ramach przygotowania do zaj˛eć. Diagramy powinny zostać odpowiednio zaktualizowane, aby odzwierciedlały stan faktyczny zaimplementowanego rozwiazania. ˛ 8 Rozszerzenia dla ch˛etnych Niniejszy rozdział dotyczy tych wszystkich osób, które w pierwszej cz˛eści wybrały wariant 3D. Implementacja wykrywania przeci˛eć mi˛edzy byłami jest zdecydowanie bardziej złożona˛ procedura.˛ Ze wzgl˛edu na krótki czas realizacji zadania proponuje si˛e przyjać, ˛ że manipulator nie obraca si˛e wzdłuż osi OZ (osi pionowej). Przeszkody w postaci brył można ulokować w obszarze płaszczyzny manipulatora, np. niech to b˛edzie płaszczyzna YOZ. W takim przypadku problem problem kolizji można uprościć i sprowadzić do problemu 2D, tzn. szukać przeci˛eć mi˛edzy szkieletem manipulatora, traktowanym jako lini˛e łamana,˛ a obrysem rzutu przeszkody na płaszczyzn˛e YOZ, który to rzut b˛edzie wielobokiem. Idea sprowadzenia Rysunek 2: Idea sprowadzenia przypadku 3D do przypadku 2D. przypadku 3D do 2D przedstawiona jest na rysunku powyżej. Dla osób, które pragna˛ mimo wszystko zmierzyć si˛e z trudniejszym przypadkiem, proponowane jest wykrycie przeci˛eć mi˛edzy bryłami. 5