Lab3 - pw-eiti-anro-20l/kruk_wojcik GitHub Wiki
Cel projektu
Zadanie polegało na rozwinięciu projektu nr. 2. Należało dodać dwa węzły, które rozwiązuja proste zagadnienie kinematyki manipulatora. Jeden węzeł rozwiązuje zagadnienie przy użyciu KDL a drugi bez używania KDL. Należało również uwzględnić ograniczenia ruchów co do zakresu ruchu stawów.
Uruchomienie projektu
W celu uruchomienia projektu należy wykonać poniższe komendy:
- sudo -s
- source devel/setup.bash (będąc jednocześnie w katalogu głównym projektu)*
- W katalogu lab3/scripts wykonać: chmod +x nonkdl_dkin.py kdl_dkin.py
- W katalogu głównym wykonać: roslaunch lab3 main.launch
- Otworzyć nowy terminal (może być nowa zakładka) wykonać ponownie polecenia 1 oraz 2 a następnie: roslaunch lab3 kinematic.launch
- Uruchamia się rviz w którym pojawia się robot z możliwością poruszania stawami.
*Komenda zależna jest od używanej powłoki np. dla zsh należy użyć source devel/setup.zsh
Pliki źródłowe
- config/urdf_params.yaml - plik zawierający przeliczone paramatry DH na reprezentacje przystosowaną do URDF.
- launch/main.launch - launch, uruchamiający rviz
- launch/kinematic.launch - launch służący do uruchomienia w rviz węzłów odpowiadających za rozwiązywanie prostej kinematyki
- rviz/config.rviz - zawiera ustawienia startowe rviz
- urdf/robot2.xacro - opisuje strukturę oraz wygląd badanego robota w rviz.
- scripts/kdl_dkin.py - skrypt rozwiązujący proste zagadnienie kinematyki robota przy użyciu KDL
- scirpts/nonkdl_dkin.py - skrypt rozwiązujący proste zagadanie kinematyki robota bez użycia KDL
Ograniczenia ruchu stawów
Ograniczenia ruchu stawów zaimplementowane zostały tylko dla wersji bez użycia KDL. Używając ograniczeń takich samych jak tych zdefiniowanych w pliku urdf, nie zanotowano żadnych różnic w zachowaniu robota, jednakże po zmienieniu wartości ograniczeń na takie znajdujące się wewnątrz przedziały zdefiniowanego w plikach urdf, zauważono zmiany w zachowaniu robota podczas poruszania. W badanym przypadku zmieniono ograniczenia pierwszego stawu na zakres [-0.3 0]. Podczas żądania aby robot znalazł się w położeniu innym niż zdefiniowany otrzymujemy wynik przedstawiony na poniższych rysunkach.
\
Testy
Pierwszym przeprowadzonym testem było sprawdzenie poprawności komunikacji między węzłami. Sprawdzono to posługując się komendą "rqt_graph", która wizualizuje komunikację między wezłami. Otrzymany wynik zgadza się z pokazanym w zadaniu. Wynik przedstawiony jest na rysunku poniżej. \
Jednakże na rysunku nie widać komunikacji /nonkdl_dkin_msgs oraz /kdl_dkin_msgs z rviz, które w rzeczywistości istnieją, dlatego też załączono jeszcze jeden rysunek przedstawiający większy zakres komunikacji w projekcie.
\
Następne przeprowadzone testy polegału na testowaniu robota manualnie. Zmieniano położenia stawów i sprawdzano czy otrzymane wyniki są zgodnie z założeniami. Przykładowe położenia robota pokazane są poniżej.
\
Zauważyć można że oba wyniki prostej kinematyki są identyczne dla obu węzłów (kdl i nonkdl). Jest to efekt zamierzony i oznacza poprawność wykonania zadania.
Przetestowano projekt używająć też rqt_plot i sprawdzająć czy otrzymane wykresy się pokrywają, tzn. oczekiwane położenie wygenerowane przez non_kdl i przez kdl jest identyczne. Otrzymano wyniki zadowalające, ponieważ wszystkie wykresy były zgodne. Dla poszczególnych wartości położenia tj. x, y, z, wykresy przedstawione są poniżej.
\