Sul posizionamento braccio robot ti mostro questo secondo articolo in leggerai come programmare il tuo robot arm per spostare oggetti.
Nei precedenti articoli hai già letto ed imparato a controllare il robot con diversi sistemi di interfaccia ed inviargli delle posizioni angolari per i servo in modo che possa compiere movimenti ripetitivi.
E’ giunto il momento di unire le conoscenze aquisite e procedere al posizionamento braccio robot in modo che possa spostare degli oggetti.
Posizionamento braccio robot
Il posizionamento braccio robot è un argomento che leggerai spesso in quanto è oggetto di numerosi studi e apre le porte all’applicazione della geometria piana, della trigonometria e di altre discipline interessanti.
In ogni articolo leggerai un nuovo concetto od un nuovo principio applicato in modo pratico alla robotica.
Per questo esperimento userai lo sketch già descritto nell’articolo delle ripetizioni e partendo dalle conoscenze acquisite procederai ad applicarle per ottenere questo risultato:
come hai visto il braccio robot è stato programmato per eseguire diversi movimenti sequenziali e non solo una singola ripetizione come nei precedenti esperimenti.
Ogni esperimento è utile e valido per verificare nuovi concetti ed il posizionamento ripetitivo ti ha mostrato il grado di precisione del robot nel ripetere dei movimenti sempre identici.
Compreso quel passaggio puoi scrivere una sequenza di movimenti che faccia più operazioni, sempre in un ciclo programmato ma che ti permetta di spostare degli oggetti da un punto ad un altro.
In fondo è quello che accade anche nella robotica tradizionale:
o quasi …
La sequenza per il posizionamento braccio robot
Per utilizzare il braccio robot come nel video è necessario che tu esegua una serie di movimenti controllati via seriale per posizionare il robot e crei una sequenza di movimenti come la seguente:
90,90,90,90,0
110,90,130,90,0
110,63,130,90,50
110,90,110,90,50
30,90,110,90,50
30,63,110,90,0
30,90,110,90,0
90,90,130,90,0
90,63,130,90,40
90,90,110,90,40
40,90,110,90,40
40,63,110,90,0
40,90,110,90,0
70,90,130,90,0
70,63,130,90,40
70,90,110,90,40
45,90,110,90,40
45,63,110,90,0
45,90,110,90,0
90,90,90,90,75
ottenuta e testata la sequenza di movimento potrai passare ad includerla nello sketch di esempio, già visto ed analizzato nell’articolo Ripetizioni del Braccio Robot e avviare il robot perchè esegua quanto da te definito.
Lo sketch posizionamento braccio robot
lo sketch che ti riporto è quello che hai visto nell’articolo citato al paragrafo precedente e nel quale trovi la spiegazione passo-passo:
#include <Servo.h> Servo base; // 1 0 - 180 Servo shoulder; // 2 140 - 37 Servo elbow; // 3 65 - 140 Servo wrist_rot; // 4 0 - 180 Servo gripper; // 5 0 - 75 byte pos[5] = {90,90,90,90,75}; byte oldpos[5] = {90,90,90,90,75}; byte seq[][5] = { {90,90,90,90,0}, {110,90,130,90,0}, {110,63,130,90,50}, {110,90,110,90,50}, {30,90,110,90,50}, {30,63,110,90,0}, {30,90,110,90,0}, {90,90,130,90,0}, {90,63,130,90,40}, {90,90,110,90,40}, {40,90,110,90,40}, {40,63,110,90,0}, {40,90,110,90,0}, {70,90,130,90,0}, {70,63,130,90,40}, {70,90,110,90,40}, {45,90,110,90,40}, {45,63,110,90,0}, {45,90,110,90,0}, {90,90,90,90,75,} }; void setup() { Serial.begin(115200); base.attach(11); shoulder.attach(10); elbow.attach(9); wrist_rot.attach(6); gripper.attach(5); base.write(pos[0]); shoulder.write(pos[1]); elbow.write(pos[2]); wrist_rot.write(pos[3]); gripper.write(pos[4]); Serial.println( "#### START ####" ); delay( 5000 ); } void loop() { Serial.print( "Seq Len: " ); Serial.println( sizeof(seq) ); for ( byte line=0; line < (sizeof(seq)/5); line++ ) { Serial.print("Seq["); Serial.print(line); Serial.print("]:"); for( byte i=0; i<5; i++ ) { Serial.print(" "); Serial.print(seq[line][i]); pos[i] = seq[line][i]; } Serial.print("\n"); goPos(0,base,15); goPos(1,shoulder,15); goPos(2,elbow,15); goPos(3,wrist_rot,15); goPos(4,gripper,15); } } void goPos(byte servo, Servo instance, byte pause) { if (oldpos[servo] >= pos[servo]) { for ( byte i = oldpos[servo]; i > pos[servo]; i--) { instance.write(i); delay(pause); } } if (oldpos[servo] <= pos[servo]) { for ( byte i = oldpos[servo]; i < pos[servo]; i++) { instance.write(i); delay(pause); } } oldpos[servo] = pos[servo]; }
nota come per la realizzazione del posizionamento braccio robot alle linee 12-33 hai incluso la sequenza trovata precedentemente e che consente al robot di eseguire i movimenti.
Nei prossimi articoli dedicati al movimento del braccio proverai a controllare la posizione del braccio in altri modi e con interfacce differenti.
2 commenti
Buongirno
volevo chiedere è possibile mettere il braccio in pausa il braccio dopo una serie di sequenze.
grazie.
Autore
Ciao Paglia,
la tua richiesta la interpreto in due modi, su cui ti chiedo maggiori delucidazioni:
1. pausa delle componenti elettroniche al fine di risparmiare energia
2. fermo movimenti in attesa di ulteriori comandi
Nel primo caso rischi che in presenza di posizioni sottoposte a carichi superiori a quelli compensati dalla meccanica dei servo stessi la posizione cambi rispetto a quella attesa, in tal caso non potresti essere certo della posizione raggiunta;
Il secondo caso è più semplice: puoi definire un criterio di pausa, es la pressione di un pulsante, e attendere fino a quando il medesimo pulsante o un’altro evento intervenga ad attivare nuovamente il movimento.