Sommario:

Braccio robotico ROS MoveIt Parte 2: Controller robot: 6 passaggi
Braccio robotico ROS MoveIt Parte 2: Controller robot: 6 passaggi

Video: Braccio robotico ROS MoveIt Parte 2: Controller robot: 6 passaggi

Video: Braccio robotico ROS MoveIt Parte 2: Controller robot: 6 passaggi
Video: ABB ROS 2 Robot Synchronous Motion 2024, Novembre
Anonim
Image
Image

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

Nella parte precedente dell'articolo abbiamo creato file URDF e XACRO per il nostro braccio robotico e lanciato RVIZ per controllare il nostro braccio robotico in un ambiente simulato.

Questa volta lo faremo con il vero braccio robotico! Aggiungeremo la pinza, scriveremo un controller robot e (opzionale) genereremo il risolutore cinematico inverso IKfast.

Geronimo!

Passaggio 1: aggiunta della pinza

Aggiunta della pinza
Aggiunta della pinza
Aggiunta della pinza
Aggiunta della pinza
Aggiunta della pinza
Aggiunta della pinza

L'aggiunta della pinza era un po' confusa all'inizio, quindi ho saltato questa parte nell'articolo precedente. Alla fine si è rivelato non così difficile.

Dovrai modificare il tuo file URDF per aggiungere collegamenti e giunti di presa.

Il file URDF modificato per il mio robot è allegato a questo passaggio. Fondamentalmente segue la stessa logica della parte del braccio, ho appena aggiunto tre nuovi collegamenti (claw_base, claw_r e claw_l) e tre nuovi giunti (joint5 è fisso e joint6, joint7 sono giunti revoluti).

Dopo aver modificato il file URDF, dovrai anche aggiornare il pacchetto generato da MoveIt e il file xacro utilizzando l'assistente di installazione di MoveIt.

Avvia l'assistente di installazione con il seguente comando

roslaunch moveit_setup_assistant setup_assistant.launch

Fare clic su Modifica configurazione MoveIt esistente e scegliere la cartella con il pacchetto MoveIt.

Aggiungi un nuovo gripper del gruppo di pianificazione (con collegamenti e giunti per il gripper) e anche un effettore finale. Le mie impostazioni sono negli screenshot qui sotto. Notare che non si sceglie il risolutore cinematico per la pinza, non è necessario. Genera il pacchetto e sovrascrivi i file.

Correre

fare amento

comando nel tuo spazio di lavoro amento.

Bene, ora abbiamo un braccio con una pinza!

Passaggio 2: costruire il braccio

Costruire il braccio
Costruire il braccio
Costruire il braccio
Costruire il braccio
Costruire il braccio
Costruire il braccio
Costruire il braccio
Costruire il braccio

Come ho detto prima, il modello 3D del braccio è realizzato da Juergenlessner, grazie per l'incredibile lavoro. Le istruzioni di montaggio dettagliate possono essere trovate se si segue il collegamento.

Ho dovuto modificare il sistema di controllo però. Uso Arduino Uno con Sensor shield per controllare i servi. Lo scudo del sensore aiuta molto a semplificare il cablaggio e rende anche facile fornire l'alimentazione esterna ai servi. Uso un adattatore di alimentazione 12V 6A cablato tramite modulo step-down (6V) a Sensor Shield.

Una nota sui servi. Uso i servi MG 996 HR acquistati da Taobao, ma la qualità è davvero pessima. È sicuramente un'imitazione cinese a buon mercato. Quello per l'articolazione del gomito non ha fornito una coppia sufficiente e ha persino iniziato a emettere fumo una volta sotto carico pesante. Ho dovuto sostituire il servo del giunto a gomito con MG 946 HR di un produttore di qualità migliore.

Per farla breve: acquista servi di qualità. Se dai tuoi servi esce fumo magico, usa servi migliori. 6V è una tensione molto sicura, non aumentarla. Non aumenterà la coppia, ma può danneggiare i servi.

Cablaggio per i servi come segue:

base 2

spalla2 4spalla1 3

gomito 6

pinza 8

polso 11

Sentiti libero di cambiarlo purché ti ricordi anche di cambiare lo schizzo di Arduino.

Dopo aver finito con l'hardware, diamo un'occhiata al quadro generale!

Passaggio 3: interfaccia MoveIt RobotCommander

Interfaccia MoveIt Robot Commander
Interfaccia MoveIt Robot Commander

E ora? Perché hai bisogno di MoveIt e ROS comunque? Non puoi semplicemente controllare il braccio tramite il codice Arduino direttamente?

Si, puoi.

Ok, ora che ne dici di usare la GUI o il codice Python/C++ per fornire la posa del robot a cui andare? Arduino può farlo?

Una specie di. Per questo dovrai scrivere un risolutore di cinematica inversa che prenderà una posa del robot (coordinate di rotazione e traslazione nello spazio 3D) e la convertirà in messaggi di angolo di giunzione per i servi.

Nonostante tu possa farlo da solo, è un sacco di lavoro da fare. Quindi, MoveIt e ROS forniscono una bella interfaccia per il risolutore IK (cinematica inversa) per fare tutto il pesante sollevamento trigonometrico per te.

Risposta breve: Sì, puoi fare un semplice braccio robotico che eseguirà uno schizzo Arduino hard-coded per passare da una posa all'altra. Ma se vuoi rendere il tuo robot più intelligente e aggiungere capacità di visione artificiale, MoveIt e ROS sono la strada da percorrere.

Ho realizzato un diagramma molto semplificato che spiega come funziona il framework MoveIt. Nel nostro caso sarà ancora più semplice, dal momento che non abbiamo feedback dai nostri servi e useremo l'argomento /joint_states per fornire al controller del robot gli angoli per i servi. Ci manca solo un componente che è il controller del robot.

Cosa stiamo aspettando? Scriviamo alcuni controller di robot, così il nostro robot sarebbe… sai, più controllabile.

Passaggio 4: codice Arduino per controller robot

Codice Arduino per controller robot
Codice Arduino per controller robot
Codice Arduino per controller robot
Codice Arduino per controller robot
Codice Arduino per controller robot
Codice Arduino per controller robot

Nel nostro caso Arduino Uno che esegue un nodo ROS con rosserial sarà il controller del robot. Il codice dello sketch Arduino è allegato a questo passaggio ed è disponibile anche su GitHub.

Il nodo ROS in esecuzione su Arduino Uno sottoscrive fondamentalmente l'argomento /JointState pubblicato sul computer che esegue MoveIt e quindi converte gli angoli del giunto dall'array da radianti a gradi e li passa ai servi utilizzando la libreria Servo.h standard.

Questa soluzione è un po' ingannevole e non come si fa con i robot industriali. Idealmente dovresti pubblicare la traiettoria del movimento sull'argomento /FollowJointState e quindi ricevere il feedback sull'argomento /JointState. Ma nel nostro braccio i servi dell'hobby non possono fornire il feedback, quindi ci limiteremo a sottoscrivere direttamente l'argomento /JointState, pubblicato dal nodo FakeRobotController. Fondamentalmente assumeremo che qualsiasi angolo passato ai servi venga eseguito idealmente.

Per maggiori informazioni su come funziona il rosserial potete consultare i seguenti tutorial

wiki.ros.org/rosserial_arduino/Tutorials

Dopo aver caricato lo sketch su Arduino Uno, dovrai collegarlo con il cavo seriale al computer che esegue l'installazione del ROS.

Per far apparire l'intero sistema eseguire i seguenti comandi

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

Ora puoi utilizzare i marcatori interattivi in RVIZ per spostare il braccio del robot in una posa e quindi premere Plan ed Esegui affinché si sposti effettivamente nella posizione.

Magia!

Ora siamo pronti per scrivere il codice Python per il nostro test di rampa. Be 'quasi…

Passaggio 5: (Facoltativo) Generazione del plug-in IKfast

Per impostazione predefinita, MoveIt suggerisce di utilizzare il risolutore cinematico KDL, che in realtà non funziona con meno di 6 bracci DOF. Se segui attentamente questo tutorial, noterai che il modello del braccio in RVIZ non può assumere alcune pose che dovrebbero essere supportate dalla configurazione del braccio.

La soluzione consigliata è creare un risolutore cinematico personalizzato utilizzando OpenRave. Non è così difficile, ma dovrai compilarlo e le sue dipendenze dall'origine o utilizzare il contenitore docker, a seconda delle tue preferenze.

La procedura è molto ben documentata in questo tutorial. È confermato che funziona su VM con Ubuntu 16.04 e ROS Kinetic.

Ho usato il seguente comando per generare il risolutore

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

e poi corse

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

per generare il plug-in MoveIt IKfast.

L'intera procedura richiede un po' di tempo, ma non è molto difficile se segui attentamente il tutorial. Se hai domande su questa parte, contattami nei commenti o in PM.

Passaggio 6: il test della rampa

La prova della rampa!
La prova della rampa!
La prova della rampa!
La prova della rampa!

Ora siamo pronti per provare il test di rampa, che eseguiremo utilizzando ROS MoveIt Python API.

Il codice Python è allegato a questo passaggio e disponibile anche sul repository github. Se non hai una rampa o vuoi provare un altro test dovrai cambiare le pose del robot nel codice. Per quella prima esecuzione

rostopic echo /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

nel terminale quando RVIZ e MoveIt sono già in esecuzione. Quindi sposta il robot con i marker interattivi nella posizione desiderata. I valori di posizione e orientamento verranno visualizzati nel terminale. Basta copiarli nel codice Python.

Per eseguire il test di rampa

rosrun my_arm_xacro pick/pick_2.py

con RVIZ e nodo rosserial già in esecuzione.

Resta sintonizzato per la terza parte dell'articolo, in cui utilizzerò la telecamera stereo per il rilevamento degli oggetti ed eseguirò la pipeline di prelievo e posizionamento per oggetti semplici!

Consigliato: