Prodotti

Roombot

Roombot

Ciao a tutti!!
Ecco finalmente il mio primo post su questo progetto su cui mi sto divertendo.

Il nome semi ufficiale è Roombot, in quanto sarà la base per realizzare tanti tipi diversi di robot che avranno funzioni specifiche in una casa/stanza.
Subito una domanda ed una risposta.. Perchè "semi-autonomo"? Perchè sono convinto che un robot totalmente autonomo sia qualcosa di ancora fuori portata per la robotica amatoriale, anche se giorno dopo giorni si fanno passi da giganti!
Quindi questa piattaforma vuole unire semplicemente le forze tra automazione e pensiero. Dopotutto lo spirito alla base dei robot è proprio l'automazione di processi che anche l'uomo sa fare, e che necessitano di ripetitività; se pensiamo che l'uomo nei lavori monotoni spreca ciò che sono le sue reali potenzialità, la robotica viene in aiuto per liberarci da tutti quei processi e quelle azioni che non necessitano del nostro intelletto.

Il progetto finale sarà un robot in grado di muoversi liberamente in una stanza di cui avrà memorizzato la mappa, di evitare ostacoli inattesi e di compiere determinate azioni.

Il processo di creazione è stato diviso nei suoi componenti essenziali: l'odometro per calcolare le dimensioni, il sensore di distanza dagli oggetti, il programma che registra i dati e li tramuta in mappa, i motori e la struttura.

Prima di arrivare a questa organizzazione mentale in realtà i passi sono stati vari.
Nei prossimi post un piccolo sunto e poi dritti alla meta, nell'attesa di reperire tutti i componenti necessari. wink

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Grande Saki e complimenti per la chiarezza espositiva. Scusate ma sono tiratissimo questi giorni e ho davvero poco tempo per postare. Dal 15 agosto vi daro' il cambio nella sperimentazione (da quella data saro' a Milano a lavorare per gioblu).
Magari appena tornato vi postero' i primi disegni e rendering di questo kit prossimo nascituro wink

gioscarab
Dott.
Admin
ranks
useravatar
Offline
1118 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Grassie! wink
Ci tengo che sia tutto chiaro e semplice.

Allora, eccoci al primo passo effettuato: l'interfacciamento con il radiocomando.

L'idea iniziale era infatti di interfacciarsi con qualche macchina R/C già posseduta.

Ho trovato la mia prima macchina radiocomandata ancora perfettamente funzionante.. si parla del '95 o giù di lì.. non li fanno più prodotti del genere! Sono passati 15 anni!

Dopo qualche ricerca, vana, per un datasheet dell'integrato usato per impartire i comandi tramite radiocomando (un vecchio L9362 a 14 piedini, ora prodotto a 28 piedini), ho deciso di non interfacciarmi direttamente a lui, ma di "simulare" con un Arduino i potenziometri usati per i due comandi essenziali: forward/backward e right/left.
Saldati due fili sulla pista giusta, a monte e a valle del potenziometro lineare per impartire l'avanzamento, ho prima eseguito alcuni test sui voltaggi in gioco.

Con un tester e un po' di pazienza ho trovato che (riporto i dati per far capire gli eventuali passaggi per capire come funziona un apparecchio elettronico di cui non sappiamo nulla):
1) a 0.64 (+-0.4) V avevo lo 0 dello slider (potenziometro lineare); macchina ferma.
2) a 1.10 (+-0.5) V avevo la massima velocità di forward.
3) a 0.14 (+-5) V avevo la massima velocità di backward.

A questo punto è stato facile costruire un mini circuito (con una semplicissima resistenza) per Arduino per avere circa 0.8 V, per avere un avanzamento lento.
E con due righe di codice:

Codice:


const int accPin = 12;  // Pin per l'output del comando
const int ledPin = 13;  // Pin del led integrato su Arduino
void setup() {
  pinMode(accPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
}
void loop() {
    digitalWrite(ledPin, HIGH);
    digitalWrite(accPin, HIGH);
    delay(3000);
    digitalWrite(ledPin, LOW);
    digitalWrite(accPin, LOW);
    delay(7000);
}

Ho ottenuto questo (scusate per la qualità davvero bassa del video e la luminosità pessima):



Con un filtro passa-basso (una semplicissima resistenza con un condensatore) avrei usato i segnali PWM dell'Arduino per generare tensioni analogiche, e quindi far variare la velocità, il senso di marcia e le sterzate.

Fatti i primi test è sorto un piccolo problema.. sarebbe comunque servito un Arduino sulla macchina per leggere i sensori (anche se avrei potuto usare 2 canali ancora non utilizzati dal radiocomando, ma le prestazioni e l'autonomia del robot ne avrebbero risentito moltissimo), così l'idea iniziale di comandare tutto via pc e Processing è sfumata in virtù di una soluzione più economica e funzionale, quindi di un solo Arduino sulla macchina (o piattaforma di sviluppo),  per muoversi, elaborare i sensori e memorizzare la mappa.

Ed eccoci al secondo passo.

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Dicevamo.. secondo passo: l'Odometro.

Rinunciato ad interagire sul radiocomando ho ragionato sul da farsi ed ho elaborato la scaletta postata nel primo articolo; questa:

    1. odometro,
    2. sensore di distanza,
    3. programma per la mappa,
    4. motori e struttura.


L'odometro dovrebbe servire per calcolare gli spostamenti del robot nella stanza e tramutare queste informazioni in una mappa precisa, dialogando con Arduino.
Per la sua realizzazione, dato che questo Roombot è un prototipo, mi sono affidato a componenti che già avevo in casa.
Le alternative erano due: cercare un encoder da qualche parte o smontare un mouse e tramutarlo in ciò che mi serviva.

Per prima ho vagliato la seconda ipotesi, dato che sul momento non pensavo di avere un encoder compatto disponibile in casa.

Ho preso un mouse di quelli vecchi a pallina, l'ho smontato, ed ho cominciato a testare l'encoder IR presente.
Come passo successivo, per cercare di miniaturizzare il tutto, ho usato un sensore IR smd preso dal meccanismo di una macchina fotografica, l'ho saldato su una basetta e l'ho attaccato a quello che rimaneva del mouse, ottenendo questo:
http://www.gioblu.com/components/com_agora/img/members/20/mini_IMAG0062-mod.png
http://www.gioblu.com/components/com_agora/img/members/20/mini_IMAG0060-mod.png

Ed ecco il codice per misurare con una precisione di 5 mm.

Codice:

int analogPin1 = 7;

int analogPin2 = 5;
int val = 0;
int oldval = 0;
int count = 0;
int fivemm = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  val = analogRead(analogPin1);
  //val = analogRead(analogPin2);
  Serial.println(val);
  if(val > 500 && oldval < 500){
    // Conta perchè è un valore diverso
    count++;
    if(count >= 4){
      count = 0;
      fivemm++;
    }
    //Serial.println("Count: " + count);
    Serial.print("Misura: ");
    Serial.println(fivemm*5);
  }
  oldval = val;
  delay(200);
}

Il sistema funzionava bene, ma il sensore smd non prevedeva l'individuazione del verso della rotazione, cosa che il sensore originale aveva.
Per non rinunciare alla miniaturizzazione, essenziale per un progetto di questo tipo, mi sono ingegnato diversamente.. ed alla fine mi sono ricordato una banalità, sempre legata ai mouse.. le rotelle usano proprio un encoder miniaturizzato e già assemblato, che legge sia la velocità, sia il verso, senza led, ma con un sistema altrettanto valido di interruttori sfalsati (vedremo in seguito quali problematiche e quali vantaggi avrà).

Nel prossimo post metterò foto e test di questo encoder ed il codice per Arduino per poterlo leggere.

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Beh questo post al suo compimento merita di finire tra gli articoli!! wink
Complimenti davvero. Mi chiedevo, il filtro passa-basso (low pass) è necessario? non ti basta filtrare il dato via sw??

Spiegaci meglio dell'odometro!!

gioscarab
Dott.
Admin
ranks
useravatar
Offline
1118 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

big_smile
Grassie! Anni di relazioni tecniche di laboratorio finalmente servono a qualcosa. wink

Allora, tanto che preparo il resto chiarisco bene il discorso generico sui PWM ed il filtro, poi preparo un approfondimento sull'odometro.

Purtroppo il filtro passa-basso o una soluzione diversa sono indispensabili perchè Arduino non è in grado di regolare via software i volt in uscita; tutto perchè voglio "simulare" un potenziometro, quindi poter avere diversi voltaggi.
Per farlo servirebbe un DAC, un convertitore digitale-analogico che genera diversi voltaggi a seconda del segnale digitale che gli arriva.
Ci sono un buon numero di DAC che si possono realizzare, uno dei più semplici (con Arduino) è quello che usa n uscite di un microcontrollore (per avere n-bit di risoluzione, quindi n tensioni disponibili), connesse ad altrettante resistenze ed a loro volta connesse tra loro da resistenze di valore 1/2, si chiama R-2R.
Lo svantaggio di questa tecnica è che le n uscite sono occupate in esclusiva per questo processo, la precisione è direttamente proporzionale alla tolleranza delle resistenze ed al numero di uscite che usiamo, in più il numero di tensioni che possiamo generare è fisso e limitato dalla risoluzione dello strumento.

Per fortuna c'è un altro metodo davvero comodo per ottenere tensioni analogiche da un segnale digitale, l'uso dei PWM con un filtro passa-basso.
Vantaggi: uso di una sola porta PWM, generazione di un range di tensioni davvero ampio con una sola porta, semplicità di realizzazione ed economicità imbattibili.
Questo articolo spiega molto bene come realizzare il tutto, dimensionare il filtro e, nel caso si voglia un'ottima precisione, aggiungere qualche componente.

Per il mio scopo, dove i valori delle tensioni variano da +-0.4 a +-0.5, non sarebbe stato necessario aggiungere altro.

Ecco spiegato a cosa serviva il filtro. wink

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Bene io sono tornato. Saki se hai tempo io son disposto a buttare giu i disegni con le modifiche necessarie ad alloggiare il sistema da te pensato (magari vediamolo assieme). Aggiornaci!!

gioscarab
Dott.
Admin
ranks
useravatar
Offline
1118 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

@saki ma i sensori infrarossi del mouse non sono doppi?
con il tuo setup dovresti poter leggere sia il quantitativo di passi sia la direzione per entrambi gli assi, del resto sono sempre encoder di quadratura che sopperiscono alla mancanza dell'altra striscia di finestrelle con un sensore doppio e sfalsato monolitico:)
http://www.gioblu.com/index.php?option= … ;Itemid=18
Per chi fosse interessato a come funzionano i mouse, questo datasheet spiega un sacco di cose...
http://datasheet.digchip.com/140/140-00 … M84510.pdf

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

gioscarab ha scritto:

Bene io sono tornato. Saki se hai tempo io son disposto a buttare giu i disegni con le modifiche necessarie ad alloggiare il sistema da te pensato (magari vediamolo assieme). Aggiornaci!!

Ok, ottimo!
Io sto studiando tre tipi di aspirazione, tutti con spazzole sulla bocca aspirante e:
.uno con bocca aspirante collegata ad un tubo snodato lungo il perimetro che termina nel motore aspirante,
.un altro con motore aspirante perpendicolare alla bocca,
.il terzo con motore aspirante parallelo alla bocca.
Questo per valutare come varia la forza aspirante a parità di motore usato e diverso percorso d'aspirazione.
Per i test ho recuperato 2 motori, uno a 6V e l'altro a 24V, entrambi muniti di filtro e pale.

Per i disegni benissimo, e sono disponibile, tanto sono qui tutto agosto. Come ci organizziamo? Ti tengo aggiornato sulle prove di aspirazione e poi studiamo come fare la struttura o preferisci che studiamo insieme tutto il processo?
Se avete idee o proposte fatevi avanti, così le proviamo insieme! wink

@Brain:
Sì sì sono doppi! Ma io volevo rendere il tutto molto compatto e più piccolo possibile, così l'encoder della rotella del mouse mi sembrava la soluzione migliore, ha la ruota di riferimento e il sensore tutto insieme in un unico blocco, molto piccolo, facile da usare e montare. Ma se pensi che i sensori della pallina vadano meglio possiamo anche muoverci in quella direzione.
Faccio due foto, posto il codice (davvero corto e semplice) per l'encoder ed un po' di misure, così valutiamo pro e contro.

P.s.: Brain sei il re dei link! Hai sempre almeno 2 link per ogni argomento! wink

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot


Brain sei il re dei link! Hai sempre almeno 2 link per ogni argomento!

Grazie saki, i link servono per rinforzare i concetti che esprimo...
Gli encoder della pallina del mouse sono più precisi e pilotabili con torsioni prossime allo 0, oltre che potresti collegarli alle ruote tramite cinghia o ingranaggi.. (eviterei di usare la pallina che fà da raccoglipolvere).

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Se sono più precisi ci devo fare un pensierino sopra allora!
Però bisognerebbe realizzare una struttura ad hoc e cercare di renderla piccola.. vediamo cosa viene fuori.

Tra poco carico i dati con l'encoder della rotella, così vediamo un po'; i dati con il sensore a led già li ho, dato che era la prima prova.. anzi ho trovato due emettitori-ricevitori smd minuscoli presi da una vecchia macchina fotografica, basterebbe montarli sfasati e saremmo a cavallo!

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Gli encoder (dello scroll) hanno mediamente 23 step, conta le finestrelle di quelli del movimento e vedi subito la differenza!
La cosa più semplice è tagliare con le forbici tutto il pezzo di pcb che monta ricevitore/i e trasmettitore e saldarci i fili sù, per poi "Dremellare" intorno la struttura di plastica che regge le rotelle per trasportarla nel progetto così com'è.
I ricevitori ir dei mouse sono doppi e già sfalsati il giusto.
Con la trasmissione a cinghia/molla potresti avere anche una diversa risoluzione interpolata o estrapolata a seconda dei rapporti pignone corona smile

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Sì ma quelli proprio del mouse sono belli grossi, con anche la ruota è qualcosa di un po' "mastodontico".. quelli della fotocamera, che vedi anche nelle foto del mio progetto Roombot sono minuscoli, solo che nn credo siano doppi.. ci guardo un attimo..

L'idea di regolare la risoluzione con dei rapporti è ottima, così x progetti diversi si potrebbe realizzare lo stesso sensore con rapporti diversi! wink

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Allora, ho fatto due prove con l'encoder della rotella, ora misura 25+-2 punti per 40mm, quindi 1.6mm ogni punto; contando che ne servono due per determinare la direzione dovrei avere una risoluzione teorica di 3.2mm (che poi è circa la misura dell'arco di polpastrello minima che il mouse tramuta in spostamento verticale).
Ora mi chiedo una cosa però.. la risoluzione è proporzionata allo strumento di misura e all'oggetto che voglio misurare?
Ho una risoluzione di qualche mm contro una dimensione media del robot di circa qualche decina di centimetri, sono 2 ordini di grandezza di scarto; poi ho un oggetto, la camera, che come massimo ha dimensioni (lineari) di qualche metro, come minimo le dimensioni del robot.
Secondo me come risoluzione è più che sufficiente! Anzi, ci sono gli estremi per risparmiarsi un filtro sui dati, tanto l'errore (circa 2 punti,  quindi 3.2mm) è davvero minimo, e sicuramente correggibile con un sensore di contatto, più preciso di un IR o di un sonar nelle misure molto piccole; a questo punto addirittura leverei dal progetto il sensore di distanza.
IMHO!
Cosa ne pensi?

P.s.: volendo, con un'altra funzione a cui ho pensato, si potrebbe minimizzare il numero di punti della risoluzione minima, portandolo ad 1, ma dopo queste considerazioni credo che non serva neanche.

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

In linea di massima sono daccordo,
però pensavo che una risoluzione di 1.5mm significa che la quantità minima apprezzabile (e quindi l'approssimazione) equivale a 1.5mm per giro! sommando i giri in un metro diventa un bel numerillo!
se userai quei dati per il mapping dell'ambiente potresti trovarti qualche dato "esoterico" smile
ma tutto dipende dalla destinazione d'uso del dato letto..

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Sì giusto, ma sarebbe 41mm circa su un metro.. non è poco, ma neanche tanto. tongue
Per questo prevedevo un sensore di contatto, per eliminare questo errore sistematico.

Comunque ho tenuto montato il sistema dei sensori-mouse-pallina così potrò fare una prova sul campo! wink

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

ma il gruppo pallina/sensori l'hai montato sotto una molla per tenerlo premuto al suolo?
come fai a dare la pressione giusta affinchè non si perdano steps?  sopratutto se le superfici sono liscie..
se fai 2 volte la stessa strada otterrai 2 valori uguali? (ripetibilità della misura)

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Alt! wink
Il modello con la pallina è per puro test! La versione finale di prova on-board sarà collegata direttamente alle ruote.

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Un rapido update della situazione.
Prima di spiegare bene le differenze tra odometro realizzato con i sensori della pallina del mouse e quello realizzato con l'encoder della rotella centrale, faccio un breve aggiornamento del progetto, che ha ricevuto alcune modifiche.

Come potete leggere dai post precedenti, l'idea dell'odometro con i sensori della pallina del mouse non è stata completamente abbandonata, dato che presenta alcuni vantaggi, come la maggiore risoluzione (valore minimo di misura), grazie alle osservazioni di Brainbooster il prototipo non è stato smantellato e verrà tenuto in considerazione per i test appena arriverà la piattaforma.

Per quanto riguarda il sensore di distanza invece sembra che non ce ne sia bisogno.
Infatti calcolando statisticamente l'errore massimo dell'encoder della rotella del mouse, circa 4cm ogni metro (i calcoli saranno nel post esteso sugli odometri), abbiamo uno scarto di distanza da un oggetto inferiore alla sensibilità della maggior parte dei sensori in commercio a basso costo.
Se valutiamo che quello dell'encoder della rotella del mouse è l'errore massimo del sistema meno preciso, potremmo avere errori anche inferiori, e correggerli con un sensore di distanza poco preciso o che non misuri dimensioni inferiori ai 2/3cm potrebbe essere più un danno che un vantaggio.
Così al posto dei sensori di distanza subentrano alcuni sensori di contatto (rimane da valutare se semplici interruttori o sensori di flessione), in grado di allertare il robot ad almeno 2/3cm dall'ostacolo.

Per aggiungere features e possibilità al Roombot, come upgrade successivo, si potrà valutare l'impiego di sensori di distanza per capire dimensioni e posizione di un ostacolo imprevisto, che possa poi essere aggirato o spostato in qualche modo; ma per ora vogliamo che le funzioni base siano massimizzate, chiare e ben realizzate, così questa idea sarà tenuta come upgrade e non come caratteristica principale.

Questi gli aggiornamenti rapidi, a presto con un post sugli odometri e la continuazione del progetto Roombot, in particolare con il cervello del robot finalmente, il sistema di mapping!

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Ok, allora il discorso cambia...
però sono comunque curioso di sapere come andrà a finire al battaglia di precisione encoder ottico Vs encoder meccanico smile

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Eheh mi hai messo una bella curiosità anche a me! Appena arriverà la piattaforma farò una prova pratica collegando il tutto alle ruote, uno a destra ed uno a sinistra, così ci sarà esattamente contemporaneità della misura.

Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Quale piattaforma userai?

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.
Saki_Kawa
Maniaco
ranks
useravatar
Offline
374 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

chiaro, ma quale?
octagon
pico
altro?

The quieter you become, the more you are able to hear

Brainbooster
il
GranMaestro
ranks
useravatar
Offline
1865 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Re: Roombot

Saki sarà il primo ad avere per le mani le superfici octagon!!  wink

gioscarab
Dott.
Admin
ranks
useravatar
Offline
1118 Messaggi
Info utenti nei messaggi
Per rispondere ai messaggi devi essere registrato.

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com · Via Savona 123 20146 Milano MI · PI 06977550968 · Codice fiscale MTLGNN86S09F205F

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi