Skip to content

Laboratorium drugie

jkaniuka edited this page Apr 15, 2021 · 13 revisions

Modelowanie i wizualizacja manipulatora 🤖

Zakres laboratorium: ✏️

  • stworzenie programu przeliczającego parametry Denavita-Hartenberga na reprezentacje rotacji adekwatną dla URDF (RPY lub kwaternion)
  • stworzenie pliku URDF o zadanych parametrach w notacji DH w dwóch wersjach: z zablokowanymi oraz z ruchomymi stawami
  • wizualizacja obydwu wersji w programie RViz2

Tablica parametrów DH 📄

Nasz manipulator opisywany jest zgodnie z notacją DH przez 4 parametry. Tabela DH prezentuje się następująco: (dla ustalenia uwagi przyjęto, że układ zerowy ma oś z położoną w płaszczyźnie poziomej i oś x skierowaną w dół)
image

Po naszkicowaniu robota i odpowiednim zorientowaniu poszczególnych układów współrzędnych okazało się, że jest to manipulator kartezjański. Wstępnie utworzony plik URDF pozwolił na wizualizację robota:

1) Widok struktury manipulatora z programu RViz2

image

2) Układy współrzędnych związane z kolejnymi złączami manipulatora

image

W celu uproszczenia opisu pracy nad tym robotem postanowiliśmy go nazwać 😃 . Manipulator kartezjański w języku angielskim to cartesian manipulator - nadaliśmy mu lekko spolszczoną nazwę KARTMAN.

Konwerter DH <-> RPY ↔️ :

Opis plików:

  • convert_dh.py - program wczytuję tablicę DH z pliku w formacie .json, następnie tworzy stosowne macierze przekształcenia jednorodnego. Na podstawie macierzy wynikowej powstałej z wymnożenia czterech macierzy (Trans_z , Rot_z, Trans_x, Rot_x) wylicza zestaw kątów RPY oraz wzajemnych położeń złącz. Program korzysta z dedykowanej biblioteki PyKDL (Kinematics and Dynamics Library)
  • Tablica_MD-H.json - plik z tabelą DH w formacie .json
  • urdf_wartosci.yaml - plik zwracany przez convert_dh.py z wyliczonymi położeniami i orientacjami układów współrzędnych związanych ze złączami manipulatora

URDF 💻:

Plik kartman.urdf.xacro.xml zawiera opis manipulatora w URDF. Robota umieszczamy na podstawie, która unosi go ponad poziom ziemi. Do ostatniego członu dołączamy narzędzie 🔨(tool) bez wewnętrznych stopni swobody. Parametry (między innymi długości członów) wczytujemy z serwera parametrów poprzez dodanie wskazania na plik urdf_wartosci.yaml na początku opisu robota w pliku kartman.urdf.xacro.xml.

Stawy zablokowane ⛔:

W pierwszym podejściu ustawiamy typ wszystkich stawów manipulatora na "fixed". Następnie tworzymy plik launch, który uruchamia węzeł robot_state_publisher oraz wizualizator RViz2.

Schemat i opis struktury systemu wraz z użytymi mechanizmami komunikacji:

Węzeł robot state publisher publikuje na temacie tf informację o stanie robota (położeniach i orientacjach jego poszczególnych elementów). Po uruchomieniu wizualizacji w RViz2 mamy możliwość wyboru tematu - temat /robot_description pośredniczy w nawiązaniu połączenia z wizualizatorem i dzięki temu możemy zobaczyć strukturę manipulatora oraz ułożenie układów współrzędnych związanych ze stawami (tf).

image

Stawy ruchome ✔️:

Plik kartman_move.urdf.xacro.xml opisuje robota z ruchomymi połączeniami między członami. Ponieważ Kartman ma przeguby przesuwne (translacyjne), pierwsze trzy złącza są typu "prismatic", a złącze ostatnie pozostaje nieruchome ("fixed"), gdyż narzędzie nie ma wewnętrznych stopni swobody.

Struktura mechanizmu komunikacji:

image

W tym wypadku tworzymy dwa pliki launch. Pierwszy uruchamia RViz2 oraz węzeł robot_state_publisher, a drugi - węzeł joint_state_publisher_gui. Joint_state_publisher_gui generuje wartości złączowe (w naszym przypadku przesunięcia) i publikuje je na temacie /joint_states. Uściślając, joint_state_publisher_gui jest narzędziem do "debuggowania" struktury robota na etapie, gdy nie posiadamy jeszcze np. programu do sterowania położeniem manipulatora (będzie to temat kolejnego zadania). GUI pozwala nam na ustawianie wartości złączowych przy pomocy suwaków, dzięki czemu możemy sprawdzić np. poprawność limitów przesunięć w złączach.

Uruchomienie 🚀 :

  1. Przed uruchomieniem należy zainstalować niezbędne pakiety (komendy poniżej):
    sudo apt install ros-foxy-xacro
    sudo apt install ros-foxy-joint-state-publisher
    sudo apt install ros-foxy-joint-state-publisher-gui
  2. W przestrzeni roboczej budujemy pakiet komendą: colcon build --symlink-install --packages-select lab2_manipulator
  3. Wskazujemy w konsoli na pliki żródłowe: source install/setup.bash
  4. [Zblokowane stawy]
  • Uruchamiamy plik launch: ros2 launch lab2_manipulator demo.launch.py
  1. [Ruchome stawy]
  • W pierwszej konsoli : ros2 launch lab2_manipulator demo2.launch.py
  • w drugiej konsoli ros2 launch lab2_manipulator demo3.launch.py (w drugiej konsoli również należy wskazać ścieżkę do plików źródłowych)

Wyniki testów 📊 :

Testy sprawdzające poprawność działania systemu przeprowadziliśmy wykorzystując narzędzie rqt_plot:

image
image