Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
github.com/AIWintermuteAI/ros-moveit-arm.git
V prejšnjem delu članka smo ustvarili datoteke URDF in XACRO za našo robotsko roko in uvedli RVIZ za nadzor naše robotske roke v simuliranem okolju.
Tokrat bomo to storili s pravo robotsko roko! Dodali bomo prijemalo, napisali krmilnik robota in (neobvezno) ustvarili IKfast inverzno kinematiko.
Geronimo!
1. korak: Dodajanje prijemala
Dodajanje prijemala je bilo sprva nekoliko zmedeno, zato sem ta del v prejšnjem članku preskočil. Konec koncev se je izkazalo, da ni tako težko.
Datoteko URDF boste morali spremeniti, da dodate povezave in spoje prijemal.
Spremenjena datoteka URDF za mojega robota je priložena temu koraku. V bistvu sledi isti logiki kot del roke, pravkar sem dodal tri nove povezave (claw_base, claw_r in claw_l) in tri nove sklepe (joint5 je pritrjen, joint6, joint7 pa revolucionarni spoji).
Ko ste spremenili datoteko URDF, boste morali s pomočjo pomočnika za nastavitev MoveIt posodobiti tudi paket, ustvarjen s programom MoveIt, in datoteko xacro.
Zaženite pomočnika za nastavitev z naslednjim ukazom
roslaunch moveit_setup_assistant setup_assistant.launch
Kliknite Urejanje obstoječe konfiguracije MoveIt in izberite mapo s paketom MoveIt.
Dodajte nov prijemal za načrtovanje (s členi in spoji za prijemalo) in tudi končni efektor. Moje nastavitve so na spodnjih posnetkih zaslona. Upoštevajte, da za prijemalko ne izberete kinematičnega reševalca, to ni potrebno. Ustvarite paket in prepišite datoteke.
Teči
mačja znamka
ukaz v delovnem prostoru catkin.
V redu, zdaj imamo roko z prijemalom!
2. korak: Izdelava roke
Kot sem že omenil, je 3D model roke izdelal Juergenlessner, hvala za neverjetno delo. Podrobna navodila za montažo najdete, če sledite povezavi.
Vseeno sem moral spremeniti nadzorni sistem. Za krmiljenje servomotorjev uporabljam Arduino Uno s senzorskim ščitom. Senzorski ščit veliko pomaga pri poenostavitvi ožičenja in olajša tudi zunanje napajanje servomotorjev. Uporabljam napajalni adapter 12V 6A, ki je prek padajočega modula (6V) priključen na ščit senzorja.
Opomba o servomotorjih. Uporabljam servomotorje MG 996 HR, kupljene pri Taobao, vendar je kakovost res slaba. Vsekakor je to poceni kitajski udarec. Tista za komolčni sklep ni zagotovila dovolj navora in se je celo začela kaditi pod veliko obremenitvijo. Servo komolca sem moral zamenjati z MG 946 HR bolj kakovostnega proizvajalca.
Na kratko - kupite kakovostne servomotorje. Če iz vaših servomotorjev prihaja čarobni dim, uporabite boljše servomotorje. 6V je zelo varna napetost, ne povečujte je. Ne poveča navora, lahko pa poškoduje servomotorje.
Ožičenje za servomotorje:
osnova 2
ramena2 4 ramena1 3
komolec 6
prijemala 8
zapestje 11
Spremenite ga, dokler se ne pozabite spremeniti tudi skice Arduino.
Ko končate s strojno opremo, poglejmo širšo sliko!
Korak: Premaknite vmesnik RobotCommander
Torej, kaj zdaj? Zakaj sploh potrebujete MoveIt in ROS? Ali ne morete preprosto upravljati roke neposredno prek kode Arduino?
Ja lahko.
V redu, kako bi bilo potem z uporabo grafičnega vmesnika ali kode Python/C ++ zagotoviti pozo robota? Ali lahko Arduino to stori?
Nekako. Za to boste morali napisati obratno kinematiko, ki bo zavzela pozo robota (koordinate prevajanja in vrtenja v 3D prostoru) in jo pretvorila v sporočila o skupnem kotu za servomotorje.
Kljub temu, da to lahko storite sami, je za vas zelo veliko dela. Torej, MoveIt in ROS ponujata lep vmesnik za IK (inverzno kinematiko) reševalca, ki za vas opravi vsa težka trigonometrična dviganja.
Kratek odgovor: Da, lahko naredite preprosto robotsko roko, ki bo izvedla trdo kodirano skico Arduino za prehod iz ene poza v drugo. Če pa želite narediti svojega robota bolj inteligentnega in dodati zmogljivosti računalniškega vida, sta MoveIt in ROS prava pot.
Naredil sem zelo poenostavljen diagram, ki pojasnjuje, kako deluje okvir MoveIt. V našem primeru bo to še enostavneje, saj nimamo povratnih informacij od naših servomotorjev in bomo uporabili temo /joint_states za zagotavljanje robotskemu krmilniku kotov za servomotorje. Manjka nam le ena komponenta, to je krmilnik robota.
Kaj čakamo? Napišemo nekaj krmilnikov robotov, zato bi bil naš robot … veste, bolj obvladljiv.
4. korak: Arduino koda za krmilnik robotov
V našem primeru bo krmilnik robota Arduino Uno z vozliščem ROS z rosserial. Koda skice Arduino je priložena temu koraku in je na voljo tudi na GitHubu.
Vozlišče ROS, ki deluje na Arduino Uno, se v bistvu naroči na temo /JointState, objavljeno v računalniku z operacijskim sistemom MoveIt, nato pa skupne kote iz matrike pretvori v radiane v stopinje in jih s standardno knjižnico Servo.h posreduje v servomotorje.
Ta rešitev je nekoliko hecna in ne tako, kot se to počne z industrijskimi roboti. V idealnem primeru bi morali objaviti pot gibanja na temi /FollowJointState in nato prejeti povratne informacije o temi /JointState. Toda v naših rokah servomotorji za hobije ne morejo zagotoviti povratnih informacij, zato se bomo neposredno naročili na temo /JointState, ki jo je objavilo vozlišče FakeRobotController. V bistvu bomo domnevali, da so vsi koti, ki smo jih prenesli na servomotorje, izvedeni idealno.
Za več informacij o tem, kako deluje rosserial, si oglejte naslednje vaje
wiki.ros.org/rosserial_arduino/Tutorials
Ko naložite skico v Arduino Uno, jo morate s serijskim kablom povezati z računalnikom, na katerem je nameščena ROS.
Če želite prikazati celoten sistem, izvedite naslednje ukaze
roslaunch my_arm_xacro demo.launch rviz_tutorial: = res
sudo chmod -R 777 /dev /ttyUSB0
rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200
Zdaj lahko z interaktivnimi označevalci v RVIZ premaknete robotsko roko v položaj in nato pritisnete Načrtuj in Izvedi, da se dejansko premakne v položaj.
Magija!
Zdaj smo pripravljeni napisati kodo Python za naš test rampe. No, skoraj…
5. korak: (neobvezno) Ustvarjanje vtičnika IKfast
MoveIt privzeto predlaga uporabo kinematičnega reševalca KDL, ki v resnici ne deluje z manj kot 6 kraki DOF. Če natančno spremljate to vadbo, boste opazili, da model roke v RVIZ -u ne more iti v nekatere položaje, ki bi jih morala podpirati konfiguracija roke.
Priporočena rešitev je ustvarjanje kinematičnega reševalca po meri z uporabo OpenRave. To ni tako težko, vendar ga boste morali zgraditi in njegove odvisnosti so od vira ali pa uporabite vsebnik dockerja, kar vam je ljubše.
Postopek je v tej vadnici zelo dobro dokumentiran. Potrjeno je, da deluje na VM z Ubuntu 16.04 in ROS Kinetic.
Za ustvarjanje reševalca sem uporabil naslednji ukaz
openrave.py -inverzna kinematika baze podatkov --robot = arm.xml --iktype = translation3d --iktests = 1000
in potem stekel
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Prevod3D.0_1_2_f3.cpp
za ustvarjanje vtičnika MoveIt IKfast.
Celoten postopek je zamuden, vendar ne zelo težak, če natančno sledite vadnici. Če imate vprašanja o tem delu, me kontaktirajte v komentarjih ali na PM.
6. korak: Ramp Test
Zdaj smo pripravljeni preizkusiti ramp test, ki ga bomo izvedli s pomočjo API -ja ROS MoveIt Python.
Koda Python je priložena temu koraku in je na voljo tudi v skladišču github. Če nimate rampe ali želite poskusiti z drugim testom, boste morali spremeniti poze robota v kodi. Za to najprej izvedite
rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
v terminalu, ko že izvajate RVIZ in MoveIt. Nato premaknite robota z interaktivnimi označevalci v želeni položaj. V terminalu bodo prikazane vrednosti položaja in orientacije. Samo kopirajte jih v kodo Python.
Za izvedbo poskusnega zagona rampe
rosrun my_arm_xacro pick/pick_2.py
z RVIZ in vozliščem rosserial, ki se že izvaja.
Ostanite z nami v tretjem delu članka, kjer bom uporabil stereo kamero za odkrivanje predmetov in izvedel cevovod izbire in namestitve za preproste predmete!