Laboratorium 4 - pw-eiti-anro-20l/kuzmich_ostrysz GitHub Wiki

W katalogu roboczym zostal utworzony nowy pakiet o nazwie Interpolation ktory jest kontynuacja pakietu simple_kinematic. W pakiecie tym zostalo utworzonych 6 nowych plikow: jint.py, jcmd.py, jint.launch, oint.py, ocmd.py, oint.launch. Program zaimplementowny w tych plikach ma za zadanie interpolacje trajektori ruchu manipulatora jak i generowanie przez interpolacje pozycji pewnego ukladu w przestrzeni operacyjnej.

W pliku jint.py zostal napisany program przeliczajacy interpolacje dla manipulatora, w pliku zostalo napisanych piec funkcji:

  • handle_interpolation(data) - na poczatku funkcja wczytuje dane i sprawdza poprawnosc ruchu dla danych zakresow ruchu manipulatora, nastepnie przelicza interpolacje.
  • compute_int(start_j, last_j, time, current_time, i) - funkcja sprawdzajaca rodzaj interpolacji
  • compute_const(start_j, last_j, time, current_time) - funkcja przeliczajaca prosta interpolacje
  • compute_complex(start_j, last_j, time, current_time) - funkcja obliczajaca interpolcje zlozona
  • jointPublisher() - funkcja inicjuje wezly,a nastepnie publikuje informacje.

W pliku jcmd.py zostal napisany program ktory ma za zadanie obsluge zdalnie wywolywanej procedury z zadanymi polozeniami stawow i czasem trwania ruchu.

W pliku jint.launch zostal napisany program odpowiadajacy za uruchomienie trzech wezlow: robot_state_publisher, jint i RViz ktore komunituja sie za posrednictwem tematow: jointstate i tf. Schemat komunikacji miedzy wezlami opisany jest ponizszym grafem:

W pliku oint.py zostal napisany program ktory generuje, poprzez interpolację, pozycje pewnego układu w przestrzeni operacyjnej, w pliku zostalo napisanych piec funkcji:

  • handleInterpolation(data) - funkcja na poczatku sprawdza czy czas potrzebny na wykonanie ruchu jest poprawny, nastepnie zapisuje dane o ukladzie i przelicza interpolacje.
  • interpolation(start, last, time, current_time, style) - funkcja sprawdzajaca rodzaj interpolacji
  • simpleInterpolation(start, last, time, current_time) - funkcja przeliczajaca prosta interpolacje
  • complexInterpolation(start, last, time, current_time) - funkcja obliczajaca interpolcje zlozona
  • transformationPublisher() - funkcja inicjuje wezly,a nastepnie publikuje informacje.

W pliku ocmd.py zostal napisany program ktory ma za zadanie obsluge zdalnie wywolywanej procedury z zadanymi polozeniami, obrotem ukadu i czasem trwania ruchu.

W pliku oint.launch zostal napisany program odpowiadajacy za uruchomienie dwoch wezlow: oint i RViz ktore komunituja sie za posrednictwem tematu posestamped. Schemat komunikacji miedzy wezlami opisany jest ponizszym grafem:

W celu uruchomienia programu nalezy:

  • przejsc do katalogu roboczego uzywajac w terminalu komend "source /opt/ros/melodic/setup.bash" i " cd ~/catkin_ws/"
  • pobrac repozytorium wywolujac polecenie "wstool update"
  • w katalogu roboczym uzyc komend "source sevel/setup.bash" i **"roscd Interpolation" uruchomic plik jint.launch lub oint.launch poleceniem "roslaunch Interpolation jint.launch" lub "roslaunch Interpolation oint.launch"
  • w programie RViz przejść do menu File i wybrać opcję Open Config wybrac plik poseconfig.rviz lub robotconfig.rviz
  • w nowej konsoli uruchomic plik jcmd.py lub ocmd.py z zadanymi parametrami ruchu poleceniem "rosrun Interpolation jcmd.py j1 j2 j3 time i" lub "rosrun Interpolation ocmd.py x y z qx qy qz time style" do wybrania typu interpolacji nalezy w pole "i" lub "style" wpisac "complex" dla interpolacji zlozonej lub "const" dla interpolacji prostej.