Zad. 7: Sterowanie manipulatorem przypadek 3D 1 Cel ćwiczenia Wykorzystanie w praktyce mechanizmu dziedziczenia. Wykształcenie umiejętności korzystania z szablonu list<> oraz dalsze rozwijanie umiejętności projektowania struktur danych oraz definiowanie odpowiednich przeciążeń operatorów. 2 Program zajęć Ocena realizacji zadania z poprzedniego laboratorium ocenie podlega poprawność realizacji zadania, styl pisania programu oraz dokumentacja wygenerowana za pomocą systemu doxygen. Ocena przygotowania do zajęć ocenie podlega diagram klas (patrz rozdział 4). Modyfikacja programu wg wskazań osoby prowadzacej ocenie będzie podlegała poprawność realizacji modyfikacji. Pracę nad modyfikacją programu (wszystkie operacje należy wykonywać na kopii) należy rozpocząć już w trakcie pierwszej fazy laboratorium, gdyż prowadzący nie będzie w stanie ocenić wcześniejszego programu wszystkim jednocześnie. Realizacja wstępnej fazy prac nad nowym zadaniem należy stworzyć uproszczoną wersję programu, która jest w stanie rozpoznać typ obiektu na podstawie wczytywanego pliku opisującego prostopadloscian lub parawan. Aby to zrealizować, zalecane jest wykorzystanie dostarczone przykladu w katalogu bk/edu/kpo/zad/z7/przyklad Ocena realizacji wstępnej fazy zadania 3 Opis zadania programowego Niniejsze zadanie jest kontynuacją i rozszerzeniem wcześniejszego zadania. Bazując na wcześniejszym programie należy napisać program, który będzie umożliwiał sterowanie dwóch manipulatorów. Manipulatory te będą różnego typu. Pierwszy z nich będzie miał, tak jak manipulator w poprzednim zadaniu, tylko przeguby rotacyjne. Oprócz tego będzie miał obrotową kolumnę. Drugi z manipulatorów również będzie miał obrotową kolumnę. Jednak pozostałe ogniwa będą tylko translacyjne. Oznacza to, że będą one mogły zmieniać swoją długość. Oprócz tego program powinien być w stanie wizualizować dwa typy przeszkód, które będą znajdowały się na scenie roboczej razem z manipulatorami. Pierwszy z rodzai przeszkód to prostopadłościan. Drugi rodzaj przeszkód to parawany składające się z trzech ścianek. Te ostatnie są niczym innym jak rozpiętym 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 wykorzystując szablon list<>. W przypadku przeszkód należy również wykorzystać mechanizm dziedziczenia i zdefiniować odpowiednią klasę wykorzystując wspólną klasę bazową. Użycie mechanizmu dziedziczenia jak też szablonu list<> jest obligatoryjne. 1
4 Przygotowanie do zajęć Należy przygotować wstępny diagram klas modelujący struktury danych programu realizującego niniejsze zadanie. Oprócz manipulatorów i przeszkód należy również uwzględnić fakt, że wszystkie te elementy znajdują się na wspólnej scenie roboczej. Stworzony diagram musi mieć formę elektroniczna w postaci odpowiedniego pliku graficznego. 5 Działanie programu Program wywołujemy z zestawem plików. Pierwsze dwa opisują konfigurację manipulatorów. Jeden z nich musi się odnosić do manipulatora z przegubami rotacyjnymi zaś drugi z przegubami translacyjnymi. Ich kolejność jest dowolna. Kolejne pliki zawierają 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 zawierają informacje o typie manipulatora, jego nazwie, położeniu względem początku układu współrzędnych (wektor translacji T patrz rys. 1) wartość kąta q r (wartości kątów wyrażone są w stopniach) oraz pary wartości q i 1, l i. Tak więc plik ten zadaje położenie manipulatora, jego strukturę oraz początkową posturę. Ogólna składnia pliku ma postać: typ_maniputora nazwa_manipulatora T x T y T y q r q 0 l 1 Przykład zawartości pliku: manipulator_trans manip1_t 20 40 0 0 90 40 30 30 10 40 q n 1 l n Dopuszczalne nazwy typów manipulatorów to: manipulator_trans, manipulator_rot. Pliki opisujące obiekty takie jak prostopadłościan lub parawan, zawierają informację o typie obiektu, jego nazwę, współczynniki skalowania względem poszczególnych osi oraz współrzędne wektora translacji. Składnia takiego pliku ma postać: Przykład zawartości pliku: typ_obiektu_geometrycznego nazwa_obiektu_geometrycznego S x S y S y T x T y T y 2
Rysunek 1: Współrzędne 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żądany obiekt możemy dalej otrzymać poprzez odpowiednie skalowanie osi i translację. a) b) Rysunek 2: Współrzędne 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) muszą być unikalne. Należy je wykorzystać do skonstruowania odpowiednich nazw plików, do których będą wpisywane współrzędne wierzchołków dla programu gnuplot. Przykład takiej konstrukcji jest dostępny w dostarczonym kodzie w ramach materiałów pomocniczych. Program powinien udostępniać proste menu, które będzie pozwalało na realizację następujących operacji: wyświetlenie nazw wszystkich obiektów na scenie (tzn. manipulatorów, prostopadłościanów i parawanów), dla wybranego poprzez nazwę obiektu sceny należy wczytać plik zawierający 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, determinujące jego nową posturę. Przy czym w przypadku manipulatora z przegubami rotacyjnymi, zbiór ten określa wartości kolejnych kątów: q r,q 0,q 1,...,q n 3
(wyrażone w stopniach). W przypadku manipulatora zawierającego przeguby translacyjne, pierwsza wartość, to kąt q r, zaś pozostałe to nowe długości kolejnych ramion l 1,l 2,...,l n. Dla obiektów takich jak prostopadłościany oraz parawany, zawartością pliku są współrzędne wektora translacji względem aktualnego położenia obiektu. ponowne wyświetlenie menu, zakończenie działania programu. Reakcja na błędy ma analogiczna do tego jak w programach z zadania nr 5 i 6. Wszystkie realizowane akcje powinny być wizualizowane za pomocą programu gnuplot. 6 Przykład działania programu Niniejszy przykład nie obejmuje widoku okienka z rysunkiem wygenerowanym przez program gnuplot. Przedstawioną formę interakcji z użytkownikiem należy traktować jako obowiązującą. 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 - podaj nazwe obiektu, ktory ma byc podany dzialaniu w - wyswietl nazwy wszystkich obiektow m - wyswietl menu k - 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ędem rodzaju i sposobu wyświetlania informacji. 7 Wymagania i zarys programu zajęć w okresie realizacji zadania Oprócz samego programu należy stworzyć i wygenerować za pomocą programu doxygen dokumentację programu. Powinna ona zawierać diagramy wymagane w ramach przygotowania do zajęć. Diagramy powinny zostać odpowiednio zaktualizowane, aby odzwierciedlały stan faktyczny zaimplementowanego rozwiązania. Oprócz tego pozostają w mocy wszystkie wcześniejsze wymagania dotyczące 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ędniał bieżący stan projektu struktur danych, zarówno w części już zaimplementowanej, tzn. manipulatory, jak też w częś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 muszą być w wersji elektronicznej w postaci odpowiedniego pliku graficznego. Operacja eksportowania diagramów UML tworzonych za pomocą 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łączone do dokumentacji. Opis tworzenia dodatkowych stron dokumentacji i włączania 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ędzie pozwało odnaleźć właściwy manipulator po nazwie oraz wczytać dla niego plik zawierający nową posturę. Powinno to spowodować odpowiednie przeliczenie położenia przegubów manipulatorów oraz ich odrysowane. Program musi 5
również zawierać struktury danych tworzących 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 opisujące 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łączone do dokumentacji. 7.4 Tydzień 3 Rozliczenie się z gotowego programu i rozpoczęcie następnego zadania. 8 Materiały pomocnicze W podkatalogu bk/edu/kpo/zad/z7/przyklad znajduje się przykład użycia modułu lacze_do_gnuplota. Uwaga: Jest on inny niż wcześniejsze wersje, gdyż teraz domyślną pionową osią układu współrzędnych 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