Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
github.com/AIWintermuteAI/ros-moveit-arm.git
Në pjesën e mëparshme të artikullit ne kemi krijuar skedarë URDF dhe XACRO për krahun tonë robotik dhe kemi nisur RVIZ për të kontrolluar krahun tonë robotik në një mjedis të simuluar.
Këtë herë do ta bëjmë me krahun e vërtetë robotik! Ne do të shtojmë kapësen, do të shkruajmë një kontrollues robot dhe (sipas dëshirës) do të gjenerojmë zgjidhësin kinematikë të anasjelltë IKfast.
Geronimo!
Hapi 1: Shtimi i kapëses
Shtimi i gripper ishte pak konfuze në fillim, kështu që e kalova këtë pjesë në artikullin e mëparshëm. Në fund të fundit, nuk ishte aq e vështirë.
Ju do të duhet të modifikoni skedarin tuaj URDF për të shtuar lidhje dhe nyje mbërthyese.
Skedari i modifikuar URDF për robotin tim i bashkëngjitet këtij hapi. Në thelb ai ndjek të njëjtën logjikë si pjesa e krahut, unë vetëm shtova tre lidhje të reja (claw_base, claw_r dhe claw_l) dhe tre nyje të reja (nyja5 është fikse, dhe nyja6, nyja7 janë nyje rrotulluese).
Pasi të keni modifikuar skedarin tuaj URDF do t'ju duhet gjithashtu të azhurnoni paketën e krijuar nga MoveIt dhe skedarin xacro duke përdorur ndihmësin e konfigurimit të MoveIt.
Nisni ndihmësin e konfigurimit me komandën e mëposhtme
roslaunch moveit_setup_assistant setup_assistant. nis
Klikoni në Ndrysho Konfigurimin Ekzistues të MoveIt dhe zgjidhni dosjen me paketën tuaj MoveIt.
Shtoni grumbullues të grupit të ri të planifikimit (me lidhje dhe nyje për mbërthyesin) dhe gjithashtu një efektor përfundimtar. Cilësimet e mia janë në pamjet e ekranit më poshtë. Vini re se ju nuk zgjidhni zgjidhësin e kinematikës për kapësen, nuk është e nevojshme. Gjeneroni paketën dhe mbishkruani skedarët.
Vraponi
mace bëj
komandën në hapësirën tuaj të punës catkin.
Mirë, tani kemi një krah me një kapëse!
Hapi 2: Ndërtimi i krahut
Siç e përmenda edhe më parë modeli 3D krah është bërë nga Juergenlessner, faleminderit për një punë të mahnitshme. Udhëzimet e detajuara të montimit mund të gjenden nëse ndiqni lidhjen.
Mua më duhej të modifikoja sistemin e kontrollit. Unë përdor Arduino Uno me mburojë sensori për kontrollimin e servove. Mburoja e sensorit ndihmon shumë në thjeshtimin e instalimeve elektrike dhe gjithashtu e bën të lehtë sigurimin e energjisë së jashtme për servos. Unë përdor përshtatës energjie 12V 6A të lidhur përmes modulit të zbritjes (6V) në Sensor Shield.
Një shënim për servos. Unë përdor shërbime MG 996 HR të blera nga Taobao, por cilësia është vërtet e keqe. Definitelyshtë padyshim një goditje e lirë kineze. Ai për nyjen e bërrylit nuk siguroi çift rrotullues të mjaftueshëm dhe madje filloi të tymosë një herë nën ngarkesë të madhe. Më duhej të zëvendësoja servo të përbashkët të bërrylit me MG 946 HR nga një prodhues me cilësi më të mirë.
Shkurtimisht - blini servo cilësore. Nëse tymi magjik del nga servos tuaj, përdorni servos më të mirë. 6V është një tension shumë i sigurt, mos e rritni atë. Nuk do të rrisë çift rrotullues, por mund të dëmtojë servot.
Instalimet për servos si më poshtë:
baza 2
shpatull 4 4 shpatull 1 3
bërryl 6
kapëse 8
dore 11
Ndjehuni të lirë ta ndryshoni për sa kohë që ju gjithashtu mbani mend të ndryshoni skicën Arduino.
Pasi të keni mbaruar me harduerin, le të hedhim një vështrim në pamjen më të madhe!
Hapi 3: Ndërfaqja MoveIt RobotCommander
Pra, tani çfarë? Pse keni nevojë për MoveIt dhe ROS gjithsesi? Nuk mund të kontrolloni krahun direkt përmes kodit Arduino?
Po ti mundesh.
Mirë, tani si të përdorni GUI ose kodin Python/C ++ për të siguruar pozën e robotit për të shkuar? A mund ta bëjë Arduino këtë?
Dicka e tille. Për këtë ju do të duhet të shkruani një zgjidhës kinematik të anasjelltë i cili do të marrë një pozë roboti (koordinatat e përkthimit dhe rrotullimit në hapësirën 3D) dhe do ta shndërrojë atë në mesazhe me kënd të përbashkët për servos.
Pavarësisht se mund ta bëni vetë, është një punë shumë e madhe për të bërë. Pra, MoveIt dhe ROS ofrojnë një ndërfaqe të mirë për zgjidhësin e IK (kinematika inverse) për të bërë të gjithë ngritjen e rëndë trigonometrike për ju.
Përgjigje e shkurtër: Po, ju mund të bëni një krah të thjeshtë robotik që do të ekzekutojë një skicë të koduar të Arduino për të kaluar nga një pozë në tjetrën. Por nëse doni ta bëni robotin tuaj më inteligjent dhe të shtoni aftësitë e shikimit të kompjuterit, MoveIt dhe ROS është rruga për të shkuar.
Unë bëra një diagram shumë të thjeshtuar duke shpjeguar se si funksionon kuadri MoveIt. Në rastin tonë do të jetë edhe më e thjeshtë, pasi nuk kemi reagime nga servot tanë dhe do të përdorim temën /joint_states për t'i siguruar kontrolluesit robot këndet për servos. Na mungon vetëm një komponent i cili është kontrolluesi robot.
Cfare presim? Le të shkruajmë disa kontrollues robotësh, kështu që roboti ynë do të ishte … e dini, më i kontrollueshëm.
Hapi 4: Kodi Arduino për Kontrolluesin e Robotëve
Në rastin tonë Arduino Uno që drejton një nyje ROS me rosserial do të jetë kontrolluesi robot. Kodi i skicës Arduino i bashkëngjitet këtij hapi dhe është gjithashtu i disponueshëm në GitHub.
Nyja ROS që funksionon në Arduino Uno në thelb pajtohet me temën /JointState të publikuar në kompjuterin që ekzekuton MoveIt dhe pastaj konverton këndet e kyçeve nga grupi nga radianët në gradë dhe i kalon ato në servos duke përdorur bibliotekën standarde Servo.h.
Kjo zgjidhje është pak e pacipë dhe jo si bëhet me robotët industrialë. Në mënyrë ideale, supozohet që të publikoni trajektoren e lëvizjes në temën /FollowJointState dhe më pas të merrni reagime për temën /JointState. Por në krahun tonë shërbimet hobi nuk mund të japin reagime, kështu që ne thjesht do të abonohemi drejtpërdrejt në temën /JointState, botuar nga nyja FakeRobotController. Në thelb ne do të supozojmë se çfarëdo këndi që kaluam tek servos ekzekutohen në mënyrë ideale.
Për më shumë informacion se si funksionon roseria, mund të konsultoheni me mësimet e mëposhtme
wiki.ros.org/rosserial_arduino/Tutorials
Pasi ta ngarkoni skicën në Arduino Uno, do t'ju duhet ta lidhni me kabllon serik me kompjuterin që ekzekuton instalimin tuaj ROS.
Për të sjellë të gjithë sistemin, ekzekutoni komandat e mëposhtme
roslaunch my_arm_xacro demo.launch rviz_tutorial: = e vërtetë
sudo chmod -R 777 /dev /ttyUSB0
rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200
Tani mund të përdorni shënues ndërveprues në RVIZ për të lëvizur krahun robot në një pozë dhe më pas shtypni Plan dhe Execute që ai të lëvizë në të vërtetë në pozicion.
Magjike!
Tani jemi gati të shkruajmë kodin Python për testin tonë të devijimit. Epo, pothuajse…
Hapi 5: (Opsionale) Gjenerimi i shtojcës IKfast
Si parazgjedhje, MoveIt sugjeron përdorimin e zgjidhësit të kinematikës KDL, i cili nuk funksionon me më pak se 6 krahë DOF. Nëse e ndiqni këtë tutorial nga afër atëherë do të vini re se modeli i krahut në RVIZ nuk mund të shkojë në disa poza të cilat duhet të mbështeten nga konfigurimi i krahut.
Zgjidhja e rekomanduar është krijimi i zgjidhësit të personalizuar të kinematikës duke përdorur OpenRave. Nuk është aq e vështirë, por do t’ju duhet ta ndërtoni atë dhe varësitë e tij nga burimi ose përdorni enën docker, cilindo që preferoni.
Procedura është e dokumentuar shumë mirë në këtë tutorial. Shtë konfirmuar se punon në VM që përdor Ubuntu 16.04 dhe ROS Kinetic.
Kam përdorur komandën e mëposhtme për të gjeneruar zgjidhësin
openrave.py --baza e të dhënave inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000
dhe pastaj vrapoi
rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot krah my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp
për të gjeneruar shtojcën MoveIt IKfast.
E gjithë procedura kërkon pak kohë, por jo shumë e vështirë nëse ndiqni udhëzimet nga afër. Nëse keni pyetje në lidhje me këtë pjesë, ju lutemi më kontaktoni në komentet ose PM.
Hapi 6: Testi i Rampit
Tani jemi gati të provojmë testin e devijimit, të cilin do ta ekzekutojmë duke përdorur ROS MoveIt Python API.
Kodi Python i bashkëngjitet këtij hapi dhe është gjithashtu i disponueshëm në depo github. Nëse nuk keni një devijim ose dëshironi të provoni një provë tjetër, do t'ju duhet të ndryshoni pozicionet e robotit në kod. Për atë ekzekutimin e parë
eko rostopike/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
në terminal kur tashmë funksionon RVIZ dhe MoveIt. Pastaj zhvendosni robotin me shënues ndërveprues në pozicionin e dëshiruar. Vlerat e pozicionit dhe orientimit do të shfaqen në terminal. Thjesht kopjoni ato në kodin Python.
Për të ekzekutuar vrapimin testues të devijimit
rosrun my_arm_xacro marr/marr_2.py
me RVIZ dhe nyjen roseriale që tashmë funksionon.
Qëndroni të sintonizuar për pjesën e tretë të artikullit, ku unë do të përdor kamerë stereo për zbulimin e objekteve dhe do të ekzekutoj marrjen dhe vendosjen e tubacionit për objekte të thjeshta!