Il ritorno di Arianna, tutto cambia.

Il ritorno di Arianna.

L’articolo precedente su Arianna, il robot bibliotecario, risale a dicembre. Anche se apparentemente i cambiamenti sono pochi per il nostro robot letterato la frase “tutto cambia affinché nulla cambi”  non vale.  Un grosso lavoro è stato fatto, molte le cose imparate e che condivideremo con voi. La cadenza degli articoli sarà settimanale e manterremo la continuità.
StuffCube è un luogo di incontro reale e non virtuale, siamo il mercoledì e giovedì sera alla biblioteca di Canegrate e l’ingresso è libero.
A
rianna serve per imparare come si fa un robot, non per usarne uno già fatto!

A dicembre Arianna era fatto con una meccanica basata su sterzo di Ackerman, il classico sistema di curvatura delle automobili, e aveva la trazione posteriore, era capace di seguire lo scaffale della biblioteca grazie ad un sensore ad infrarossi, misurava la distanza percorsa tramite un sensore sull’asse posteriore, partiva comandato da un bottone. Aveva anche dei fratelli e delle sorelle che avevano scelto motorizzazioni diverse.

Arianna oggi

La struttura: Viste le caratteristiche dei fratelli, Arianna oggi è basata su un kit con due ruote motorizzate e una ruota castor anteriore. Il testo “Autonomous Mobile Robot Mechanical Design”
contiene una chiara presentazione dei vari tipi di scelte fattibili sul movimento di macchine, partendo da un semplice robottino sino a una ruspa passando attraverso l’Ape car. Leggendolo abbiamo scoperto le ruote ominidirezionali, mostrate nel video seguente

Tornando a noi la meccanica è basata su un kit reperibile su Amazon, kit che era stato usato da “Ambros”. È un sistema a tre ruote con due ruote fisse, motorizzate e indipendenti, la terza è una ruota piroettante castor.

51eazpp-s2l
È stato scelto per diversi motivi. Il primo era dare la possibilita di avere un oggetto che chiunque potesse facilmente ed economicamente riprodurre. L’arianna ottenuta modificando una macchinina giocattolo è un esercizio istruttivo ma richiede tempo e manualità che non tutti hanno. Questo permette di fare esperienza e sviluppare software in poco tempo.
Inoltre la struttura a due motori separati permette un mobilità molto superiore allo sterzo classico.  Il kit contiene anche i dischi encoder che servono per rilevare lo spostamento delle ruote e da questo identificare dove va Arianna (odometria).

Arrivato il kit è stato adattato per ospitare l’elettronica precedente. La scelta fatta di usare una piastra aggiuntiva che raccogliesse tutta l’elettronica ha permesso un “trapianto abbastanza semplice. Una nuova struttura è stata fatta sul kit per accogliere la piastra elettronica e sono stati collegati i motori, uno destro e uno sinistro, e in sensori degli encoder. La scheda Arduino è passata dal modello “Uno” alla “Mega 2560”. Vedremo nei prossimi articoli che il cambio si è reso necessario per gestire sotto interrupt anche gli encoder delle ruote.

Nelle foto la meccanica attuale. Per le connessioni meccaniche in questo modello si fa largo uso di connessioni usando delle mollette che si trovano in cartoleria.

Tramite opportune fessure fatte col seghetto è possibile unire pezzi meccanici in maniera robusta, veloce e facilmente smontabile.

piastra controllo montata su base. Da sinistra, batteria. ATmega 2560, pan e tilt con sonar montato

piastra controllo montata su base. Da sinistra, batteria. ATmega 2560, pan e tilt con sonar montato

base: vista superiore

base: vista superiore

base: vista inferiore

base: vista inferiore

Come sterza Arianna

Avendo due ruote motrici indipendenti è facile intuire che la direzione viene stabilita dalla velocità delle ruote, se vanno alla stessa velocità Arianna procederà diritta, con velocità diverse curverà più o meno. Dall’intuizione passiamo alla pratica che in questo caso è matematica.

formulacurva

moto circolare uniforme intorno a un punto. w è la velocità angolare, Vi,Vc, Ve le velocità tangenziali alla distanza ri, rc, re

Ve = re*w            velocità ruota esterna, re raggio curva ruota e(sterna)
Vi  = ri*w            velocità ruota interna, ri raggio curva ruota i(nterna)
Vc  = rc*w           velocità punto centrale, rc raggio curva punto centrale

w = Vc/rc            velocità angolare

Ve = re*Vc/rc
Vi = ri*Vc/rc

a = carreggiata, distanza tra le due ruote motrici.

Re = rc + a/2
Ri = rc – a/2

Ve = (rc + a/s)*Vc/rc = Vc + Vc*a/(2*rc) = Vc*(1 + a/(2*rc))
Vi  = (rc – a/s)*Vc/rc  = Vc – Vc*a/(2*rc) = Vc*(1 – a/(2*rc))

Detto:
S = a/(2*rc)        scorrimento tra le ruote
V = Vc                 velocità di Arianna

possiamo scrivere:
Ve= V*(1+S)
Vi= V*(1-S)

Le formule sopra ci mostrano come imporre la velocità di Arianna (V) su una curva di raggio rc imponendo il parametro S.

  • Con S=0 abbiamo le ruote che viaggiano alla stesso velocità e quindi andiamo diritti, notiamo che S diventa zero se il raggio di curvatura rc tende a infinito.
  • Se S vale 1 abbiamo che Vi vale zero, Arianna girerà su se stessa con una ruota ferma, la formula ci mostra che S vale uno quando rc = a/2, cioè il raggio di curvatura è pari a mezza carreggiata.
  • Quando S supera l’uno Vi girerà in senso negativo portando Arianna a ruotare sempre più su se stessa, sempre la formula mostra che con rc tendente a zero S tende a infinito.

 

 

 

 

Il codice che realizza questa funzione è riportato sotto, S è limitato tra +/- 1.

/* sterzo con differenziale
raggiorSterzo indica lo scorrimento che applichiamo alle ruote
VA = motorSpeed*(1-s)
VB = motorSpeed*(1+s)

S_NEUTRO è il valore per andare diritto
si ottiene per taratura (prova)
*/
void differenziale(float motorSpeed){
static float rs;

   if (direzione)    rs = raggiorSterzo + S_NEUTRO_FWD;
   else            rs = raggiorSterzo - S_NEUTRO_REV;

   if (rs >  1.0) rs =  1.0;
   if (rs < -1.0) rs = -1.0;

   VA = motorSpeed*(1.0+rs);
   VB = motorSpeed*(1.0-rs);

  if (VA > 255) VA = 255;
  if (VA <   0) VA =   0;

  if (VB > 255) VB = 255;
  if (VB <   0) VB =   0;

  if (direzione){
     driver.motorAReverse(VA);
     driver.motorBReverse(VB);
  }
  else{
     driver.motorAForward(VA);
     driver.motorBForward(VB);
  }
}

Abbiamo così lo strumento per fare sterzare Arianna.
La misura della distanza dal bordo l’abbiamo visto in arianna-e-i-suoi-fratelli-sperimentare-soluzioni/
Abbiamo tutti gli elementi per fargli seguire la libreria: Col prossimo articolo parlkeremo del concetto di sistema di controllo con retroazione.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...