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

Podobne dokumenty