Taula de continguts:

ROS MoveIt Robotic Arm Part 2: Controlador de robots: 6 passos
ROS MoveIt Robotic Arm Part 2: Controlador de robots: 6 passos

Vídeo: ROS MoveIt Robotic Arm Part 2: Controlador de robots: 6 passos

Vídeo: ROS MoveIt Robotic Arm Part 2: Controlador de robots: 6 passos
Vídeo: ROS2 HUMBLE TUTORIAL. USING ROS2 WTH YOUR CUSTOM ROBOT 2024, De novembre
Anonim
Image
Image

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

A la part anterior de l'article hem creat fitxers URDF i XACRO per al nostre braç robòtic i hem llançat RVIZ per controlar el nostre braç robòtic en un entorn simulat.

Aquesta vegada ho farem amb el veritable braç robòtic! Afegirem la pinça, escriurem un controlador de robot i (opcional) generarem un solucionador de cinemàtica inversa IKfast.

Geronimo!

Pas 1: afegir la pinça

Afegir la pinça
Afegir la pinça
Afegir la pinça
Afegir la pinça
Afegir la pinça
Afegir la pinça

Afegir inicialment era una mica confús al principi, de manera que he saltat aquesta part a l’article anterior. Després de tot, va resultar no ser tan difícil.

Haureu de modificar el fitxer URDF per afegir enllaços i articulacions de pinça.

El fitxer URDF modificat del meu robot s’adjunta a aquest pas. Bàsicament, segueix la mateixa lògica que la part del braç, acabo d'afegir tres enllaços nous (claw_base, claw_r i claw_l) i tres articulacions noves (joint5 és fixa i joint6, joint7 són articulacions revolutes).

Després de modificar el fitxer URDF, també haureu d'actualitzar el paquet generat per MoveIt i el fitxer xacro mitjançant l'assistent de configuració de MoveIt.

Inicieu l'Assistent de configuració amb l'ordre següent

roslaunch moveit_setup_assistant setup_assistant.launch

Feu clic a Edita la configuració existent de MoveIt i trieu la carpeta amb el paquet MoveIt.

Afegiu una nova pinça de grup de planificació (amb enllaços i articulacions per a la pinça) i també un efector final. La meva configuració es troba a les captures de pantalla següents. Fixeu-vos que no trieu el solucionador cinemàtic per a la pinça, no és necessari. Genereu el paquet i sobreescriviu els fitxers.

Correr

fer aments

d'ordres a l'espai de treball de catkin.

Molt bé, ara tenim un braç amb una pinça.

Pas 2: Construint el braç

Construint el braç
Construint el braç
Construint el braç
Construint el braç
Construint el braç
Construint el braç
Construint el braç
Construint el braç

Com he esmentat abans, el model 3D del braç està fet per Juergenlessner, gràcies per un treball increïble. Podeu trobar les instruccions detallades de muntatge si seguiu l'enllaç.

Vaig haver de modificar el sistema de control. Utilitzo Arduino Uno amb protector de sensor per controlar servos. El blindatge del sensor ajuda molt a simplificar el cablejat i també facilita l’alimentació externa dels servos. Faig servir un adaptador de corrent de 12V 6A connectat a través del mòdul de descens (6V) a Sensor Shield.

Una nota sobre els servos. Utilitzo servos MG 996 HR comprats a Taobao, però la qualitat és realment dolenta. Sens dubte, és un knock-off xinès barat. El de l'articulació del colze no proporcionava prou parell i fins i tot va començar a fumar una vegada sota una forta càrrega. Vaig haver de substituir el servo articulació del colze per MG 946 HR d’un fabricant de millor qualitat.

Llarga història: compreu servos de qualitat. Si surt un fum màgic dels servos, utilitzeu millors servos. El voltatge de 6V és molt segur, no l’augmenteu. No augmentarà el parell, però pot danyar els servos.

Cablejat per servos de la següent manera:

base 2

espatlla2 4 espatlla1 3

colze 6

pinça 8

canell 11

No dubteu a canviar-lo sempre que recordeu de canviar l'esbós d'Arduino.

Un cop hàgiu acabat el maquinari, fem una ullada a la imatge més gran.

Pas 3: Interfície MoveIt RobotCommander

Interfície MoveIt RobotCommander
Interfície MoveIt RobotCommander

Llavors, què ara? Per què necessiteu MoveIt i ROS de totes maneres? No es pot controlar directament el braç mitjançant el codi Arduino?

Si, tu pots.

D’acord, ara, què hi ha d’utilitzar el codi GUI o el codi Python / C ++ per proporcionar la posició del robot? Ho pot fer Arduino?

Una mena de. Per a això, haureu d’escriure un solucionador de cinemàtica inversa que agafarà una posició del robot (coordenades de translació i rotació en l’espai 3D) i el convertirà en missatges d’angle conjunt per als servos.

Tot i que ho pugueu fer vosaltres mateixos, és una gran feina. Així doncs, MoveIt i ROS ofereixen una bona interfície perquè el solucionador IK (cinemàtica inversa) faci tot el que pugui fer.

Resposta breu: Sí, podeu fer un simple braç robòtic que executarà un esbós Arduino codificat per passar d'una posada a una altra. Però si voleu fer el vostre robot més intel·ligent i afegir funcions de visió per ordinador, MoveIt i ROS són el camí a seguir.

Vaig fer un diagrama molt simplificat que explicava com funciona el framework MoveIt. En el nostre cas, serà encara més senzill, ja que no tenim comentaris dels nostres servos i utilitzarem el tema / joint_states per proporcionar al controlador del robot els angles dels servos. Només ens falta un component que és el controlador del robot.

Què esperem? Escrivim alguns controladors de robots, de manera que el nostre robot seria … ja ho sabeu, més controlable.

Pas 4: Codi Arduino per al controlador de robots

Codi Arduino per al controlador de robots
Codi Arduino per al controlador de robots
Codi Arduino per al controlador de robots
Codi Arduino per al controlador de robots
Codi Arduino per al controlador de robots
Codi Arduino per al controlador de robots

En el nostre cas, Arduino Uno que executi un node ROS amb rosserial serà el controlador del robot. El codi d'esbós d'Arduino s'adjunta a aquest pas i també està disponible a GitHub.

El node ROS que s’executa a Arduino Uno bàsicament es subscriu al tema / JointState publicat a l’ordinador que executa MoveIt i, a continuació, converteix els angles conjunts de la matriu de radians a graus i els passa a servos mitjançant la biblioteca Servo.h estàndard.

Aquesta solució és una mica complicada i no com es fa amb robots industrials. Idealment se suposa que heu de publicar la trajectòria del moviment sobre el tema / FollowJointState i després rebre els comentaris sobre el tema / JointState. Però, al nostre braç, els servis d'afició no poden proporcionar els comentaris, de manera que només ens subscriureem directament al tema / JointState, publicat pel node FakeRobotController. Bàsicament, assumirem que qualsevol angle que passem als servos s'executa de manera ideal.

Per obtenir més informació sobre com funciona el rosserial, podeu consultar els següents tutorials

wiki.ros.org/rosserial_arduino/Tutorials

Després de penjar l'esbós a Arduino Uno, haureu de connectar-lo amb el cable sèrie a l'ordinador que executi la instal·lació de ROS.

Per mostrar tot el sistema, executeu les ordres següents

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

Ara podeu utilitzar marcadors interactius a RVIZ per moure el braç del robot a una posició i, a continuació, premeu Planificar i executar perquè es mogui realment a la posició.

Màgia!

Ara estem preparats per escriure el codi Python per a la nostra prova de rampa. Bé, gairebé …

Pas 5: (Opcional) Generació de connector IKfast

Per defecte, MoveIt suggereix utilitzar el solucionador de cinemàtica KDL, que realment no funciona amb menys de 6 braços DOF. Si seguiu de prop aquest tutorial, notareu que el model de braç a RVIZ no pot anar a algunes postures que haurien de ser compatibles amb la configuració de braç.

La solució recomanada és crear un solucionador de cinemàtica personalitzat mitjançant OpenRave. No és tan difícil, però l’haureu de construir i dependrà de la font o utilitzeu el contenidor d’acoblament, el que preferiu.

El procediment està molt ben documentat en aquest tutorial. Es confirma que funcionarà a màquines virtuals amb Ubuntu 16.04 i ROS Kinetic.

He utilitzat l'ordre següent per generar el solucionador

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

i després va córrer

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

per generar el connector MoveIt IKfast.

Tot el procediment requereix una mica de temps, però no és molt difícil si seguiu de prop el tutorial. Si teniu preguntes sobre aquesta part, poseu-vos en contacte amb mi als comentaris o PM.

Pas 6: la prova de rampa

La prova de la rampa!
La prova de la rampa!
La prova de la rampa!
La prova de la rampa!

Ara estem preparats per provar la prova de rampa, que executarem amb l'API de MoveIt Python de ROS.

El codi Python s’adjunta a aquest pas i també està disponible al repositori de github. Si no teniu cap rampa o voleu provar una altra prova, haureu de canviar les posicions del robot al codi. Per a aquesta primera execució

ressò rostopic / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / feedback

al terminal quan ja s’executa RVIZ i MoveIt. A continuació, moveu el robot amb marcadors interactius a la posició desitjada. Els valors d’orientació i posició es mostraran al terminal. Simplement copieu-les al codi Python.

Per executar la prova de rampa

rosrun my_arm_xacro pick / pick_2.py

amb RVIZ i el node rosserial ja en execució.

Estigueu atents a la tercera part de l'article, on faré servir càmera estèreo per a la detecció d'objectes i executaré una canonada de recollida i col·locació d'objectes senzills.

Recomanat: