Elementy animacji sterowanie manipulatorem 1 Cel zadania Wykształcenie umiejętności korzystania z zapisu modelu aplikacji w UML oraz definiowania właściwego interfejsu klasy. 2 Opis zadania Należy napisać program, który umożliwi wyznaczenie konfiguracji (postury) manipulatora. Zakładamy, że manipulator przedstawiony jest schematycznie w postaci łamanej (patrz rysunek poniżej). Każdy z segmentów łamanej ma symbolizować pojedyncze ogniowo ramienia manipulatora. Tak więc w ten sposób przedstawione zadanie sprowadza się do wyznaczenia położenia poszczególnych przegubów manipulatora i jego efektora. Postura manipulatora jest zadana poprzez wartości kątów q 0, q 1, q 2,... między jego kolejnymi ogniwami ramienia. Dla uproszczenia, postury manipulatora będą rozważane tylko w jednej płaszczyźnie XOY. Zakłada się, Rysunek 1: Szkielet manipulatora i zaznaczonymi kątami pozwalającymi sterowanie nachyleniem poszczególnych ogniw manipulatora. że ilość ogniw ramienia nie jest ograniczona (w uproszczonej wersji zadania słabiej ocenianej można przyjąć, że liczba ta jest stała i wynosi 3). Przyjmuje się, że długość każdego z ogniw może być różna. Wartość parametru określającego długość danego ogniwa może być zmieniana w trakcie działania programu. Wyznaczone współrzędne mają być zapisane do pliku o ustalonej nazwie manipulator.dat. 3 Format zapisu współrzędnych Przyjmuje się, że współrzędne kolejnych przegubów zapisywane są w pliku tekstowym. Każda para współrzędnych zapisana zostaje w osobnej linii. W pierwszej linii zapisane są zawsze współrzędne początku układu współrzędnych. Przykładowa postać pliku ze współrzędnymi przedstawiona jest poniżej. 0 0-2.4 10.23 7.3 20.14 1
15.1 16.23 18.21 23.19 4 Wizualizacja Chcąc zobaczyć, posturę manipulatora w środowisku systemu Unix/Linux można skorzystać z programu gnuplot (znajduje się on w każdej dystrybucji Linuksa). Program ten jest dostępny również dla systemu MS Windows. Adres strony umożliwiającej pobranie programu to: http://sourceforge.net/project/showfiles.php?group_id=2055 4.1 Wersja uproszczona W tej wersji zadania można ograniczyć się do ręcznego uruchamiania programu gnuplot po każdorazowym przeliczeniu współrzędnych przegubów. Program gnuplot uruchamiamy w osobnym okienku terminala graficznego po wcześniejszym przejściu do podkatalogu, w którym znajduje się plik manipulator.dat. 4.1.1 Uruchomienie rysowania z linii polecenia Przykładowy sposób uruchomienia programu: echo "plot manipulator.dat ; pause 999" gnuplot Przerwanie działania programu realizujemy poprzez naciśnięcie przycisków Ctrl-C, gdy focus znajduje się w okienku terminala, z poziomu którego został on uruchomiony. 4.1.2 Uruchomienie rysowania z w trybie interakcjnym Z programem gnuplot można pracować w trybie interakcyjny. Uruchamiamy go poleceniem gnuplot, następnie wydajemy polecenie plot manipulator.dat. Wyjście z programu poprzez polecenie exit. Uwaga: W przypadku pracy w trybie interakcyjnym nie ma sensu kończyć jego działanie po jednokrotnym narysowaniu łamanej. Po ponownym przeliczeniu współrzędnych można powtórzyć polecenie plot manipulator.dat (program gnuplot pamięta historię poleceń, przejście do poprzedniego polecenia dokonuje się poprzez naciśnięcie strzałki w górę), które spowoduje zaktualizowanie poprzedniego rysunku. Przykład sesji z programem gnuplot. diablo@jkowalsk> gnuplot G N U P L O T Version 4.0 patchlevel 0 last modified Thu Apr 15 14:44:22 CEST 2004 System: SunOS 5.10... gnuplot> gnuplot>... gnuplot> plot manipulator.dat plot manipulator.dat plot manipulator.dat 2
gnuplot> exit diablo@jkowalsk> _ 4.2 Wersja podstawowa W tej wersji proponuje się użycie zewnętrznego modułu lacze_do_gnuplota. Znajduje się on kartotece bk/edu/kpo/zad/z-manipulator1/przyklad_2d wraz z przykładem jego wykorzystania. Wspomniany moduł pozwala uruchomić program gnuplot z poziomu własnego programu i przesłać do niego polecenie wykonania rysunku. Ponadto umożliwia na ustalenie zakresu osi współrzędnych OX i OY. 5 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ą. jkowalsk@panamint: rozwiazanie>./manipulator Aktualne wspolrzedne i parametry: Dlugos ogniwa_0: 10 q0 = 105 Przegub_0: (0, 0) Dlugos ogniwa_1: 10 q1 = -70 Przegub_1: (-2.59, 9.66) Dlugos ogniwa_2: 10 q2 = -60 Przegub_2: (5.6, 15.4) Efektor: (14.7, 11.2) Menu: 0 - Zmiana kata q0 1 - Zmiana kata q1 2 - Zmiana kata q2 z - zmiana ilosc ogniw l - zmiana dlugosci ogniwa? - ponowne wyswietlenie menu k - koniec programu Twoj wybor (? - menu)> 0 Wprowadz q0: 82 Aktualne wspolrzedne i parametry: Dlugos ogniwa_0: 10 q0 = 82 Przegub_0: (0, 0) Dlugos ogniwa_1: 10 q1 = -70 Przegub_1: (1.39, 9.9) Dlugos ogniwa_2: 10 q2 = -60 Przegub_2: (11.2, 12) Efektor: (17.9, 4.55) Twoj wybor (? - menu)> k jkowalsk@panamint: rozwiazanie> _ 3
6 Rozszerzenie (nieobowiazkowe) W wersji rozszerzonej proponuje się dodatkowe elementy: Animację zmiany pozycji danego ogniwa. Chodzi o zapewnienie płynnej zmiany pozycji ogniw (tak jak to jest zrealizowane w dostarczonym przykładzie). Skonstruowanie trójwymiarowego rysunku manipulatora. Można tego dokonać wykorzystując moduł lacze_do_gnuplota. Przykład jego użycia dla wersji 3D jest umieszczony w kartotece bk/edu/kpo/zad/z-manipulator1/przyklad_3d Wspomniany moduł pozwala uruchomić program gnuplot z poziomu programu i przesłać do niego polecenie wykonania rysunku. W tej wersji programu zakłada się, że konstrukcja manipulatora jest w programie zaszyta na sztywno (bez możliwości zmiany ilości ogniw i ich długości). Przykład wizualizacji manipulatora znajduje się na zamieszczonym Rysunek 2: Przykład wizualizacji manipulatora zrealizowany w ramach studenckich zajęć laboratoryjnych rysunku. 7 Obliczanie współrzędnych przegubów Wyznaczanie współrzędnych przegubów i efektora najłatwiej jest zrealizować łącząc z każdym z przegubów i efektorem lokalny układ współrzędnych. Przeguby znajdują się w początku takich układów współrzędnych. Dzięki temu i-ty przegub (oznaczony jako punkt P i ) w swoim lokalnym układzie współrzędnych X i OY i ma współrzędne P ii = (0,0). Zastosowane oznaczenie P ii odzwierciedla fakt, że są to współrzędne punktu P i w układzie współrzędnych i-tego przegubu. To samo dotyczy efektora. Naszym zadaniem jest wyliczenie współrzędnych poszczególnych punktów w układzie globalnym X O OY O. W przedstawionym przykładzie można to zrealizować dokonując następujących transformacji: P 00 = [0 0] T, P 10 = R(q 0 ) (P 11 + T 1 ), ) P 20 = R(q 0 ) (R(q 1 ) (P 22 + T 2 ) + T 1, ( ) ) P 30 = R(q 0 ) R(q 1 ) (R(q 2 ) (P 33 + T 3 ) + T 2 + T 1. (1) 4
Rysunek 3: Lokalne układy współrzędnych związane z każdym z przegubów. Współrzędne punktu we wzorze przedstawionym powyżej reprezentowane są jako macierz jednokolumnowa. Natomiast T i to wektory translacji reprezentowane przez macierz jednokolumnową [l i 0] T, gdzie l i jest długością i-tego ogniwa. R(q i ) jest macierzą rotacji w współczynnikach postaci: [ ] cosqi sinq R(q i ) = i (2) sinq i cosq i Należy zauważyć, że wyliczanie współrzędnych przegubu np. P 2 jest ciągiem transformacji do układów współrzędnych kolejnych przegubów reprezentowanych przez punkty P 1 i P 0. Podobnie dla P 3 jest to ciąg transformacji do układów współrzędnych związanych z przegubami reprezentowanych przez punkty P 2, P 1 oraz P 0. Tak więc wyliczenie współrzędnych przegubu P 3 można byłoby rozpisać następująco: P 32 = R(q 2 ) (P 33 + T 3 ), P 31 = R(q 1 ) (P 32 + T 2 ), P 30 = R(q 0 ) (P 31 + T 1 ). (3) To spostrzeżenie można wykorzystać przy implementacji rozwiązania zadania. 8 Materiały pomocnicze Dodatkowe pomocnicze elementy ułatwiające rozpoczęcie realizację zadania znaleźć można na serwerze diablo lub panamint w katalogu bk/edu/kpo/zad/z-manipulator1. W katalogu tym znajdują się następujące podkatalogi i pliki: bk/edu/kpo/zad/z-manipulator1/. bin.panamint/manipulator przyklad_2d/makefile przyklad_2d/src/start.cpp przyklad_2d/src/lacze_do_gnuplota.cpp przyklad_2d/inc/lacze_do_gnuplota.hh przyklad_3d/makefile przyklad_3d/src/start.cpp przyklad_3d/src/lacze_do_gnuplota.cpp przyklad_3d/inc/lacze_do_gnuplota.hh przyklad_3d/inc/prostopadloscian1.dat 5
przyklad_3d/inc/prostopadloscian2.dat przyklad_3d/inc/prostopadloscian3.dat bin.diablo/manipulator, bin.panamint/manipulator Są to programy binarne. Stanowią one przykład realizacji programu, w wersji podstawowej (z dodatkiem animacji), który został skompilowany odpowiednio na serwerze diablo i na serwerze panamint. przyklad_2d Katalog zawiera przykład użycia modułu lacze_do_gnuplota pozwalającego uruchomić program gnuplot z poziomu własnego programu i nawiązać z nim komunikację. W przykładzie pokazane jest rysowanie z wykorzystaniem grafiki 2D. przyklad_3d Katalog zawiera przykład użycia modułu lacze_do_gnuplota pozwalającego uruchomić program gnuplot z poziomu własnego programu i nawiązać z nim komunikację. W przykładzie pokazane jest rysowanie z wykorzystaniem grafiki 3D. 6