Elementy animacji – sterowanie manipulatorem
Transkrypt
Elementy animacji – sterowanie manipulatorem
Elementy animacji – sterowanie manipulatorem 1 Cel zadania Wykształcenie umiej˛etnoś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˛ec w ten sposób przedstawione zadanie sprowadza si˛e do wyznaczenia położenia poszczególnych przegubów manipulatora i jego efektora. Postura manipulatora jest zadana poprzez wartości katów ˛ q0 , q1 , q2 , . . . mi˛edzy jego kolejnymi ogniwami ramienia. Dla uproszczenia, postury manipulatora b˛eda˛ rozważane tylko w jednej płaszczyźnie XOY . Zakłada si˛e, Rysunek 1: Szkielet manipulatora i zaznaczonymi katami ˛ pozwalajacymi ˛ sterowanie nachyleniem poszczególnych ogniw manipulatora. że ilość ogniw ramienia nie jest ograniczona (w uproszczonej wersji zadania – słabiej ocenianej – można przyjać, ˛ że liczba ta jest stała i wynosi 3). Przyjmuje si˛e, że długość każdego z ogniw może być różna. Wartość parametru określajacego ˛ długość danego ogniwa może być zmieniana w trakcie działania programu. Wyznaczone współrz˛edne maja˛ być zapisane do pliku o ustalonej nazwie manipulator.dat. 3 Format zapisu współrz˛ednych Przyjmuje si˛e, że współrz˛edne kolejnych przegubów zapisywane sa˛ w pliku tekstowym. Każda para współrz˛ednych zapisana zostaje w osobnej linii. W pierwszej linii zapisane sa˛ zawsze współrz˛edne poczatku ˛ układu współrz˛ednych. Przykładowa postać pliku ze współrz˛ednymi 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 Chcac ˛ zobaczyć, postur˛e manipulatora w środowisku systemu Unix/Linux można skorzystać z programu gnuplot (znajduje si˛e on w każdej dystrybucji Linuksa). Program ten jest dost˛epny również dla systemu MS Windows. Adres strony umożliwiajacej ˛ pobranie programu to: http://sourceforge.net/project/showfiles.php?group_id=2055 4.1 Wersja uproszczona W tej wersji zadania można ograniczyć si˛e do r˛ecznego uruchamiania programu gnuplot po każdorazowym przeliczeniu współrz˛ednych przegubów. Program gnuplot uruchamiamy w osobnym okienku terminala graficznego po wcześniejszym przejściu do podkatalogu, w którym znajduje si˛e 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˛ecie przycisków Ctrl-C, gdy focus znajduje si˛e 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˛epnie 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˛ednych można powtórzyć polecenie plot ’manipulator.dat’ (program gnuplot pami˛eta histori˛e poleceń, przejście do poprzedniego polecenia dokonuje si˛e poprzez naciśni˛ecie strzałki w gór˛e), 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˛e użycie zewn˛etrznego modułu lacze_do_gnuplota. Znajduje si˛e 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˛ednych OX i OY . 5 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 Aktualne wspolrzedne i parametry: Dlugos ogniwa_0: 10 q0 = 105 Dlugos ogniwa_1: 10 q1 = -70 Dlugos ogniwa_2: 10 q2 = -60 Przegub_0: Przegub_1: Przegub_2: Efektor: (0, 0) (-2.59, 9.66) (5.6, 15.4) (14.7, 11.2) Przegub_0: Przegub_1: Przegub_2: Efektor: (0, 0) (1.39, 9.9) (11.2, 12) (17.9, 4.55) 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 Dlugos ogniwa_1: 10 q1 = -70 Dlugos ogniwa_2: 10 q2 = -60 Twoj wybor (? - menu)> k jkowalsk@panamint: rozwiazanie> _ 3 6 Rozszerzenie (nieobowiazkowe) ˛ W wersji rozszerzonej proponuje si˛e dodatkowe elementy: • Animacj˛e 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ć wykorzystujac ˛ 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, ż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˛e na zamieszczonym Rysunek 2: Przykład wizualizacji manipulatora zrealizowany w ramach studenckich zaj˛eć laboratoryjnych rysunku. 7 Obliczanie współrz˛ednych przegubów Wyznaczanie współrz˛ednych przegubów i efektora najłatwiej jest zrealizować łacz ˛ ac ˛ z każdym z przegubów i efektorem lokalny układ współrz˛ednych. Przeguby znajduja˛ si˛e w poczatku ˛ takich układów współrz˛ednych. Dzi˛eki temu i-ty przegub (oznaczony jako punkt Pi ) w swoim lokalnym układzie współrz˛ednych Xi OYi ma współrz˛edne Pii = (0, 0). Zastosowane oznaczenie Pii odzwierciedla fakt, że sa˛ to współrz˛edne punktu Pi w układzie współrz˛ednych i-tego przegubu. To samo dotyczy efektora. Naszym zadaniem jest wyliczenie współrz˛ednych poszczególnych punktów w układzie globalnym XO OYO . W przedstawionym przykładzie można to zrealizować dokonujac ˛ nast˛epuja˛ cych transformacji: P00 = [0 0]T , P10 = R(q0 ) · (P11 + T1 ), P20 = R(q0 ) · R(q1 ) · (P22 + T2 ) + T1 , P30 = R(q0 ) · R(q1 ) · R(q2 ) · (P33 + T3 ) + T2 + T1 . 4 (1) Rysunek 3: Lokalne układy współrz˛ednych zwiazane ˛ z każdym z przegubów. Współrz˛edne punktu we wzorze przedstawionym powyżej reprezentowane sa˛ jako macierz jednokolumnowa. Natomiast Ti to wektory translacji reprezentowane przez macierz jednokolumnowa˛ [li 0]T , gdzie li jest długościa˛ i-tego ogniwa. R(qi ) jest macierza˛ rotacji w współczynnikach postaci: cos qi − sin qi R(qi ) = (2) sin qi cos qi Należy zauważyć, że wyliczanie współrz˛ednych przegubu np. P2 jest ciagiem ˛ transformacji do układów współrz˛ednych kolejnych przegubów reprezentowanych przez punkty P1 i P0 . Podobnie dla P3 jest to ciag ˛ transformacji do układów współrz˛ednych zwiazanych ˛ z przegubami reprezentowanych przez punkty P2 , P1 oraz P0 . Tak wi˛ec wyliczenie współrz˛ednych przegubu P3 można byłoby rozpisać nast˛epujaco: ˛ P32 = R(q2 ) · (P33 + T3 ), P31 = R(q1 ) · (P32 + T2 ), P30 = R(q0 ) · (P31 + T1 ). (3) To spostrzeżenie można wykorzystać przy implementacji rozwiazania ˛ zadania. 8 Materiały pomocnicze Dodatkowe pomocnicze elementy ułatwiajace ˛ rozpocz˛ecie realizacj˛e zadania znaleźć można na serwerze diablo lub panamint w katalogu ˜bk/edu/kpo/zad/z-manipulator1. W katalogu tym znajduja˛ si˛e nast˛epujace ˛ 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 Sa˛ to programy binarne. Stanowia˛ 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 pozwalajacego ˛ uruchomić program gnuplot z poziomu własnego programu i nawiazać ˛ z nim komunikacj˛e. W przykładzie pokazane jest rysowanie z wykorzystaniem grafiki 2D. przyklad_3D Katalog zawiera przykład użycia modułu lacze_do_gnuplota pozwalajacego ˛ uruchomić program gnuplot z poziomu własnego programu i nawiazać ˛ z nim komunikacj˛e. W przykładzie pokazane jest rysowanie z wykorzystaniem grafiki 3D. 6