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