Spisu treści:
- Krok 1: Dodawanie chwytaka
- Krok 2: Budowanie ramienia
- Krok 3: Interfejs MoveIt RobotCommander
- Krok 4: Kod Arduino dla kontrolera robota
- Krok 5: (Opcjonalnie) Generowanie wtyczki IKfast
- Krok 6: Test rampy
Wideo: Ramię robota ROS MoveIt, część 2: Kontroler robota: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
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
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
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
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
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
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:
Ramię robota z modułami Zio, część 2: 11 kroków
Ramię robota z modułami Zio Część 2: W dzisiejszym samouczku wykorzystamy wszystkie 4 serwomechanizmy i kontroler bezprzewodowy PS2 do sterowania ramieniem robota. Ten wpis na blogu jest częścią serii Zio Robotics. samouczek, jak sterować robotem
Kontroluj ramię robota za pomocą modułów Zio, część 1: 8 kroków
Sterowanie ramieniem robota za pomocą modułów Zio Część 1: Ten wpis na blogu jest częścią serii Zio Robotics.WprowadzenieW tym samouczku zbudujemy projekt, w którym użyjemy modułów Zio do sterowania ramieniem robota. Ten projekt nauczy Cię, jak otwierać i zamykać pazur ramienia robota. To n
Ramię robota ROS MoveIt: 4 kroki
Ramię robota ROS MoveIt: Będzie to seria artykułów na temat tworzenia ramienia robota kontrolowanego za pomocą ROS (Robotic Operating System) i MoveIt. Jeśli interesujesz się robotyką, ROS to świetny framework, który pomoże Ci szybciej budować lepsze roboty. Pozwala na ponowne wykorzystanie
JAK ZŁOŻYĆ IMPONUJĄCE DREWNIANE RAMIĘ ROBOTA (CZĘŚĆ 3: RAMIĘ ROBOTA) -- W OPARCIU O MIKRO: WĘDZIK: 8 kroków
JAK ZŁOŻYĆ IMPONUJĄCE DREWNIANE RAMIĘ ROBOTA (CZĘŚĆ 3: RAMIĘ ROBOTA) -- W OPARCIU O MIKRO: BITN: Kolejny proces instalacji opiera się na zakończeniu trybu omijania przeszkód. Proces instalacji w poprzedniej sekcji jest taki sam, jak proces instalacji w trybie śledzenia linii. Następnie spójrzmy na ostateczną formę A
Jak złożyć imponujące drewniane ramię robota (Część 1: Robot do śledzenia linii) - na podstawie Micro: Bit: 9 kroków
Jak złożyć imponujące drewniane ramię robota (Część 1: Robot do śledzenia linii) -- W oparciu o Micro: Bit: Ten drewniany facet ma trzy formy, jest bardzo inny i imponujący. Więc wejdźmy w to jeden po drugim