Zad. 7: Sterowanie manipulatorem – przypadek 3D
Transkrypt
Zad. 7: Sterowanie manipulatorem – przypadek 3D
Zad. 7: Sterowanie manipulatorem – przypadek 3D 1 Cel ćwiczenia Wykorzystanie w praktyce mechanizmu dziedziczenia. Wykształcenie umiej˛etności korzystania z szablonu list<> oraz dalsze rozwijanie umiej˛etności projektowania struktur danych oraz definiowanie odpowiednich przecia˛żeń operatorów. 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 (patrz rozdział 4). • 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 jest w stanie rozpoznać typ obiektu na podstawie wczytywanego pliku opisujacego ˛ prostopadloscian lub parawan. Aby to zrealizować, zalecane jest wykorzystanie dostarczone przykladu w katalogu ∼bk/edu/kpo/zad/z7/przyklad • Ocena realizacji wst˛epnej fazy zadania 3 Opis zadania programowego Niniejsze zadanie jest kontynuacja˛ i rozszerzeniem wcześniejszego zadania. Bazujac ˛ na wcześniejszym programie należy napisać program, który b˛edzie umożliwiał sterowanie dwóch manipulatorów. Manipulatory te b˛eda˛ różnego typu. Pierwszy z nich b˛edzie miał, tak jak manipulator w poprzednim zadaniu, tylko przeguby rotacyjne. Oprócz tego b˛edzie miał obrotowa˛ kolumn˛e. Drugi z manipulatorów również b˛edzie miał obrotowa˛ kolumn˛e. Jednak pozostałe ogniwa b˛eda˛ tylko translacyjne. Oznacza to, że b˛eda˛ one mogły zmieniać swoja˛ długość. Oprócz tego program powinien być w stanie wizualizować dwa typy przeszkód, które b˛eda˛ znajdowały si˛e na scenie roboczej razem z manipulatorami. Pierwszy z rodzai przeszkód to prostopadłościan. Drugi rodzaj przeszkód to parawany składajace ˛ si˛e z trzech ścianek. Te ostatnie sa˛ niczym innym jak rozpi˛etym prostopadłościanem pozbawionym dwóch przeciwległych ścianek. Zakładamy, że liczba przeszkód nie jest ograniczona. Dlatego też każdy z dwóch rodzai przeszkód trzeba przechowywać na osobnych listach wykorzystujac ˛ szablon list<>. W przypadku przeszkód należy również wykorzystać mechanizm dziedziczenia i zdefiniować odpowiednia˛ klas˛e wykorzystujac ˛ wspólna˛ klas˛e bazowa.˛ Użycie mechanizmu dziedziczenia jak też szablonu list<> jest obligatoryjne. 1 4 Przygotowanie do zaj˛eć Należy przygotować wst˛epny diagram klas modelujacy ˛ struktury danych programu realizuja˛ cego niniejsze zadanie. Oprócz manipulatorów i przeszkód należy również uwzgl˛ednić fakt, że wszystkie te elementy znajduja˛ si˛e na wspólnej scenie roboczej. Stworzony diagram musi mieć form˛e elektroniczna˛ w postaci odpowiedniego pliku graficznego. 5 Działanie programu Program wywołujemy z zestawem plików. Pierwsze dwa opisuja˛ konfiguracj˛e manipulatorów. Jeden z nich musi si˛e odnosić do manipulatora z przegubami rotacyjnymi zaś drugi z przegubami translacyjnymi. Ich kolejność jest dowolna. Kolejne pliki zawieraja˛ opis obiektów takich jak prostopadłościan oraz parawan. Ich ilość nie jest jawnie ograniczona. Przykład wywołania programu. ./scena konfig_manip_rot.dat konfig_manip_trans.dat obiekt1.dat obiekt2.dat Pliki konfiguracyjne manipulatorów zawieraja˛ informacje o typie manipulatora, jego nazwie, położeniu wzgl˛edem poczatku ˛ układu współrz˛ednych (wektor translacji ~T – patrz rys. 1) wartość kata ˛ qr (wartości katów ˛ wyrażone sa˛ w stopniach) oraz pary wartości qi−1 , li . Tak wi˛ec plik ten zadaje położenie manipulatora, jego struktur˛e oraz poczatkow ˛ a˛ postur˛e. Ogólna składnia pliku ma postać: typ_maniputora nazwa_manipulatora Tx Ty Ty qr q0 l1 ··· qn−1 ln Przykład zawartości pliku: manipulator_trans manip1_T 20 40 0 0 90 40 30 30 10 40 Dopuszczalne nazwy typów manipulatorów to: manipulator_trans, manipulator_rot. Pliki opisujace ˛ obiekty takie jak prostopadłościan lub parawan, zawieraja˛ informacj˛e o typie obiektu, jego nazw˛e, współczynniki skalowania wzgl˛edem poszczególnych osi oraz współrz˛edne wektora translacji. Składnia takiego pliku ma postać: typ_obiektu_geometrycznego nazwa_obiektu_geometrycznego Sx Sy Sy Tx Ty Ty Przykład zawartości pliku: 2 Rysunek 1: Współrz˛edne wierzchołków prostopadloscian bryla1 5 3 2 20 0 40 Dopuszczalne nazwy typów obiektów w tym przypadku to: prostopadloscian, parawan. Obiekty te powinny być zainicjalizowane jako pewnego rodzaju obiekt wzorcowy (patrz rys. 2). Pożadany ˛ obiekt możemy dalej otrzymać poprzez odpowiednie skalowanie osi i translacj˛e. a) b) Rysunek 2: Współrz˛edne wierzchołków dla a) wzorcowego prostopadłościanu b) wzorcowego parawanu Nazwy wszystkich obiektów sceny (tzn. manipulatorów, prostopadłościanów lub parawanów) musza˛ być unikalne. Należy je wykorzystać do skonstruowania odpowiednich nazw plików, do których b˛eda˛ wpisywane współrz˛edne wierzchołków dla programu gnuplot. Przykład takiej konstrukcji jest dost˛epny w dostarczonym kodzie w ramach materiałów pomocniczych. Program powinien udost˛epniać proste menu, które b˛edzie pozwalało na realizacj˛e nast˛epujacych ˛ operacji: • wyświetlenie nazw wszystkich obiektów na scenie (tzn. manipulatorów, prostopadłościanów i parawanów), • dla wybranego poprzez nazw˛e obiektu sceny należy wczytać plik zawierajacy ˛ zestaw liczb zmiennoprzecinkowych. Zbór ten określa nowy stan danego obiektu. Jeżeli wybranym obiektem jest manipulator, to wspomniany zbiór liczb należy traktować jako wartości, determinujace ˛ jego nowa˛ postur˛e. Przy czym w przypadku manipulatora z przegubami rotacyjnymi, zbiór ten określa wartości kolejnych katów: ˛ qr , q0 , q1 , . . . , qn 3 (wyrażone w stopniach). W przypadku manipulatora zawierajacego ˛ przeguby translacyjne, pierwsza wartość, to kat ˛ qr , zaś pozostałe to nowe długości kolejnych ramion l1 , l2 , . . . , ln . Dla obiektów takich jak prostopadłościany oraz parawany, zawartościa˛ pliku sa˛ współrz˛edne wektora translacji wzgl˛edem aktualnego położenia obiektu. • ponowne wyświetlenie menu, • zakończenie działania programu. Reakcja na bł˛edy ma analogiczna do tego jak w programach z zadania nr 5 i 6. Wszystkie realizowane akcje powinny być wizualizowane za pomoca˛ programu gnuplot. 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.˛ jk@panamint> ./scena konfig_manipR.dat konfig_manipT.dat pro1.dat pro2.dat par1.dat Konfiguracje manipulatora wczytano z pliku: konfig_manipR.dat Konfiguracje manipulatora wczytano z pliku: konfig_manipT.dat Dodano obiekt sceny z pliku: pro1.dat Dodano obiekt sceny z pliku: pro2.dat Dodano obiekt sceny z pliku: par1.dat n w m k - podaj nazwe obiektu, ktory ma byc podany dzialaniu wyswietl nazwy wszystkich obiektow wyswietl menu koniec dzialania programu Twoj wybor? (m - menu) > w Manip1_R Manip2_T Bryla1 Bryla2 Zaslona <<<<<- Manipulator (przeguby rotacyjne) Manipulator (przeguby translacyjne) Prostopadloscian Prostopadloscian Parawana Twoj wybor? (m - menu) > n Nazwa obiektu> ManipR Podaj nazwe pliku> postura1_rot.dat Wykonano polecenie dla: Manip1_R <- Manipulator (przeguby rotacyjne) Twoj wybor? (m - menu) > k 4 Koniec dzialania programu jk@panamint>_ Przedstawiony przykład należy uznać za obligatoryjny pod wzgl˛edem rodzaju i sposobu wyświetlania informacji. 7 Wymagania i zarys programu zaj˛eć w okresie realizacji zadania 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. ˛ Oprócz tego pozostaja˛ w mocy wszystkie wcześniejsze wymagania dotyczace ˛ struktury katalogów, pliku Makefile, modułowej struktury programu, jak też opisów. 7.1 Tydzień 0 Wymagania co do tygodnia 0 zostały opisane w rozdziale 4. 7.2 Tydzień 1 Należy zaimplementować wczytywanie konfiguracji manipulatorów (dwa pierwsze pliki w przykładzie wywołania programu). Na ich podstawie należy utworzyć manipulatory i wyświetlić. W tym przypadku nie jest jeszcze wymagany ich obrót wokół osi OY . Należy skorygować diagram klas z poprzedniego tygodnia, tak aby uwzgl˛edniał bieżacy ˛ stan projektu struktur danych, zarówno w cz˛eści już zaimplementowanej, tzn. manipulatory, jak też w cz˛eści przewidzianej do implementacji (tzn. listy prostopadłościanów i parawanów). Należy stworzyć odpowiedni diagram czynności dla operacji wyszukiwania danego obiektu geometrycznego po nazwie spośród manipulatorów, prostopadłościanów oraz parawanów. Diagramy musza˛ być w wersji elektronicznej w postaci odpowiedniego pliku graficznego. Operacja eksportowania diagramów UML tworzonych za pomoca˛ programu dia została przedstawiona w prezentacji wcześniej już umieszczonej na stronie kursu. Stworzony kod musi być zdokumentowany w systemie doxygen. Aktualne wersje diagramów powinny być właczone ˛ do dokumentacji. Opis tworzenia dodatkowych stron dokumentacji i właczania ˛ plików graficznych przedstawiony jest w materiałach do wykładu nr 5 na slajdach od 183 do 189. Zapis w konfiguracji generowanej dokumentacji przez doxygen, który pozwala podać ścieżki do plików graficznych przedstawiony jest na slajdzie nr 150. 7.3 Tydzień 2 Należy zaktualizować wcześniej stworzone diagramy klas i diagramy czynności. Ponadto w programie należy stworzyć menu, które b˛edzie pozwało odnaleźć właściwy manipulator po nazwie oraz wczytać dla niego plik zawierajacy ˛ nowa˛ postur˛e. Powinno to spowodować odpowiednie przeliczenie położenia przegubów manipulatorów oraz ich odrysowane. Program musi 5 również zawierać struktury danych tworzacych ˛ listy manipulatorów oraz parawanów (należy do tego wykorzystać szablon list<>, nie należy tworzyć własnych list). Program powinien ponadto być w stanie wczytać z linii polecenia, oprócz plików konfiguracji manipulatorów, również pliki opisujace ˛ przeszkody, zgodnie z przykładem wywołania programu demonstrowanym we wcześniejszym rozdziale. Stworzony kod musi być zdokumentowany w systemie doxygen. Aktualne wersje diagramów powinny być właczone ˛ do dokumentacji. 7.4 Tydzień 3 Rozliczenie si˛e z gotowego programu i rozpocz˛ecie nast˛epnego zadania. 8 Materiały pomocnicze W podkatalogu ∼bk/edu/kpo/zad/z7/przyklad znajduje si˛e przykład użycia modułu lacze_do_gnuplota. Uwaga: Jest on inny niż wcześniejsze wersje, gdyż teraz domyślna˛ pionowa˛ osia˛ układu współrz˛ednych jest oś OY . Ponadto zawiera on przykład czytania pliku i rozpoznawania typu manipulatora. Zawiera on również przykład definicji i użycia szablonu Wektor<>. 6