Posizionamento braccio robot

Sul posizionamento braccio robot ti mostro questo secondo articolo in leggerai come programmare il tuo robot arm per spostare oggetti.

Posizionamento braccio robot arance

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.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/bricolage/posizionamento-braccio-robot.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.