Visione artificiale

Cari tutti,
sto lavorando ad un sistemino per la movimentazione di pezzi/oggetti/pacchetti.
Devo verificare che questi non si inceppino, accertandomi che il piatto/teglia usato per spostare la merce sia vuoto.
Il piatto è circa 20cmx80cm ed è di colore bianco.
Inizialmente pensavo di usare una cella di carico, ma dovendo movimentare oggetti anche piccoli mi servirebbe un'accuratezza elevata e poi la struttura rigida del piatto magari non si presta a tale approccio.

Avevo allora pensato ad una sistema di visione artificiale che rilevasse i pezzi sul fondo bianco del ripiano.
Purtroppo non ho alcuna esperienza in tale ambito, esiste qualcosa arduino compatibile?
Ovviamente altri suggerimenti sono bene accetti.

Grazie

Etan:
Purtroppo non ho alcuna esperienza in tale ambito, esiste qualcosa arduino compatibile?
Ovviamente altri suggerimenti sono bene accetti.

Arduino non è assolutamente in grado di gestire la visione artificiale, per quello che vuoi fare ti serve una buona telecamera e un pc abbastanza potente sul quale dovrai far girare un software scritto specificamente per la tua applicazione.

Se i pezzi da controllare hanno un colore scuro / riflettono di meno del piatto vuoto puoi usare anche una o piú fotocelle a riflessione (in funzione del rapporto grandezza pezzo-piatto).
Ciao Uwe

Se i pezzi scorrono su un qualcosa, potresti usare una barriera ad infrarossi: se questa non viene interrotta per un certo lasso di tempo, vuol dire che non sta passando nulla.

leo72:
Se i pezzi scorrono su un qualcosa, potresti usare una barriera ad infrarossi: se questa non viene interrotta per un certo lasso di tempo, vuol dire che non sta passando nulla.

questa era la mia prima idea, infatti come hai subito capito i pezzi scorrono su un nastro.
Il fatto è che se i pezzi si inceppano la barriera potrebbe non interrompersi mai e non avrei risolto il mio problema.

uwefed:
Se i pezzi da controllare hanno un colore scuro / riflettono di meno del piatto vuoto puoi usare anche una o piú fotocelle a riflessione (in funzione del rapporto grandezza pezzo-piatto).
Ciao Uwe

Potresti darmi un riferimento ad un componente commerciale?
Sai fino a che distanza lavorano?

Etan:

leo72:
Se i pezzi scorrono su un qualcosa, potresti usare una barriera ad infrarossi: se questa non viene interrotta per un certo lasso di tempo, vuol dire che non sta passando nulla.

questa era la mia prima idea, infatti come hai subito capito i pezzi scorrono su un nastro.
Il fatto è che se i pezzi si inceppano la barriera potrebbe non interrompersi mai e non avrei risolto il mio problema.

Ma il problema non è capire se sul nastro non sta passando nulla?
Se la barriera viene interrotta ogni tanto, significa che il nastro gira e gli oggetti passano.
Se la barriera non viene interrotta per un certo lasso di tempo prestabilito, significa che il nastro è bloccato o gli oggetti si sono incastrati. Il risultato è identico: non sta passando nulla.
Se la barriera viene interrotta in maniera permanente per un certo lasso di tempo, significa che il nastro si è fermato o che un oggetto si è bloccato proprio sulla barriera. Ma il risultato è come sopra, cioè qualcosa non va.
In fin dei conti, devi solo prevedere un paio di timeout per gestire gli eventi "non vedo passare nulla" e "c'è un oggetto fermo sulla barriera".

Se il problema è sapere se il nastro sta girando, metti una rotella di un mouse sopra/sotto il nastro XD XD

pablos:
Se il problema è sapere se il nastro sta girando, metti una rotella di un mouse sopra/sotto il nastro XD XD

Il problema mi par di capire era rilevare se gli oggetti sul nastro scorrevano.
Poi non so. Ho chiesto chiarimenti anch'io.

L'obiettivo è verificare che il nastro, a un certo punto, abbia scaricato tutti gli articoli.

L'eventualità che vorrei potere discriminare è quella in cui, nonostante il nastro continua a scorrere, alcuni oggetti non vengano scaricati perchè inceppati.
Immaginate anche di avere a che fare con oggetti cilindrici, questi potrebbero mettersi a rotolare rimanendo fermi nello stesso punto.

Magari sono ipotesi improbabili, ma vorrei avere la soluzione anche a queste.

Etan:
L'obiettivo è verificare che il nastro, a un certo punto, abbia scaricato tutti gli articoli.

L'eventualità che vorrei potere discriminare è quella in cui, nonostante il nastro continua a scorrere, alcuni oggetti non vengano scaricati perchè inceppati.
Immaginate anche di avere a che fare con oggetti cilindrici, questi potrebbero mettersi a rotolare rimanendo fermi nello stesso punto.

Magari sono ipotesi improbabili, ma vorrei avere la soluzione anche a queste.

Anche con una barriera a sensori ottici tipo fotodiodi come ti ha consigliato Uwe non avresti mai la certezza che il nastro si sia svuotato perché prendendo per buono l'assunto che fai, ossia un oggetto cilindrico che ruota alla stessa velocità del nastro (quindi non avanza) esso non passerebbe mai dal punto di rilevamento.

ciao
se ho compreso, se possibile, una soluzione potrebbe essere quella di mettere un sensore RX e TX ad infrarossi in direzione assiale a nastro e non trasversale come viene fatto solitamente e verifichi dopo un tot di tempo se ci sono ancora oggetti a secondo dello stato del RX

stefano

scusami cosa intendi per direzione assiale?

ma tornare alla visione artificiale con una videocamera, una raspberry (o ancora meglio una pandaboard) e opencv?

mmh interessante!!
Nella mia macchina ho un PC ed una rete di 'N' Arduino, con N massimo = 10.
Inizialmente volevo far risolvere il compito ad ogni singolo Arduino.
Passando alla soluzione openCV, credi che sia possibile far controllare al PC 10 punti con 10 cam differenti?
Magari non contemporaneamente, anche in sequenza potrebbe andarmi bene.
E' possibile impiegare delle normali webcam o servono cam più sofisticate e costose?
OpenCV per la tua esperienza è userfriendly o è un casino mettere in piedi un sistemino come quello che ho descritto
(rilevare pezzi su una superficie a sfondo bianco)?
Grazie

mmmh sulle multicam non credo o meglio forse si in quanto se tu utilizzassi linux potresti fare 1 programma che accetti come parametro la cam da usare, le cam in linux sono numerate quindi inizi da una, guardi quante cam ci sono e sulla base di questo passi da una all'altra.
rilevare un movimento in opencv è relativamente facile e il bello è che supporta anche python oltre al c

tuttavia non so quanti fps riesca a fare, insomma la raspberry non è poi tutta questa potenza..

come webcam e dal computer da usare quindi dipende:
dimensione (o ancora meglio rapporto prospettico) del campo da analizzare
dimensioni degli oggetti che devi rilevare
velocità del nastro (e quindi probabile velocità del nastro).

se il nastro fosse molto veloce i prezzi lievitano :stuck_out_tongue:
tuttavia contando una telecamera un full hd ed una velocità non molto alta degli oggetti potremmo dire che il costo finale arriverà a circa 200€

Ciao a tutti,

spero di non dire una banalità anche perchè magari dipende dall'architettura del nastro nel dettaglio.

Forse potresti mettere due barriere IR, una all'inizio del nastro ed una alla fine. L'interruzione della prima incrementa il conteggio dei pezzi sul nastro, l'interruzione della seconda lo decrementa. In questo modo conosci sempre il numero di pezzi presenti sul nastro.

Ovviamente è necessario che i pezzi passino in maniera indipendente l'uno dall'altro. Non devono cioè sovrapporsi quando passano attraverso la barriera.

Probabilmente, conoscendo il tempo medio di attraversamento di un pezzo tra le due barriere, è possibile determinare il numero massimo di pezzi che possono trovarsi sul nastro in condizioni normali. In caso tale numero superi una certa soglia, questo dovrebbe significare che c'è stato un inceppamento.

Se la soluzione è accettabile, magari può essere interessante aumentare il numero di barriere in modo da sapere anche il tratto di nastro in cui si è fermato un pezzo.

Ciao.
Vittorio.

Etan:
scusami cosa intendi per direzione assiale?

ciao
in pratica la linea che unisce i due elementi del RX e TX e' parallela alla direzione di marcia del nastro rispetto, mentre, solitamente viene posta in direzione perpendicolare

stefano

ps
assiale
RX >>>>>>>>>>>>>>nastro>>>>>>>>>>>>>>TX

perpendicolare
RX

nastro>>>>>>>>>>>>>>>>>
TX