ROS MoveIt Robotic Arm 2. dio: Robotski kontroler: 6 koraka
ROS MoveIt Robotic Arm 2. dio: 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! Dodati ćemo hvataljku, napisati robotski kontroler i (izborno) generirati IKfast inverzni kinematički rješ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 pomalo zbunjujuće pa sam ovaj dio preskočio u prethodnom članku. Pokazalo 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 pridružena je 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

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

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

Trčanje

catkin make

naredbu u svom radnom prostoru Catkin.

U redu, sada imamo ruku s 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 napravio je Juergenlessner, hvala vam na nevjerojatnom radu. Detaljne upute za sastavljanje mogu se pronaći ako slijedite vezu.

Morao sam ipak promijeniti sustav upravljanja. Za upravljanje servo pogonima koristim Arduino Uno sa senzorskim štitnikom. Š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 snižavanje (6V) na štit senzora.

Napomena o servo pogonima. Koristim servomotore MG 996 HR kupljene od Taobaa, ali kvaliteta je stvarno loša. To je definitivno jeftin kineski knock-off. 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 s 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 4ramena1 3

lakat 6

hvataljka 8

ručni 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 sučelje RobotCommander

MoveIt RobotCommander sučelje
MoveIt RobotCommander sučelje

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

Da, možeš.

U redu, što kažete na korištenje grafič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?

Nekako. 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. No, ako želite učiniti svog robota inteligentnijim i dodati mogućnosti računalnog vida, MoveIt i ROS su pravi put.

Napravio sam vrlo pojednostavljen dijagram koji objašnjava kako radi okvir MoveIt. U našem slučaju to će biti još jednostavnije, budući da nemamo povratnih informacija od naših servo servera i idemo na temu /joint_states kako bismo robotskom kontroleru dali kutove za servomotore. Nedostaje nam samo jedna komponenta, a to je kontroler robota.

Što čekamo? Napišimo neke robotske kontrolere, pa 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 s ROS čvorom s rosserial -om bit će kontroler robota. Arduino skica kôd je priložena ovom koraku, a dostupna je i na GitHubu.

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

Ovo je rješenje pomalo hakirano, a ne kako se radi s industrijskim robotima. U idealnom slučaju trebali biste objaviti putanju kretanja na temi /FollowJointState, a zatim primiti povratne informacije o temi /JointState. No, u našim rukama hobi servo serveri ne mogu pružiti povratne informacije, pa ćemo se samo izravno 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 radi možete pogledati sljedeće vodiče

wiki.ros.org/rosserial_arduino/Tutorials

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

Da biste prikazali cijeli sustav, 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 doista pomakne u položaj.

Magija!

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

Korak 5: (Izborno) 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 rješivača kinematike pomoću programa OpenRave. Nije tako teško, ali morat ćete ga izgraditi i ovisnosti su 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 pokreće Ubuntu 16.04 i ROS Kinetic.

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

openrave.py --inverzivna 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 dodatka MoveIt IKfast.

Cijeli postupak malo oduzima vrijeme, ali nije jako težak ako pomno pratite udžbenik. 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 isprobati ramp test, koji ćemo izvesti pomoću ROS MoveIt Python API -ja.

Python kôd pridružen je 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 željeno mjesto. 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

s 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!