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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/bricolage/posizionamento-braccio-robot.html

2 commenti

    • Paglia il 31 Ottobre 2019 alle 18:14
    • Rispondi

    Buongirno
    volevo chiedere è possibile mettere il braccio in pausa il braccio dopo una serie di sequenze.
    grazie.

    1. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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