Spisu treści:

Ramię robota ROS MoveIt, część 2: Kontroler robota: 6 kroków
Ramię robota ROS MoveIt, część 2: Kontroler robota: 6 kroków

Wideo: Ramię robota ROS MoveIt, część 2: Kontroler robota: 6 kroków

Wideo: Ramię robota ROS MoveIt, część 2: Kontroler robota: 6 kroków
Wideo: Quick start and software options for the Kawasaki Robotics Astorino robot -training for beginners #2 2024, Listopad
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

W poprzedniej części artykułu stworzyliśmy pliki URDF i XACRO dla naszego ramienia robota i uruchomiliśmy RVIZ, aby sterować naszym ramieniem robota w symulowanym środowisku.

Tym razem zrobimy to prawdziwym ramieniem robota! Dodamy chwytak, napiszemy sterownik robota i (opcjonalnie) wygenerujemy solwer kinematyki odwrotnej IKfast.

Geronimo!

Krok 1: Dodawanie chwytaka

Dodawanie chwytaka
Dodawanie chwytaka
Dodawanie chwytaka
Dodawanie chwytaka
Dodawanie chwytaka
Dodawanie chwytaka

Dodanie chwytaka było początkowo trochę mylące, więc pominąłem tę część w poprzednim artykule. Okazało się jednak, że nie jest to takie trudne.

Będziesz musiał zmodyfikować plik URDF, aby dodać połączenia i połączenia chwytaków.

Zmodyfikowany plik URDF dla mojego robota jest dołączony do tego kroku. Zasadniczo działa zgodnie z tą samą logiką, co część ramienia, właśnie dodałem trzy nowe łącza (claw_base, claw_r i claw_l) i trzy nowe przeguby (joint5 jest stałe, a joint6, joint7 to przeguby obrotowe).

Po zmodyfikowaniu pliku URDF musisz również zaktualizować pakiet wygenerowany przez MoveIt i plik xacro za pomocą asystenta konfiguracji MoveIt.

Uruchom asystenta konfiguracji za pomocą następującego polecenia

roslaunch moveit_setup_assistant setup_assistant.launch

Kliknij Edytuj istniejącą konfigurację MoveIt i wybierz folder z pakietem MoveIt.

Dodaj nowy chwytak grupy planowania (z łącznikami i złączami dla chwytaka), a także efektor końcowy. Moje ustawienia znajdują się na poniższych zrzutach ekranu. Zauważ, że nie wybierasz solwera kinematyki dla chwytaka, nie jest to konieczne. Wygeneruj pakiet i nadpisz pliki.

Biegać

kotka zrobić

polecenie w swoim obszarze roboczym kotka.

W porządku, teraz mamy ramię z chwytakiem!

Krok 2: Budowanie ramienia

Budowanie ramienia
Budowanie ramienia
Budowanie ramienia
Budowanie ramienia
Budowanie ramienia
Budowanie ramienia
Budowanie ramienia
Budowanie ramienia

Jak już wspomniałem model 3D ramienia wykonany jest przez firmę Juergenlessner, dziękuję za niesamowitą pracę. Szczegółowe instrukcje montażu można znaleźć, klikając link.

Musiałem jednak zmodyfikować system sterowania. Do sterowania serwami używam Arduino Uno z nakładką Sensor. Osłona czujnika bardzo pomaga w uproszczeniu okablowania, a także ułatwia dostarczanie zewnętrznego zasilania do serw. Używam zasilacza 12V 6A podłączonego przez moduł obniżający (6V) do osłony czujnika.

Uwaga na temat serwomechanizmów. Używam serw MG 996 HR kupionych w Taobao, ale jakość jest naprawdę zła. To zdecydowanie tania chińska podróbka. Ten dla stawu łokciowego nie zapewniał wystarczającego momentu obrotowego, a nawet zaczął dymić pod dużym obciążeniem. Musiałem wymienić serwomechanizm przegubu łokciowego na MG 946 HR od producenta lepszej jakości.

Krótko mówiąc - kup wysokiej jakości serwa. Jeśli magiczny dym wydobywa się z twoich serwomechanizmów, użyj lepszych serwomechanizmów. 6V to bardzo bezpieczne napięcie, nie należy go zwiększać. Nie zwiększy momentu obrotowego, ale może uszkodzić serwa.

Okablowanie serw w następujący sposób:

podstawa 2

ramię2 4ramię1 3

łokieć 6

chwytak 8

nadgarstek 11

Możesz to zmienić, o ile pamiętasz również o zmianie szkicu Arduino.

Gdy skończysz ze sprzętem, spójrzmy na większy obraz!

Krok 3: Interfejs MoveIt RobotCommander

Interfejs MoveIt RobotCommander
Interfejs MoveIt RobotCommander

I co teraz? Dlaczego w ogóle potrzebujesz MoveIt i ROS? Czy nie możesz po prostu sterować ramieniem bezpośrednio za pomocą kodu Arduino?

Tak, możesz.

Ok, a teraz co powiesz na użycie GUI lub kodu Python/C++, aby zapewnić pozę robota, do której można się udać? Czy Arduino może to zrobić?

Raczej. W tym celu będziesz musiał napisać solwer kinematyki odwrotnej, który przyjmie pozę robota (współrzędne translacji i obrotu w przestrzeni 3D) i przekonwertuje ją na komunikaty o kącie połączenia dla serw.

Pomimo tego, że możesz to zrobić sam, jest to cholernie dużo pracy. Tak więc MoveIt i ROS zapewniają ładny interfejs dla solvera IK (odwrotnej kinematyki), aby wykonać za Ciebie wszystkie ciężkie operacje trygonometryczne.

Krótka odpowiedź: Tak, możesz zrobić proste ramię robota, które wykona zakodowany szkic Arduino, aby przejść z jednej pozy do drugiej. Ale jeśli chcesz uczynić swojego robota bardziej inteligentnym i dodać możliwości widzenia komputerowego, MoveIt i ROS są najlepszym rozwiązaniem.

Zrobiłem bardzo uproszczony diagram wyjaśniający jak działa framework MoveIt. W naszym przypadku będzie to jeszcze prostsze, ponieważ nie mamy informacji zwrotnych od naszych serwomechanizmów i zamierzamy użyć tematu /joint_states, aby dostarczyć sterownikowi robota kątów dla serwomechanizmów. Brakuje nam tylko jednego komponentu, jakim jest sterownik robota.

Na co czekamy? Napiszmy kilka kontrolerów robotów, aby nasz robot był… wiesz, bardziej sterowalny.

Krok 4: Kod Arduino dla kontrolera robota

Kod Arduino dla kontrolera robota
Kod Arduino dla kontrolera robota
Kod Arduino dla kontrolera robota
Kod Arduino dla kontrolera robota
Kod Arduino dla kontrolera robota
Kod Arduino dla kontrolera robota

W naszym przypadku kontrolerem robota będzie Arduino Uno z węzłem ROS z rosserialem. Kod szkicu Arduino jest dołączony do tego kroku, a także dostępny na GitHub.

Węzeł ROS działający na Arduino Uno zasadniczo subskrybuje temat /JointState opublikowany na komputerze z uruchomionym MoveIt, a następnie konwertuje kąty połączeń z tablicy z radianów na stopnie i przekazuje je do serw przy użyciu standardowej biblioteki Servo.h.

To rozwiązanie jest trochę hacki, a nie jak to się robi z robotami przemysłowymi. Najlepiej byłoby opublikować trajektorię ruchu w temacie /FollowJointState, a następnie otrzymać informację zwrotną w temacie /JointState. Ale w naszym ramieniu serwa hobby nie mogą dostarczyć informacji zwrotnej, więc po prostu bezpośrednio zasubskrybujmy temat /JointState, opublikowany przez węzeł FakeRobotController. Zasadniczo założymy, że wszelkie kąty, które przekazaliśmy serwom, są wykonane idealnie.

Aby uzyskać więcej informacji o tym, jak działa rosserial, zapoznaj się z poniższymi samouczkami

wiki.ros.org/rosserial_arduino/Poradniki

Po przesłaniu szkicu do Arduino Uno, musisz podłączyć go kablem szeregowym do komputera, na którym działa Twoja instalacja ROS.

Aby wywołać cały system, wykonaj następujące polecenia:

roslaunch my_arm_xacro demo.launch rviz_tutorial:=true

sudo chmod -R 777 /dev/ttyUSB0

rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0 _baud:=115200

Teraz możesz użyć interaktywnych znaczników w RVIZ, aby przesunąć ramię robota do pozycji, a następnie nacisnąć Plan i Wykonaj, aby faktycznie przemieściło się do pozycji.

Magia!

Teraz jesteśmy gotowi do napisania kodu w Pythonie dla naszego testu rampy. Cóż prawie…

Krok 5: (Opcjonalnie) Generowanie wtyczki IKfast

Domyślnie MoveIt sugeruje użycie solwera kinematyki KDL, który tak naprawdę nie działa z mniej niż 6 ramionami DOF. Jeśli będziesz uważnie śledzić ten samouczek, zauważysz, że model ramienia w RVIZ nie może przejść do niektórych pozycji, które powinny być wspierane przez konfigurację ramienia.

Zalecanym rozwiązaniem jest stworzenie własnego solvera kinematyki przy użyciu OpenRave. Nie jest to takie trudne, ale będziesz musiał go zbudować i jego zależności ze źródła lub użyć kontenera docker, jak wolisz.

Procedura jest bardzo dobrze udokumentowana w tym samouczku. Potwierdzono, że działa na maszynie wirtualnej z systemem Ubuntu 16.04 i ROS Kinetic.

Użyłem następującego polecenia do wygenerowania solvera

openrave.py --database inversekinematics --robot=arm.xml --iktype=translation3d --iktests=1000

a potem pobiegł

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp

do wygenerowania wtyczki MoveIt IKfast.

Cała procedura jest trochę czasochłonna, ale nie bardzo trudna, jeśli uważnie śledzisz samouczek. W razie pytań dotyczących tej części proszę o kontakt w komentarzach lub na PW.

Krok 6: Test rampy

Test rampy!
Test rampy!
Test rampy!
Test rampy!

Teraz jesteśmy gotowi do wypróbowania testu rampy, który wykonamy za pomocą ROS MoveIt Python API.

Kod Pythona jest dołączony do tego kroku, a także dostępny w repozytorium github. Jeśli nie masz rampy lub chcesz spróbować innego testu, będziesz musiał zmienić pozy robota w kodzie. Za to pierwsze wykonanie

echo rostopowe /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/opinia

w terminalu, gdy już działa RVIZ i MoveIt. Następnie przesuń robota z interaktywnymi znacznikami do żądanej pozycji. W terminalu zostaną wyświetlone wartości pozycji i orientacji. Po prostu skopiuj je do kodu Pythona.

Aby wykonać test rampowy

rosrun my_arm_xacro pick/pick_2.py

z RVIZ i węzłem rosserial już działa.

Czekajcie na trzecią część artykułu, w której użyję kamery stereo do wykrywania obiektów i wykonam potoki typu pick and place dla prostych obiektów!

Zalecana: