Scansione del terreno

Ciao a tutti! Il mio progetto, nonostante ritardi dovuti piu' per vari problemi esterni che per altro, sta procedendo spedito :) Grazie al forum e alla miriade di tutorial in rete mi e' balenata l'idea che per creare la vista al mio robottino, mi piacerebbe molto creare uno scanning del terreno. So che non e' una roba semplicissima ma forse non e' cosi' complessa da essere impossibile.

Possiedo 3 SRF05 ma ho notato che non hanno la precisione che un sensore ad infrarosso puo' fornire. Per precisione intendo un punto sparato nello spazio; i sensori SRF05 non sparano un punto ma una specie di bolla. Parlo di punti perche' un punto, se mosso a dovere puo' tracciare qualsiasi cosa con un'elevata precisione; proprio quello che ho in mente.

Ho trovato questo: http://www.robot-italy.com/it/3520-sharp-distance-sensor-2d120x-4-30cm.html

Che ne pensate? L'infrarosso, purtroppo so che ha alcune problematiche sopratutto quando "punta" fonti di calore o luci intense. Conoscete qualcosa, magari che usi il laser, di economico, che mantenga le stesse caratteristiche (o megliori) di portata? In questo caso la portata e' da 4cm a 30cm. Non male, ma mi piacerebbe molto trovare qualcosa tipo da 1cm a 1metro.

Voi, se doveste creare una scansione del terreno, sopratutto per esterni, cosa utilizzereste? In poche parole, sapete darmi qualche dritta per iniziare un ragionamento riguardo questa affascinante materia della scansione 3d del terreno?

Grazie in anticipo!

Ciao, non sono molto esperto in materia, però una volta feci delle prove con un sensore di distanza ad infrarossi autocostruito e sinceramente non mi sono trovato molto bene, vuoi per la scarsa qualità del sensore, vuoi per un lato software non ottimizzato, al contrario mi trovai molto meglio con gli ultrasuoni...

Comunque, hai preso in considerazione il kinect? Leggendo "scansione 3d" è la prima cosa che mi è venuta in mente e mi ricordo che una volta in rete trovai un intero libro su come utilizzarlo per fare delle scansioni 3d, mi pare si chiamasse "Making things see"...

Pelodiulo: Comunque, hai preso in considerazione il kinect? Leggendo "scansione 3d" è la prima cosa che mi è venuta in mente e mi ricordo che una volta in rete trovai un intero libro su come utilizzarlo per fare delle scansioni 3d, mi pare si chiamasse "Making things see"...

Questo? http://it-ebooks.info/book/2589/ Questo invece Kinect+Arduino: http://it-ebooks.info/book/761/ Sito con pdf in inglese, legali per uso personali, in concessione dagli editori.

A me scansione 3d fa solo pensare, "non di certo con Arduino"

Esatto, è proprio quello il libro, il secondo non lo conoscevo, ma mi sembra molto interessante... Anche io credo che Arduino per queste cose abbia bisogno di un supporto, tipo una Raspberry...

mmm molto bene! sicuramente un buon punto di partenza! (anche se purtroppo il file PDF sembra danneggiato e non leggibile)
.
Allora, da quel che ho capito, Kinect e’ una serie di progetti, tra cui anche la scansione 3D del terreno. Beh di sicuro Arduino non sara’ la piattaforma piu’ adatta ma di sicuro non ho intenzione di creare lo stato dell’arte riguardo le scansioni del terreno! (non credo proprio di potermelo permettere… :sweat_smile: )

Ma diciamo ricreare un’immagine di 10 pixel x 10 pixel che rappresenta gli ostacoli di fronte al mio robottino… non sara’ di certo una roba alla “boston dynamics” ma gia’ sarebbe qualcosa! Anche perche’ per ora non oso nemmeno pensare ad utilizzare una scheda che non sia la mia amata mega 2560 :slight_smile:

Date un occhio all’immagine allegata; Ogni tot secondi il laser farebbe una “foto” per ognuno dei 100 pixels sapendo la distanza esatta. Unendo queste 100 scansioni si otterrebbe un’immagine 3d!

Diciamo che mi piacerebbe fare un qualcosa di piccolo ma funzionale. Qualcosa come primo prototipo prima di fare magari qualcosa di serio :slight_smile:

Ora, siccome il pdf proprio non parte, mi potete dire piu’ o meno i punti principali di questo kinect? Ha forse a che fare con il riconoscimento di oggetti memorizzati in un database?

E sopratutto, che tipo di hardware utilizza questo kinect per scansionare? laser? infrarosso?
@Pelodiulo, che tipo di problematiche hai trovato per farti avere tale delusione con l’infrarosso?

Grazie ragazzi!

terrain_scan.jpg

aldoz: mmm molto bene! sicuramente un buon punto di partenza! (anche se purtroppo il file PDF sembra danneggiato e non leggibile)

Scaricati tutti e due senza problemi.

nid69ita:

aldoz: mmm molto bene! sicuramente un buon punto di partenza! (anche se purtroppo il file PDF sembra danneggiato e non leggibile)

Scaricati tutti e due senza problemi.

Ah perfetto! gli do subito una bella occhiata :)

aldoz: E sopratutto, che tipo di hardware utilizza questo kinect per scansionare? laser? infrarosso?

Kinect o Xtion non sono oggetti utilizzabili con Arduino, come minimo serve un sistema Linux embedded abbastanza performante, anche la Raspberry non è adatta e tanto meno Arduino Yun. Il libro presenta esempi dove Arduino è utilizzato come interfaccia low level per un pc allo scopo di comandare servo, relè, led, etc, però Kinect/Xtion sono gestiti dal pc. Uso una Xtion su questo robot come sensore primario per lo SLAM e l'obstacle avoidance, la gestisco tramite una Cubieboard V2 che a sua volta dialoga con una scheda basata su dsPIC per il controllo dei motori e una scheda Arduino like di mia progettazione per la gestione delle funzioni ausiliarie quali controllo batteria, led, servo per il pan della Xtion, etc.

astrobeed:

aldoz: E sopratutto, che tipo di hardware utilizza questo kinect per scansionare? laser? infrarosso?

Kinect o Xtion non sono oggetti utilizzabili con Arduino, come minimo serve un sistema Linux embedded abbastanza performante, anche la Raspberry non è adatta e tanto meno Arduino Yun. Il libro presenta esempi dove Arduino è utilizzato come interfaccia low level per un pc allo scopo di comandare servo, relè, led, etc, però Kinect/Xtion sono gestiti dal pc. Uso una Xtion su questo robot come sensore primario per lo SLAM e l'obstacle avoidance, la gestisco tramite una Cubieboard V2 che a sua volta dialoga con una scheda basata su dsPIC per il controllo dei motori e una scheda Arduino like di mia progettazione per la gestione delle funzioni ausiliarie quali controllo batteria, led, servo per il pan della Xtion, etc.

Ah grazie mille. Mi stai evitando una lunga marcia che mi avrebbe portato comunque fuori strada, dato che ho la ferma intenzione di creare la mia scansione del terreno utilizzando solamente la mia povera ma fantastica ( :) ) arduino Mega. comunque sto sviluppando un'idea interessante.. tra non molto vi diro' $)

aldoz:
Ah grazie mille. Mi stai evitando una lunga marcia che mi avrebbe portato comunque fuori strada, dato che ho la ferma intenzione di creare la mia scansione del terreno utilizzando solamente la mia povera ma fantastica ( :slight_smile: ) arduino Mega.

Premesso che la soluzione è usare una Kinect/Xtion, comunque qualcosa si può fare anche con i telemetri IR sharp, dipende da quanto ti accontenti, in tutti i casi puoi ottenere solo una mappa perimetrale con risoluzione di 1-2 cm, più che sufficiente per un piccolo robot.
In allegato due immagini, la prima i sensori, la seconda quello che viene “visto” tramite un apposito programma per pc (non serve per il normale funzionamento), di un sistema basato su due telemetri IR Sharp 8-80 cm con possibilità di farne il pan per la scansione, unico problema non risolvibile è il tempo per acquisire il perimetro perché questi sensori al massimo lavorano a 10-15 Hz pertanto ipotizzando di spostarli di qualche grado per volta servono molti secondi per acquisire un perimetro di 50-60°.
Questo sistema era utilizzato su un piccolo robot ad uso didattico che ho sviluppato tanti anni fa, in allegato il link ad un breve video, pochi secondi, del robot.

Premesso che la soluzione è usare una Kinect/Xtion, comunque qualcosa si può fare anche con i telemetri IR sharp,

Ecco proprio quelli che stavo puntando :slight_smile: . Ma qualcosa di questa famiglia che lavori (o che si avvicini) con distanze tipo “da 1cm a 1metro” ?
Gia’ quello che nomini tu 8cm → 80cm non sembra proprio male comunque dato che il meglio che ho trovato io lavora da 4cm a 30cm oppure da 20cm a 150cm

di un sistema basato su due telemetri IR Sharp 8-80 cm con possibilità di farne il pan per la scansione

Mmm interessante. Cioe’ ne utilizzavi 2 per far scansionare meta’ dell’area all’uno e l’altra meta’ all altro per dimezzare i tempi?
Io ho in mente di montare l’ IR sharp su un servo che continuera’ a girare da 0° a 180°, e indietro da 180° a 0° per poi riniziare ad oltranza; Ogni tot millisecondi registrero’ la distanza del fascio e la memorizzero’ (a mo di radar). Che ne pensi?

Hai altri video di quel robottino?

Sharp+servo è la mia stessa idea facendo una scansione ad ogni tot, nel mio caso parliamo di un quadropode quindi lento. Perché usarne due ? Ci sono molti tipi, prendendo uno con il range di distanza giusto credo basti Per ora però devo prima farlo camminare bene, spesso impazzisce :)

aldoz:
Ecco proprio quelli che stavo puntando :slight_smile: . Ma qualcosa di questa famiglia che lavori (o che si avvicini) con distanze tipo “da 1cm a 1metro” ?

1cm-1mt non esiste nulla, quello 8-80 cm è questo, eventualmente abbinato al modello da 20-150 cm, è lo stesso sensore con un ottica differente.
Ne usavo due proprio per ridurre i tempi di scansione del perimetro e per poterne puntare uno fisso su un ostacolo, in modo da tenerlo sotto controllo, e utilizzare il secondo per la scansione.

Hai altri video di quel robottino?

Purtroppo no, è un vecchio progetto del 2004 e mi sono perso per strada quasi tutto di quella realizzazione, era basato su un PIC18F4431, oltre a quel piccolo video di pochi secondi mi rimane solo questa foto.
In compenso puoi guardare questo video della prima versione di NERD dove dimostro la sua precisione nei movimenti, siamo nel 2011 e non esisteva ancora la Xtion, il sensore principale era una cintura di 12 telemetri IR Sharp 8-80 cm, on board c’era sempre un sistema Linux embedded, basato su una FriendlyArm, per la gestione delle funzioni superiori.

Sharp+servo è la mia stessa idea facendo una scansione ad ogni tot, nel mio caso parliamo di un quadropode quindi lento. Perché usarne due ? Ci sono molti tipi, prendendo uno con il range di distanza giusto credo basti Per ora però devo prima farlo camminare bene, spesso impazzisce smiley

Ahh anch'io sono alle prese con un quadrupede! E io sono ormai in procinto di effettuare la prima camminata :) Tu che tipologia di camminata stai utilizzando? trotto o furtiva?

1cm-1mt non esiste nulla, quello 8-80 cm è questo, eventualmente abbinato al modello da 20-150 cm, è lo stesso sensore con un ottica differente. Ne usavo due proprio per ridurre i tempi di scansione del perimetro e per poterne puntare uno fisso su un ostacolo, in modo da tenerlo sotto controllo, e utilizzare il secondo per la scansione.

Grazie 1000 per le informazioni!!!

Non mi trovai bene con il sensore a infrarossi perchè spesso ottenevo dei valori improbabili, e perchè per scansionare porzioni di spazio ampie ci voleva molto tempo, però considera che il mio sensore me lo ero costruito io e che le prove le ho fatte tutte in casa, dove ho delle mattonelle lucide, alle quali credo siano da attribuire la maggior parte degli errori di rilevazione...

Una soluzione potrebbe essere utilizzare un sensore ad ultrasuoni per scansionare approssimativamente una porzione ampia di spazio per trovare in maniera approssimata la posizione degli oggetti e poi puntarci sopra il sensore infrarosso per poter avere una misura più precisa di distanza, dimensione e volendo anche vedere se si sta muovendo...

Pelodiulo: però considera che il mio sensore me lo ero costruito io e che le prove le ho fatte tutte in casa, dove ho delle mattonelle lucide, alle quali credo siano da attribuire la maggior parte degli errori di rilevazione...

I telemetri IR Sharp sono un "pelino" più complessi di una coppia led e fotodiodo, sono molto precisi e non soffrono di problemi dovuti ai riflessi, solo la luce solare diretta (nessun problema per quella diffusa) può creargli problemi, ma questo vale per tutti i sensori IR. I telemetri IR Sharp non funzionano in base all'intensità della luce riflessa, misurano l'angolo di parallasse grazie ad un array da 256 elementi utilizzato come sensore in ricezione, per questo motivo la curva di risposta è una iperbolica, ovvero 1/x a cui va aggiunto un gain e un offset. Se serve il codice Arduino per la linearizzazione della lettura dei telemetri Sharp con uscita analogica basta chiedere.

Una soluzione potrebbe essere utilizzare un sensore ad ultrasuoni per scansionare approssimativamente una porzione ampia di spazio per

I sensori ultrasonici lavorano sulla base di un cono d'emissione che come minimo è 40-50°, a meno che non spendi centinaia di Euro per sensori a 200 kHz, o più, a basso angolo d'emissione e comunque sei sempre attorno ai 10-15°. Lo spot massimo dei telemetri sharp è ~1 cm per il modello 8-80 cm e ~1.5 cm per il modello da 150 cm, dimensioni riferite alla proiezione dello spot alla massima distanza, più ti avvicini e più diventa piccolo.

astrobeed: Se serve il codice Arduino per la linearizzazione della lettura dei telemetri Sharp con uscita analogica basta chiedere.

sisi, cosi' sono certo di usare roba gia' testata

per ora ho usato solo la camminata a gatto uso il joystick di un "nunciak" come filocomando I2C, in avanti cammina abbastanza bene, dietro-destra-sinistra si aggroviglia completamente :stuck_out_tongue_closed_eyes:

Ecco lo sketch per linearizzare la lettura dei telemetri, nell’esempio sono utilizzato tre telemetri connessi a A0-A1-A2, nelle note è spiegato come ottenere i valori per la calibrazione, l’ADC deve usare i 3.3 V per Aref sia migliorare la stabilità della lettura sia per sfruttare al massimo il range in quanto la tensione massima in uscita dai telemetri non supera i 3.2V.
Il delay di 66 ms nella loop serve solo per limitare a 15 letture al secondo, è la banda di questi sensori, nell’uso reale va eliminato avendo cura di non fare più di 10-15 letture al secondo dai sensori.

Telemetro.ino (2.77 KB)

astrobeed: Ecco lo sketch per linearizzare la lettura dei telemetri, nell'esempio sono utilizzato tre telemetri connessi a A0-A1-A2, nelle note è spiegato come ottenere i valori per la calibrazione, l'ADC deve usare i 3.3 V per Aref sia migliorare la stabilità della lettura sia per sfruttare al massimo il range in quanto la tensione massima in uscita dai telemetri non supera i 3.2V. Il delay di 66 ms nella loop serve solo per limitare a 15 letture al secondo, è la banda di questi sensori, nell'uso reale va eliminato avendo cura di non fare più di 10-15 letture al secondo dai sensori.

Astrobeed per linearizzare la lettura cosa intendi di preciso? intendi forse la sincronizzazione dei tre telemetri per fare in modo che ognuno scansioni un terzo della zona totale da scansionare?

grazie Astro, karma+1, conservo per quando arrivero' al telemetro :)