*Autor: Wojciech Domski* *Markdown flavoured text. Use any Markdown editor to get preview.* # Manipulator 2D. ## Przydatne informacje. Wraz z wczytywaniem dowolnej liczby konfiguracji postur manipulatora należy uporać się z zmienną liczbą parametrów. Aby dowiedzieć się z iloma parametrami został wywołany program należy odpowiednio zdefiniować funkcję main(). ``` int main(int argc, char *argv[]) { //... return 0; } ``` Parametr argc zawiera liczbę parametrów z jakimi został uruchomiony program. Przykładowo: ``` ./program ala ma kota argv[0] = "program" //nazwa pierwszego parametru, czyli nazwa programu argv[1] = "ala" //pierwszy parametrami itd. ``` Do przechowywania kolejnych parametrów (długości przegubów rotacyjnych, czy też kątów) należy wykorzystać wektory, bądź listy. ## Wektory: Szablon, który umożliwia nam przechowywanie dowolnego typu danych w wygodny sposób. ``` //kod poglądowy #include #include #include int main () { std::vector v; v.push_back(1.0); v.push_back(2.0); v.push_back(3.0); v.pop_back();//zdejmij i usuń ostatni element v[0]; //weź pierwszy element wektora for (std::vector::iterator it = v.begin() ; it != v.end(); ++it) { std::cout << *it << std::endl; } return 0; } ``` ## Lista: Szablon, który w odróżnieniu od wektora można modyfikować zarówno na początku jak i na końcu. metody: * push_back(); * push_front(); * pop_back(); * pop_front(); ## Wyliczanie punktów pozycji przegubów manipulatora: Program może bazować na wcześniejszych aplikacjach, takich jak Rotacja 3D. Wówczas wykorzystując dwie operacjie: * rotacja wokół osi Z, * translacja wzdłuż osi X, można z powodzeniem zrealizować manipulator 2D. Rozważmy przypadek, w którym mamy do czynienia z manipulatorem o jednym ogniwie. Jego konfiguracja jest zapisana w q1, a długość ogniwa to 1m. Aby obliczyć współrzedne punktu końcowego należy wykonać następujące operacjie: ``` p' = Rz(q1) Tx(l1) p ``` Postępując w analogiczny sposób możemy zrealizować kinematykę manipulatora 2D dla 1 lub większej liczby przegubów. To jest, aby obliczyć położenie końca efektora należy: ``` p2 = Rz(q2) Tx(l2) Rz(q1) Tx(l1) p ``` Warto zauważyć pewną zależność, która się powtarza, to jest: ``` ... = Rz(q) Tx(l) ... ``` ## Realizacja programu (zalecenia): Opis (długości) ogniw manipulatora powinien być zawarty w klasie manipulator. Można tam również przechowywać konfiguracje oraz punkty, gdzie znajdują się kolejne końce ogniw. Powinna istnieć klasa konfiguracje, która pozwala na przechowywanie kolejnych konfiguracji manipulatora. ## Dodatkowe propozycje rozszerzeń: 1. Animacja manipulatora z poziomu menu, gdzie zadawane są kąty dla poszczególnych przegubów . 2. Animacja manipulatora na podstawie wczytanego pliku tekstowego, który składa się z n wierszy, gdzie każdy posiada dwie liczby. Pierwsza to numer przegubu, druga to zadany kąt. Program powinien wczytać plik, a następnie zadbać o odpowiednią animację na podstawie wczytanych danych.