Elementy animacji – sterowanie manipulatorem 1
Cel zadania
Wykształcenie umiejętności korzystania z szablonów std::vector<> i std::list<>.
2
Opis zadania
Należy napisać program, który umożliwi wyznaczenie konfiguracji (postury) manipulatora. Za-kładamy, że manipulator przedstawiony jest schematycznie w postaci łamanej (patrz rysunek poniżej). Każdy z segmentów łamanej ma symbolizować pojedynczy segment 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 q0, q1, q2, . . . między jego kolejnymi segmentami ramienia. Dla uprosz-czenia, postury manipulatora będą rozważane tylko w jednej płaszczyźnie X OY . Zakłada się, Rysunek 1: Szkielet manipulatora i zaznaczonymi kątami pozwalającymi sterowanie nachyle-niem poszczególnych segmentów manipulatora.
że ilość segmentów ramienia nie jest ograniczona (w uproszczonej wersji zadania – słabiej oce-nianej – można przyjąć, że liczba ta jest stała i wynosi 3). Ponadto przyjmuje się, że długość wszystkich segmentów jest jednakowa. Wartość parametru określającego długość 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
15.1
16.23
18.21
23.19
1
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, w którym on został 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 jed-nokrotnym 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>
plot ’manipulator.dat’
gnuplot>
plot ’manipulator.dat’
...
gnuplot>
plot ’manipulator.dat’
gnuplot>
exit
diablo@jkowalsk> _
2
Wersja podstawowa
W tej wersji proponuje się użycie zewnętrznego modułu lacze_do_gnuplota. Znajduje się on kartotece ˜bk/edu/po/zad/z-manipulator1/przyklad_2D wraz z przykładem jego wy-korzystania. 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.
jkowalsk@panamint: rozwiazanie> ./manipulator Aktualne wspolrzedne i parametry:
q0 =
105
Przegub_0: (0, 0)
q1 =
-70
Przegub_1: (-2.59, 9.66)
q2 =
-60
Przegub_2: (5.6, 15.4)
Efektor: (14.7, 11.2)
l = 10
Menu:
0 - Zmiana kata q0
1 - Zmiana kata q1
2 - Zmiana kata q2
z - zmiana ilosc segmentow
l - zmiana dlugosci segmentu
? - ponowne wyswietlenie menu
k - koniec programu
Twoj wybor?> 0
Wprowadz q0: 82
Aktualne wspolrzedne i parametry:
q0 =
82
Przegub_0: (0, 0)
q1 =
-70
Przegub_1: (1.39, 9.9)
q2 =
-60
Przegub_2: (11.2, 12)
Efektor: (17.9, 4.55)
l = 10
Menu:
0 - Zmiana kata q0
1 - Zmiana kata q1
2 - Zmiana kata q2
z - zmiana ilosc segmentow
l - zmiana dlugosci segmentu
? - ponowne wyswietlenie menu
k - koniec programu
3
Twoj wybor?> k
jkowalsk@panamint: rozwiazanie> _
6
Rozszerzenie (nieobowiązkowe)
W wersji rozszerzonej proponuje się dodatkowe elementy:
• Animację zmiany pozycji danego segmentu. Chodzi o zapewnienie płynnej zmiany pozycji segmentu (tak jak to jest zrealizowane w dostarczonym przykładzie).
• Skonstruowanie trójwymiarowego rysunku manipulatora. Można tego dokonać wykorzy-stując moduł lacze_do_gnuplota. Przykład jego użycia dla wersji 3D jest umieszczony w kartotece
˜bk/edu/po/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 kon-strukcja manipulatora jest w programie zaszyta na sztywno (bez możliwości zmiany ilości segmentów i ich długości). Przykład wizualizacji manipulatora znajduje się na zamiesz-Rysunek 2: Przykład wizualizacji manipulatora zrealizowany w ramach studenckich zajęć la-boratoryjnych
czonym 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 ta-kich układów współrzędnych. Dzięki temu i-ty przegub (oznaczony jako punkt Pi) w swoim lokalnym układzie współrzędnych XiOYi ma współrzędne Pi = (0, 0). Zastosowane oznacze-i
nie Pi odzwierciedla fakt, że są to współrzędne punktu P
i
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 glo-balnym XOOYO. W przedstawionym przykładzie można to zrealizować dokonując następują-
4
Rysunek 3: Lokalne układy współrzędnych związane z każdym z przegubów.
cych transformacji:
P0
= [0 0]T ,
0
P1
= R(q
+ T ),
0
0) · (P11
³
´
P2
= R(q
R(q
+ T ) + T ,
(1)
0
0) ·
1) · (P22
³
³
´
´
P3
= R(q
R(q
R(q
+ T ) + T + T .
0
0) ·
1) ·
2) · (P33
Współrzędne punktu we wzorze przedstawionym powyżej reprezentowane są jako macierz jed-nokolumnowa. Natomiast T to wektor translacji reprezentowany przez macierz jednokolum-nową [l 0]T , gdzie l jest długością segmentu. R(qi) jest macierzą rotacji w współczynnikach postaci:
· cos q
¸
R(q
i
− sin qi
i) =
(2)
sin qi
cos qi
Należy zauważyć, że wyliczanie współrzędnych przegubu np. P2 jest ciągiem transformacji do układów współrzędnych kolejnych przegubów reprezentowanych przez punkty P1 i P0. Po-dobnie dla P3 jest to ciąg transformacji do układów współrzędnych związanych z przegubami reprezentowanych przez punkty P2, P1 oraz P0. Tak więc wyliczenie współrzędnych przegubu P3 można byłoby rozpisać następująco:
P3
= R(q
+ T ),
2
2) · (P33
P3
= R(q
+ T ),
(3)
1
1) · (P32
P3
= R(q
+ T ).
0
0) · (P31
To spostrzeżenie należy 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/po/zad/z-manipulator1. W katalogu tym znajdują się następujące podkatalogi i pliki:
˜bk/edu/po/zad/z-manipulator1/.
bin.diablo/manipulator
bin.panamint/manipulator
przyklad_2D/Makefile
5
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
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ł skom-pilowany 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