Siamo molto pigri. Questa cosa e` accertata. E` per questo che parlando tra noi, un giorno, abbiamo deciso di avventurarci nella costruzione di un robot. Un robot vassoio, che possa portare le bevande e i cibi dalla cucina fino al divano del soggiorno. Abbiamo fatto due conti e due ricerche e abbiamo compreso quanto difficile possa essere realizzare un “giocattolo” del genere. I problemi sono tanti. In particolare, quelli legati allo SLAM, ovvero la capacita` del robot di autocostruirsi una mappa dell’ambiente, localizzarsi all’interno di essa e navigare autonomamente, magari facendo tutto questo su una piattaforma embedded.

Abbiamo cosi` deciso di iniziare da qualcosa di piu` semplice, tenendo in mente l’obbiettivo finale. Una serie di prototipi, per iniziare a giocare un po` con i sensori, ci hanno aiutato a comprendere meglio il pasticcio in cui ci stavamo imbrigliando.

E` nato cosi` GigginoBot 1.0, unendo Arduino Uno e un sensore SR04 ad ultrasuoni alle parti di un vecchio robot che avevamo.

GigginoBot

GigginoBot

Con uno sketch di poche decine di linee e sfruttando la libreria NewPing, il piccolo bot riusciva a muoversi evitando molti degli oggetti che trovava sul proprio cammino. Ovviamente, aveva tanti limiti. Un solo sensore ad ultrasuoni ha una visione di pochi gradi ed e` poco performante nel rilevare superfici che non lasciano rimbalzare l’ultrasuono. Inoltre, la struttura del robot imponeva forti limiti di spazio, che ci avrebbero creato problemi, qualora avessimo voluto introdurre la computer vision. Lo spazio richiesto per l’inserimento di una camera e di  hardware piu` potente, oltre che alla relativa alimentazione, ci suggeriva di aumentare le dimensioni.

GigginoBot 2.0

GigginoBot 2.0

Partendo da una cassa di legno, che inizialmente conteneva tre pregiate bottiglie di vino, ha preso forma GigginoBot 2.0, la naturale evoluzione del primo prototipo. Nella parte inferiore della cassa, sono state applicate le tre ruote. Due sono motrici ed una, quella anteriore, e` in grado di ruotare lungo il suo asse grazie ad un cuscinetto a sfere.

GigginoBot 2.0: ruote e motori

GigginoBot 2.0: ruote e motori

La visione frontale e laterale e` affidata a due sensori a ultrasuoni, ancorati a due staffe di metallo e resi mobili tramite l’ausilio di due servomotori. La mobilità dei sensori consente di avere un maggiore angolo di visuale, rispetto ad una configurazione non mobile, oltre alla possibilita` di usare i sensori per i rilevamenti laterali, senza necessita` di far muovere l’intero corpo  del bot. Le limitazioni della tecnologia ad ultrasuoni, impongono l’uso di un sensore ad infrarossi. Questo e` stato posizionato  nella paratia frontale ed e` fondamentale per la rilevazione di corpi invisibili agli ultrasuoni

GigginoBot2.0: sensori ausiliari

GigginoBot2.0: sensori ausiliari

Sono stati aggiunti anche un sensore PIR, un DHT11 di umidita` e temperatura, uno di luminosita`, uno di suono e un ulteriore sensorore ad infrarossi utile per il line following e per rilevare la presenza di gradini da evitare. L’interno della scatola, racchiude Arduino, un accellerometro a tre assi e i due pacchi batteria, rispettivamente per l’alimentazione dei motori e dell’Arduino.

GigginoBot 2.0: parte interna

GigginoBot 2.0: parte interna

Lo sketch e` di circa 400 linee di codice. Allo stato attuale il bot utilizza solo una parte dei sensori: i due ad ultrasuoni, l’infrarosso centrale, quello di temperatura. Tutta la programmazione e` stata fatta intorno alla libreria NewPing, che permette di strutturare con facilita` un programma per la navigazione autonoma, basata sulla rilevazione di piu` sensori e con l’ausilio degli interrupt di Arduino. Attivato il bot tramite il pulsante di accensione, esso funziona nel modo seguente:

  1. viene rilevata la temperatura dell’ambiente, che verra` usata per migliorare i calcoli relativi alla rilevazione ad ultrasuoni, poiche` la velocita` del onda emessa dal sensore varia al variare della temperatura dell’aria;
  2. il bot inizia ad andare avanti mentre l’infrarosso centrale e gli ulltrasuoni rilevano anterirmente la presenza di ostacoli. Gli ultrasuoi compiono una rotazione di 30 gradi, assicurando una visione anteriore completa;
  3.  se viene rilevato un ostacolo da uno dei  due sensori ad ultrasuoni, il bot vira nella direzione opposta, fin quando entrambi i sensori piu` l’ultrarossi non rilevano via libera.
  4. se tutti e tre i sensori di visione frontale rilevano un ostacolo, il bot ruota i sensori ad ultrasuono in modo da opporli l’uno con l’altro ed avere una visione laterale. In questa configurazione  valuta quale lato abbia maggior mobilita`, dopodiche` riposiziona i sensori anteriormente e inizia a girare verso quella direzione, fin quando non avra` sufficente spazio per andare avanti.

Un video dimostrativo e` a seguito.

La prossima evoluzione prevede l’uso della computer vision, per identificare un volto e poi seguirlo. STAY TUNED! 🙂