Cuprins:

ROS MoveIt Robotic Arm Partea 2: Controler robot: 6 pași
ROS MoveIt Robotic Arm Partea 2: Controler robot: 6 pași

Video: ROS MoveIt Robotic Arm Partea 2: Controler robot: 6 pași

Video: ROS MoveIt Robotic Arm Partea 2: Controler robot: 6 pași
Video: ROS2 Gazebo + MoveIt!2 Simulation: ABB IRB1200 2024, Noiembrie
Anonim
Image
Image

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

În partea anterioară a articolului am creat fișiere URDF și XACRO pentru brațul nostru robotizat și am lansat RVIZ pentru a ne controla brațul robotizat într-un mediu simulat.

De data aceasta o vom face cu adevăratul braț robotizat! Vom adăuga dispozitivul de prindere, vom scrie un controler pentru robot și (opțional) vom genera un rezolvător de kinematică inversă IKfast.

Geronimo!

Pasul 1: Adăugarea Gripper-ului

Adăugarea Gripper-ului
Adăugarea Gripper-ului
Adăugarea Gripper-ului
Adăugarea Gripper-ului
Adăugarea Gripper-ului
Adăugarea Gripper-ului

Adăugarea de gripper a fost puțin confuză la început, așa că am sărit această parte în articolul precedent. La urma urmei, s-a dovedit a nu fi atât de dificil.

Va trebui să vă modificați fișierul URDF pentru a adăuga legături de prindere și articulații.

Fișierul URDF modificat pentru robotul meu este atașat la acest pas. Practic, urmează aceeași logică ca și partea brațului, tocmai am adăugat trei legături noi (claw_base, claw_r și claw_l) și trei articulații noi (joint5 este fix, iar joint6, joint7 sunt articulații revolute).

După ce ați modificat fișierul URDF, va trebui, de asemenea, să actualizați pachetul generat de MoveIt și fișierul xacro utilizând asistentul de configurare MoveIt.

Lansați asistentul de configurare cu următoarea comandă

roslaunch moveit_setup_assistant setup_assistant.launch

Faceți clic pe Editați configurația existentă MoveIt și alegeți folderul cu pachetul dvs. MoveIt.

Adăugați un nou dispozitiv de prindere pentru grup (cu legături și articulații pentru prindere) și, de asemenea, un efector final. Setările mele sunt în capturile de ecran de mai jos. Observați că nu alegeți soluția cinematică pentru prindere, nu este necesar. Generați pachetul și suprascrieți fișierele.

Alerga

face pisica

comandă în spațiul dvs. de lucru catkin.

Bine, acum avem un braț cu mâner!

Pasul 2: Construirea brațului

Construind brațul
Construind brațul
Construind brațul
Construind brațul
Construind brațul
Construind brațul
Construind brațul
Construind brațul

Așa cum am menționat înainte, modelul braț 3D este realizat de Juergenlessner, vă mulțumesc pentru o muncă uimitoare. Instrucțiunile detaliate de asamblare pot fi găsite dacă urmați linkul.

Totuși, a trebuit să modific sistemul de control. Folosesc Arduino Uno cu scut senzor pentru controlul servoarelor. Ecranul senzorului ajută foarte mult la simplificarea cablării și, de asemenea, face mai ușoară furnizarea de energie externă servomotoarelor. Folosesc un adaptor de alimentare 12V 6A conectat prin modulul step-down (6V) la ecranul senzorului.

O notă despre servos. Folosesc servome MG 996 HR cumpărate de la Taobao, dar calitatea este foarte proastă. Este cu siguranță un knock-off chinezesc ieftin. Cel pentru articulația cotului nu a oferit un cuplu suficient și chiar a început să fumege o singură dată sub sarcină grea. A trebuit să înlocuiesc servo articulația cotului cu MG 946 HR de la un producător de calitate mai bună.

Scurtă poveste lungă - cumpărați servo de calitate. Dacă fumul magic iese din servo-urile dvs., utilizați servos mai bune. 6V este o tensiune foarte sigură, nu o creșteți. Nu va crește cuplul, dar poate deteriora servomotoarele.

Cablare pentru servo după cum urmează:

baza 2

umăr2 4 umăr1 3

cotul 6

gripper 8

încheietura mâinii 11

Simțiți-vă liber să o modificați atâta timp cât vă amintiți și să schimbați schița Arduino.

După ce ați terminat cu hardware-ul, să aruncăm o privire asupra imaginii de ansamblu!

Pasul 3: Interfața MoveIt RobotCommander

Interfața MoveIt RobotCommander
Interfața MoveIt RobotCommander

Si acum ce? De ce ai nevoie oricum de MoveIt și ROS? Nu poți controla direct brațul prin codul Arduino direct?

Da, poti.

Bine, acum ce zici de folosirea codului GUI sau Python / C ++ pentru a furniza poziția robotului? Poate Arduino să facă asta?

Un fel de. Pentru aceasta, va trebui să scrieți un rezolvător de cinematică inversă care va lua o poziție a robotului (coordonate de traducere și rotație în spațiul 3D) și o va converti în mesaje unghiulare comune pentru servome.

În ciuda faptului că o poți face singur, e o muncă dracului de făcut. Deci, MoveIt și ROS oferă o interfață plăcută pentru rezolvatorul IK (cinematică inversă) pentru a face toate ridicările trigonometrice grele pentru dvs.

Răspuns scurt: Da, puteți face un braț robot simplu, care va executa o schiță Arduino codificată pentru a trece de la o poziție la alta. Dar dacă doriți să vă faceți robotul mai inteligent și să adăugați capabilități de viziune pe computer, MoveIt și ROS sunt calea de urmat.

Am făcut o diagramă foarte simplificată, explicând modul în care funcționează cadrul MoveIt. În cazul nostru, va fi și mai simplu, deoarece nu avem feedback de la servo-urile noastre și vom folosi / joint_states topic pentru a oferi controlerului robot unghiurile pentru serv-uri. Ne lipsește doar o componentă care este controlerul robotului.

Ce asteptam? Să scriem niște controlere pentru roboți, astfel încât robotul nostru să fie … să știți, mai controlabil.

Pasul 4: Cod Arduino pentru Robot Controller

Cod Arduino pentru Robot Controller
Cod Arduino pentru Robot Controller
Cod Arduino pentru Robot Controller
Cod Arduino pentru Robot Controller
Cod Arduino pentru Robot Controller
Cod Arduino pentru Robot Controller

În cazul nostru, Arduino Uno care rulează un nod ROS cu rosserial va fi controlerul robotului. La acest pas este atașat codul de schiță Arduino și este disponibil și pe GitHub.

Nodul ROS care rulează pe Arduino Uno se abonează practic la subiectul / JointState publicat pe computerul care rulează MoveIt și apoi convertește unghiurile articulare din matrice de la radiani la grade și le trece la servos folosind biblioteca Servo.h standard.

Această soluție este cam ciudată și nu cum se face cu roboții industriali. În mod ideal ar trebui să publicați traiectoria mișcării pe subiectul / FollowJointState și apoi să primiți feedback-ul despre / subiectul JointState. Dar în brațul nostru, serviciile hobby nu pot oferi feedback, așa că ne vom abona direct la subiectul / JointState, publicat de nodul FakeRobotController. Practic, vom presupune că orice unghiuri pe care le-am trecut către servouri sunt executate în mod ideal.

Pentru mai multe informații despre cum funcționează rosserial, puteți consulta următoarele tutoriale

wiki.ros.org/rosserial_arduino/Tutorials

După ce încărcați schița pe Arduino Uno, va trebui să o conectați cu cablul serial la computerul care rulează instalarea ROS.

Pentru a afișa întregul sistem executați următoarele comenzi

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

Acum puteți utiliza markere interactive în RVIZ pentru a muta brațul robotului într-o poziție și apoi apăsați Plan și Executare pentru ca acesta să se deplaseze efectiv în poziție.

Magie!

Acum suntem gata să scriem codul Python pentru testul nostru de rampă. Ei bine aproape…

Pasul 5: (Opțional) Generarea pluginului IKfast

În mod implicit, MoveIt sugerează utilizarea rezolvătorului cinematic KDL, care nu funcționează cu mai puțin de 6 brațe DOF. Dacă urmăriți îndeaproape acest tutorial, veți observa că modelul brațului din RVIZ nu poate merge la unele ipostaze care ar trebui susținute de configurația brațului.

Soluția recomandată este de a crea un rezolvator cinematic personalizat folosind OpenRave. Nu este atât de dificil, dar va trebui să-l construiți și depinde de sursă sau să utilizați containerul de andocare, oricare preferați.

Procedura este foarte bine documentată în acest tutorial. Este confirmat că funcționează pe VM care rulează Ubuntu 16.04 și ROS Kinetic.

Am folosit următoarea comandă pentru a genera soluția

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

și apoi a fugit

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

pentru a genera pluginul MoveIt IKfast.

Întreaga procedură consumă puțin timp, dar nu este foarte dificilă dacă urmezi îndeaproape tutorialul. Dacă aveți întrebări despre această parte, vă rugăm să mă contactați în comentarii sau PM.

Pasul 6: Testul Rampei

Testul Rampei!
Testul Rampei!
Testul Rampei!
Testul Rampei!

Acum suntem gata să încercăm testul de rampă, pe care îl vom executa folosind API-ul ROS MoveIt Python.

Codul Python este atașat la acest pas și este disponibil și în depozitul github. Dacă nu aveți o rampă sau doriți să încercați un alt test, va trebui să schimbați poziția robotului în cod. Pentru prima executare

ecou rostopic / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / feedback

în terminal atunci când rulează deja RVIZ și MoveIt. Apoi mutați robotul cu markere interactive în poziția dorită. Valorile poziției și orientării vor fi afișate în terminal. Doar copiați-le în codul Python.

Pentru a executa testul de rampă

rosrun my_arm_xacro pick / pick_2.py

cu RVIZ și nodul rosserial deja rulează.

Rămâneți la curent cu cea de-a treia parte a articolului, unde voi folosi camera stereo pentru detectarea obiectelor și voi executa pipeline pick și place pentru obiecte simple!

Recomandat: