ROS MoveIt Robotic Arm Dio 2: Robotski kontroler: 6 koraka
ROS MoveIt Robotic Arm Dio 2: Robotski kontroler: 6 koraka
Anonim
Image
Image

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

U prethodnom dijelu članka stvorili smo URDF i XACRO datoteke za našu robotsku ruku i pokrenuli RVIZ za kontrolu naše robotske ruke u simuliranom okruženju.

Ovaj put ćemo to učiniti s pravom robotskom rukom! Dodaćemo hvataljku, napisati robotski kontroler i (opciono) generisati IKfast inverzni kinematički rešavač.

Geronimo!

Korak 1: Dodavanje hvataljke

Dodavanje hvataljke
Dodavanje hvataljke
Dodavanje hvataljke
Dodavanje hvataljke
Dodavanje hvataljke
Dodavanje hvataljke

Dodavanje hvataljke u početku je bilo malo zbunjujuće, pa sam ovaj dio preskočio u prethodnom članku. Ispostavilo se da ipak nije tako teško.

Morat ćete izmijeniti svoju URDF datoteku kako biste dodali hvataljke i spojeve.

Modificirana URDF datoteka za mog robota je priložena ovom koraku. U osnovi slijedi istu logiku kao i dio ruke, samo sam dodao tri nove veze (claw_base, claw_r i claw_l) i tri nova zgloba (joint5 je fiksiran, a joint6, joint7 su revolucionarni zglobovi).

Nakon što ste izmijenili svoju URDF datoteku, također ćete morati ažurirati MoveIt generirani paket i xacro datoteku pomoću MoveIt pomoćnika za postavljanje.

Pokrenite pomoćnika za postavljanje sa sljedećom naredbom

roslaunch moveit_setup_assistant setup_assistant.launch

Kliknite na Uredi postojeću MoveIt konfiguraciju i odaberite mapu sa svojim MoveIt paketom.

Dodajte novu hvataljku za planiranje (s karikama i spojevima za hvataljku), a također i krajnji efektor. Moje postavke su na snimcima zaslona u nastavku. Imajte na umu da za hvataljku ne odaberete kinematički rješavač, to nije potrebno. Generirajte paket i prepišite datoteke.

Trči

catkin make

naredbu u vašem radnom prostoru Catkin.

U redu, sada imamo ruku sa hvataljkom!

Korak 2: Izgradnja ruke

Izgradnja ruke
Izgradnja ruke
Izgradnja ruke
Izgradnja ruke
Izgradnja ruke
Izgradnja ruke
Izgradnja ruke
Izgradnja ruke

Kao što sam već spomenuo, 3D model ruke je izradio Juergenlessner, hvala vam na nevjerovatnom radu. Detaljna uputstva za sastavljanje mogu se pronaći ako slijedite vezu.

Morao sam ipak promijeniti sistem upravljanja. Koristim Arduino Uno sa senzorskim štitom za upravljanje servo pogonima. Štit senzora uvelike pomaže pri pojednostavljivanju ožičenja, a također olakšava i opskrbu vanjskog napajanja servo pogona. Koristim adapter za napajanje 12V 6A ožičen kroz modul za smanjenje (6V) na štit senzora.

Napomena o servo pogonima. Koristim servomotore MG 996 HR kupljene u Taobaou, ali kvaliteta je jako loša. To je definitivno jeftin kineski početak. Ona za zglob lakta nije osigurala dovoljan okretni moment, pa je čak i počela gorjeti jednom pod velikim opterećenjem. Morao sam zamijeniti servo lakatnog zgloba sa MG 946 HR kvalitetnijeg proizvođača.

Ukratko - kupite kvalitetne servomotore. Ako iz vaših servomotora izlazi čarobni dim, upotrijebite bolje servomotore. 6V je vrlo siguran napon, nemojte ga povećavati. Neće povećati zakretni moment, ali može oštetiti servomotore.

Ožičenje za servo pogone kako slijedi:

baza 2

rame2 4rameno1 3

lakat 6

hvataljka 8

zglob 11

Slobodno ga promijenite sve dok se sjetite promijeniti i Arduino skicu.

Nakon što završite s hardverom, pogledajmo širu sliku!

Korak 3: Premjestite RobotCommander sučelje

MoveIt RobotCommander interfejs
MoveIt RobotCommander interfejs

Pa, što sad? Zašto vam uopće trebaju MoveIt i ROS? Zar ne možete jednostavno kontrolirati ruku direktno putem Arduino koda?

Da, možeš.

U redu, što kažete na korištenje grafičkog korisničkog sučelja ili Python/C ++ koda za pružanje robotske poze na koju možete otići? Može li Arduino to učiniti?

Otprilike. Za to ćete morati napisati inverzni kinematički rješavač koji će zauzeti pozu robota (koordinate translacije i rotacije u 3D prostoru) i pretvoriti ga u zajedničke kutne poruke za servomotore.

Unatoč tome što to možete učiniti sami, to je pakleno puno posla. Dakle, MoveIt i ROS pružaju lijepo sučelje za IK (inverznu kinematiku) rješavač koji za vas obavlja sva teška trigonometrijska dizanja.

Kratak odgovor: Da, možete napraviti jednostavnu robotsku ruku koja će izvesti teško kodiranu Arduino skicu za prelazak iz jedne poze u drugu. Ali ako želite učiniti svog robota inteligentnijim i dodati mogućnosti računarskog vida, MoveIt i ROS su pravi način.

Napravio sam vrlo pojednostavljen dijagram koji objašnjava kako funkcionira MoveIt framework. U našem slučaju to će biti još jednostavnije, budući da nemamo povratnih informacija od naših servo -a i da ćemo koristiti temu /joint_states kako bismo robotskom kontroleru osigurali uglove za servomotore. Nedostaje nam samo jedna komponenta, a to je kontroler robota.

Šta čekamo? Napišemo neke robotske kontrolere, kako bi naš robot bio … znate, više kontroliran.

Korak 4: Arduino kôd za kontroler robota

Arduino kod za robotski kontroler
Arduino kod za robotski kontroler
Arduino kod za robotski kontroler
Arduino kod za robotski kontroler
Arduino kod za robotski kontroler
Arduino kod za robotski kontroler

U našem slučaju Arduino Uno koji pokreće ROS čvor s rosserial -om bit će kontroler robota. Arduino skica koda je priložena ovom koraku, a dostupna je i na GitHub -u.

ROS čvor koji radi na Arduino Uno u osnovi se pretplaćuje na /JointState temu objavljenu na računaru na kojem je pokrenuto MoveIt, a zatim pretvara spojne kutove iz niza iz radijana u stepene i prosljeđuje ih servo -ima pomoću standardne biblioteke Servo.h.

Ovo rješenje je pomalo hakirano, a ne kako se radi s industrijskim robotima. U idealnom slučaju trebali biste objaviti putanju kretanja na /FollowJointState temi, a zatim primiti povratne informacije o /JointState temi. Ali u našim rukama hobi servo serveri ne mogu pružiti povratne informacije, pa ćemo se jednostavno pretplatiti na temu /JointState, koju je objavio čvor FakeRobotController. U osnovi ćemo pretpostaviti da se svi kutovi koje smo prešli na servo pogone izvršavaju idealno.

Za više informacija o tome kako rosserial funkcionira možete pogledati sljedeće vodiče

wiki.ros.org/rosserial_arduino/Tutorials

Nakon što otpremite skicu na Arduino Uno, morat ćete je povezati serijskim kabelom s računarom na kojem je instalirana vaša ROS instalacija.

Da biste prikazali cijeli sistem, izvedite sljedeće naredbe

roslaunch my_arm_xacro demo.launch rviz_tutorial: = istina

sudo chmod -R 777 /dev /ttyUSB0

rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200

Sada možete koristiti interaktivne markere u RVIZ -u za pomicanje ruke robota u pozu, a zatim pritisnuti Plan i Izvrši da se zaista premjesti u položaj.

Magija!

Sada smo spremni za pisanje Python koda za naš test rampe. Pa, skoro…

Korak 5: (Opcionalno) Generiranje IKfast dodatka

Prema zadanim postavkama MoveIt predlaže korištenje KDL kinematičkog rješavača, koji zapravo ne radi s manje od 6 DOF krakova. Ako pomno pratite ovaj vodič, primijetit ćete da model ruke u RVIZ -u ne može ići u neke položaje koje bi trebala podržati konfiguracija ruke.

Preporučeno rješenje je stvaranje prilagođenog kinematičkog rješavača pomoću OpenRave -a. Nije tako teško, ali morat ćete ga izgraditi, a ovisi o izvoru ili upotrijebite docker spremnik, što god želite.

Postupak je vrlo dobro dokumentiran u ovom vodiču. Potvrđeno je da radi na VM -u koji koristi Ubuntu 16.04 i ROS Kinetic.

Koristio sam sljedeću naredbu za generiranje rješavača

openrave.py -inverzna kinematika baze podataka --robot = arm.xml --iktype = translation3d --iktests = 1000

a zatim potrčao

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

za generiranje MoveIt IKfast dodatka.

Cijela procedura oduzima dosta vremena, ali nije jako teška ako pomno pratite uputstvo. Ako imate pitanja o ovom dijelu, kontaktirajte me u komentarima ili na PM.

Korak 6: Test rampe

Ramp Test!
Ramp Test!
Ramp Test!
Ramp Test!

Sada smo spremni za isprobavanje ramp testa, koji ćemo izvesti pomoću ROS MoveIt Python API -ja.

Python kôd je pridružen ovom koraku, a dostupan je i na github spremištu. Ako nemate rampu ili želite pokušati drugi test, morat ćete promijeniti poze robota u kodu. Za to prvo izvršite

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

u terminalu kada već pokrećete RVIZ i MoveIt. Zatim pomaknite robota s interaktivnim oznakama na željeni položaj. Vrijednosti položaja i orijentacije bit će prikazane na terminalu. Samo ih kopirajte u Python kod.

Za izvršavanje probnog rada rampe

rosrun my_arm_xacro pick/pick_2.py

sa RVIZ -om i rosserial čvorom koji već rade.

Pratite treći dio članka, gdje ću koristiti stereo kameru za otkrivanje objekata i izvršiti odabir i postavljanje cjevovoda za jednostavne objekte!