Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
github.com/AIWintermuteAI/ros-moveit-arm.git
Ankstesnėje straipsnio dalyje mes sukūrėme URDF ir XACRO failus mūsų robotinei rankai ir paleidome RVIZ, kad valdytume savo robotinę ranką imituojamoje aplinkoje.
Šį kartą tai padarysime su tikra robotų ranka! Pridėsime griebtuvą, parašysime roboto valdiklį ir (pasirinktinai) sukursime „IKfast“atvirkštinės kinematikos sprendėją.
Geronimo!
1 žingsnis: pridėkite griebtuvą
Įtraukti griebtuvą iš pradžių buvo šiek tiek painu, todėl praleidau šią dalį ankstesniame straipsnyje. Pasirodė, kad tai nėra taip sunku.
Turėsite modifikuoti URDF failą, kad pridėtumėte griebtuvų saites ir sąnarius.
Prie šio veiksmo pridedamas pakeistas mano roboto URDF failas. Iš esmės ji vadovaujasi ta pačia logika kaip ir rankos dalis, aš ką tik pridėjau tris naujas nuorodas (claw_base, claw_r ir claw_l) ir tris naujas jungtis (jungtis5 yra fiksuota, o jungtis6, jungtis7 yra sukamosios jungtys).
Pakeitus URDF failą, taip pat turėsite atnaujinti „MoveIt“sukurtą paketą ir „xacro“failą naudodami „MoveIt“sąrankos asistentą.
Paleiskite sąrankos asistentą naudodami šią komandą
roslaunch moveit_setup_assistant setup_assistant.launch
Spustelėkite Redaguoti esamą „MoveIt“konfigūraciją ir pasirinkite aplanką su „MoveIt“paketu.
Pridėkite naują planavimo grupės griebtuvą (su griebtuvais ir jungtimis) ir galinį efektorių. Mano nustatymai yra žemiau esančiose ekrano kopijose. Atkreipkite dėmesį, kad griebtuvui nepasirenkate kinematikos sprendėjo, tai nėra būtina. Sukurkite paketą ir perrašykite failus.
Bėgti
kačių padaryti
komandą savo „catkin“darbo srityje.
Gerai, dabar mes turime ranką su griebtuvu!
2 žingsnis: statykite ranką
Kaip jau minėjau, rankos 3D modelį sukūrė Juergenlessner, ačiū už nuostabų darbą. Išsamias surinkimo instrukcijas rasite sekdami nuorodą.
Tačiau turėjau pakeisti valdymo sistemą. Servo valdymui naudoju „Arduino Uno“su jutiklio skydu. Jutiklio skydas labai padeda supaprastinti laidus, taip pat leidžia lengvai tiekti išorinę maitinimą servo sistemoms. Aš naudoju 12V 6A maitinimo adapterį, prijungtą per sumažinimo modulį (6V) prie jutiklio skydo.
Pastaba apie servo. Aš naudoju MG 996 HR servos, pirktas iš Taobao, bet kokybė tikrai prasta. Tai tikrai pigus kiniškas nokautas. Tas, skirtas alkūnės sąnariui, nesukėlė pakankamo sukimo momento ir net kartą pradėjo rūkyti esant didelei apkrovai. Teko pakeisti alkūnės sąnario servo servisą geresnės kokybės gamintojo „MG 946 HR“.
Trumpai tariant - pirkite kokybiškus servus. Jei iš jūsų servo išeina magiški dūmai, naudokite geresnius servus. 6V yra labai saugi įtampa, nedidinkite jos. Tai nepadidins sukimo momento, tačiau gali sugadinti servo sistemas.
Servo laidai:
pagrindas 2
petys2 4 pečiai1 3
alkūnė 6
griebtuvas 8
riešas 11
Nesivaržykite jį pakeisti tol, kol prisimenate pakeisti „Arduino“eskizą.
Baigę aparatūrą, pažvelkime į didesnį vaizdą!
3 žingsnis: „MoveIt RobotCommander“sąsaja
Taigi, dabar ką? Kodėl jums vis tiek reikia „MoveIt“ir „ROS“? Ar negalite tiesiog valdyti rankos per „Arduino“kodą?
Taip tu gali.
Gerai, o kaip dabar naudoti GUI arba „Python/C ++“kodą, kad robotas galėtų pozuoti? Ar Arduino tai gali padaryti?
Kaip ir. Norėdami tai padaryti, turėsite parašyti atvirkštinės kinematikos sprendinį, kuris užims roboto pozą (vertimo ir sukimosi koordinatės 3D erdvėje) ir paversti jį servo jungtiniais kampo pranešimais.
Nepaisant to, kad galite tai padaryti patys, tai velniškai daug darbo. Taigi, „MoveIt“ir „ROS“suteikia gražią sąsają IK (atvirkštinės kinematikos) sprendėjui, kad atliktų visą sunkų trigonometrinį kėlimą už jus.
Trumpas atsakymas: Taip, galite padaryti paprastą robotinę ranką, kuri atliks užkoduotą „Arduino“eskizą, kad pereitų iš vienos pozos į kitą. Bet jei norite, kad jūsų robotas taptų protingesnis ir pridėtų kompiuterio matymo galimybių, „MoveIt“ir „ROS“yra geriausias kelias.
Aš sukūriau labai supaprastintą schemą, paaiškinančią, kaip veikia „MoveIt“sistema. Mūsų atveju tai bus dar paprasčiau, nes mes neturime atsiliepimų iš mūsų servo ir ketiname naudoti /joint_states temą, kad roboto valdiklis pateiktų servo kampus. Mums trūksta tik vieno komponento - roboto valdiklio.
Ko mes laukiame? Parašykime keletą robotų valdiklių, kad mūsų robotas būtų… žinote, labiau valdomas.
4 žingsnis: roboto valdiklio „Arduino“kodas
Mūsų atveju roboto valdiklis bus „Arduino Uno“, valdantis ROS mazgą su „rosserial“. „Arduino“eskizo kodas pridedamas prie šio veiksmo ir taip pat prieinamas „GitHub“.
„Arduino Uno“veikiantis ROS mazgas iš esmės prenumeruoja /„JointState“temą, paskelbtą kompiuteryje, kuriame veikia „MoveIt“, ir tada konvertuoja jungties kampus iš masyvo iš radianų į laipsnius ir perduoda juos į servo, naudodami standartinę „Servo.h“biblioteką.
Šis sprendimas yra šiek tiek niūrus, o ne kaip tai daroma naudojant pramoninius robotus. Idealiu atveju turėtumėte paskelbti judėjimo trajektoriją /FollowJointState tema ir tada gauti atsiliepimą /JointState tema. Tačiau mūsų rankose pomėgių servai negali pateikti grįžtamojo ryšio, todėl tiesiog užsisakysime /JointState temą, kurią paskelbė FakeRobotController mazgas. Iš esmės mes darysime prielaidą, kad bet kokie kampai, kuriuos mes perdavėme servo sistemoms, vykdomi idealiai.
Norėdami gauti daugiau informacijos apie tai, kaip veikia „rosserial“, galite perskaityti šiuos vadovus
wiki.ros.org/rosserial_arduino/Tutorials
Įkėlę eskizą į „Arduino Uno“, turėsite jį prijungti nuosekliu kabeliu prie kompiuterio, kuriame veikia ROS diegimas.
Norėdami parodyti visą sistemą, vykdykite šias komandas
roslaunch my_arm_xacro demo.launch rviz_tutorial: = tiesa
sudo chmod -R 777 /dev /ttyUSB0
rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200
Dabar galite naudoti interaktyvius žymenis RVIZ, kad perkeltumėte roboto ranką į pozą, tada paspauskite Planuoti ir Vykdyti, kad ji iš tikrųjų judėtų į padėtį.
Magija!
Dabar esame pasirengę parašyti „Python“kodą mūsų rampos bandymui. Na, beveik…
5 veiksmas: (pasirenkama) „IKfast“papildinio kūrimas
Pagal numatytuosius nustatymus „MoveIt“siūlo naudoti KDL kinematikos sprendiklį, kuris tikrai neveikia su mažiau nei 6 DOF rankomis. Jei atidžiai sekate šią pamoką, pastebėsite, kad rankos modelis RVIZ negali eiti į kai kurias pozas, kurias turėtų palaikyti rankos konfigūracija.
Rekomenduojamas sprendimas yra sukurti pasirinktinį kinematikos sprendėją naudojant „OpenRave“. Tai nėra taip sunku, tačiau turėsite ją sukurti ir tai priklauso nuo šaltinio arba naudoti doko konteinerį, kaip jums labiau patinka.
Procedūra yra labai gerai dokumentuota šioje pamokoje. Patvirtinta, kad jis veikia VM, kuriame veikia „Ubuntu 16.04“ir „ROS Kinetic“.
Aš naudoju šią komandą, norėdamas sugeneruoti sprendėją
openrave.py -duomenų bazė inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000
o paskui bėgo
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp
sukurti „MoveIt IKfast“papildinį.
Visa procedūra užima daug laiko, tačiau nėra labai sudėtinga, jei atidžiai sekite vadovėlį. Jei turite klausimų apie šią dalį, susisiekite su manimi komentaruose arba PM.
6 žingsnis: rampos testas
Dabar esame pasirengę išbandyti rampos testą, kurį atliksime naudodami „ROS MoveIt Python“API.
Prie šio veiksmo pridedamas „Python“kodas ir jį galima rasti „github“saugykloje. Jei neturite rampos ar norite išbandyti kitą testą, turėsite pakeisti roboto pozą kode. Dėl pirmojo įvykdymo
rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
terminale, kai jau veikia RVIZ ir MoveIt. Tada perkelkite robotą su interaktyviais žymekliais į norimą padėtį. Terminale bus rodomos padėties ir orientacijos vertės. Tiesiog nukopijuokite juos į „Python“kodą.
Norėdami atlikti bandomąjį rampos važiavimą
rosrun my_arm_xacro pick/pick_2.py
jau veikia RVIZ ir rosserial mazgas.
Sekite trečiąją straipsnio dalį, kur aš naudosiu stereofoninę kamerą objektams aptikti ir vykdysiu paprastų objektų rinkimą ir išdėstymą!