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