Collegare direttamente la kinect ad Arduino

Ciao a tutti, è così bello sognare che mi sono deciso a scrivere questo post.

Non sarebbe interessante poter collegare direttamente ad Arduino una kinect?

La Kinect, non invia semplicemente un flusso vide, ma trasmette trammite USB: le coordinate 3d che compongono gli scheletri Una scansione 3d composta da migliaia di puntini. e varie tipologie di flussi video, Scala di grigi per la distanza, infrarossi....

Quindi Arduino, non dovrebbe elaborare delle immagini per ricavare i dati, ma già l'elettronica della Kinect si occupa di farlo, Arduino dovrebbe solo gestire i dati già analizzati.

Non mi pare di aver visto nessun progetto di questo tipo, e si potrebbe utilizzare l'esperienza di chi ha già analizzato il flusso dati che arriva dalla USB della kinect, per capire se è possibile decodificarla, no?

lluuccaa: si potrebbe utilizzare l'esperienza di chi ha già analizzato il flusso dati che arriva dalla USB della kinect, per capire se è possibile decodificarla, no?

Ti dico subito che non è possibile fare nulla con Arduino, indipendentemente dal discorso video prima di tutto c'è il problema dei driver e poi il flusso dati è enorme, assolutamente fuori portata per Arduino sia come memoria che come velocità elaborativa.

permettimi di continuare a fantasticare.

Ho letto le specifiche del nuovo arduino, nettamente superiori a quelle del precedente e considerando che Arduino non ha le decine di strati applicativi di un pc con il sistema operativoed interfaccia grafica, non credo che non possa riuscirci.

Ipotesi uno: prelevare i dati dall'elettronica della kinect; ci sarà un punto in cui le coordinate dello scheletro vengono trasmesse, forse qualche pazzo in internet ha già smontato la kineck.... (proverò a cercare).

Ipotesi due: i dati viaggiano trammite usb, quindi verranno modulati e trasmessi in digitale, con qualche sistema di compressione, se ci fosse in commercio dell'elettronica che permetta la decodifica di questi dati. Inizialmente andrebbe bene qualche sistema elettronico da laboratorio per l'analisi delle usb.

No?

lluuccaa:
Ho letto le specifiche del nuovo arduino, nettamente superiori a quelle del precedente e considerando che Arduino non ha le decine di strati applicativi di un pc con il sistema operativoed interfaccia grafica, non credo che non possa riuscirci.

Quale nuovo Arduino ?
Le ultime release delle board sono uguali alle precedenti come potenza di calcolo e memoria, cambiano solo alcuni piccoli dettagli hardware di contorno.

Ipotesi uno: prelevare i dati dall’elettronica della kinect; ci sarà un punto in cui le coordinate dello scheletro vengono trasmesse, forse qualche pazzo in internet ha già smontato la kineck… (proverò a cercare).

Non puoi prelevare nulla da nessuna parte, dentro la Kinect c’è un hardware molto complesso e totalmente closed, in compenso hai tutto disponibile sulla USB, con relativo sdk per Windows, però come ti ho già detto la mole di dati in arrivo non solo è di gran lunga superiore alla capacità di memoria di qualunque Arduino, ma arrivano pure ad una velocità tale che Arduino non è in grado stargli dietro, tantomeno di elaborare qualcosa.
Ti consiglio di scaricarti l’SDK per Windows della Kinect e di studiarti la documentazione allegata così capisci da solo perché non puoi fare nulla con Arduino.

Quello che vuoi fare non è impossibile con l'sdk rilasciato da microsoft per kinect su windows potresti scrivere un programam in java che in base ai tuoi movimenti manda messaggi tramite porta serial ad arduino che tramite degli if while etc esegue dei comandi ma senza un pc niente da fare. Diciamo che con l'aiuto di un portatile potresti risucirci senza problemi diciamo anche però che lato programmazione, anche per un programmatore abbastanza esperto come me ci vorrebbe un mesetto buono a scrivere il software.

Ciao, il programma sotto windows l'ho già fatto. - Ricava le coordinate dello scheletro dalla kinect. - Crea uno scheletro 3d (che ha anche la gestione della gravità e delle masse). - Invia ad arduino le coordinate dell'articolazione selezionata (si possono inviare singole ossa, polso, mano, gomito...). ho caricato un video su youtube, se ti interessa vederlo, prova a cercare "alternativa3d arduino kinect"

in questi giorni, devo stampare su un LCD collegato ad arduino, le coordinate che riceve.

astrobeed: Quale nuovo Arduino ? Le ultime release delle board sono uguali alle precedenti come potenza di calcolo e memoria, cambiano solo alcuni piccoli dettagli hardware di contorno.

Non sembra uguale, sia per numero di pin, per memoria, sto parlando di questa scheda :http://store.arduino.cc/it/index.php?main_page=product_info&cPath=11_12&products_id=196

La velocità del processore è relativamente importante, a me basta elaborare 10 volte al secondo, nemmeno il pc elabora tutto, quando non ci sta dietro perderà dei dati... Possibile che non ci siano strumentazioni per la decodifica delle comunicazioni seriali delle USB?

Non so se questo shield ti possa essere utile: http://www.robot-italy.com/product_info.php?products_id=1660 :roll_eyes:

lluuccaa: Non sembra uguale, sia per numero di pin, per memoria, sto parlando di questa scheda

E' un Arduino MEGA2560, non è una scheda nuova, c'è da diverso tempo.

Possibile che non ci siano strumentazioni per la decodifica delle comunicazioni seriali delle USB?

Certo che esiste la strumentazione per farlo, se hai 3000 Euro da spendere comprati un buon analizzatore di stati logici con capacità di analisi protocolli in grado di gestire il bus USB.

lluuccaa: Non sembra uguale, sia per numero di pin, per memoria, sto parlando di questa scheda :http://store.arduino.cc/it/index.php?main_page=product_info&cPath=11_12&products_id=196

La velocità del processore è relativamente importante, a me basta elaborare 10 volte al secondo, nemmeno il pc elabora tutto, quando non ci sta dietro perderà dei dati...

i link al market non funzionano, parli della Mega? il problema è sempre la CPU a 16MHz. (overcloccabile a 20, ok, ma siamo sempre lì)

10Hz di update, ok, ma di quanti dati? fai una stima del tempo di elaborazione di un dato e moltiplica per il loro numero...

l'arduino 2, se e quando uscirà, potrebbe essere una soluzione

lesto: l'arduino 2, se e quando uscirà, potrebbe essere una soluzione

Sei rimasto indietro, la DUE non uscirà mai perché arriva prima la TRE :grin:

Io avevo pensato di collegare il Kinect ad un netbook a sua volta posto su un rover comandato con un controller Arduino, ma il problema è l'alimentazione del Kinect. La porta USB non basta dato che fornisce una tensione di 5V mentre per il Kinect occorrono 12V... Comunque Microsoft è in accordo con ASUS per la produzione di netbook e notebook che integreranno Kinect al posto della webcam.

lesto:
10Hz di update, ok, ma di quanti dati? fai una stima del tempo di elaborazione di un dato e moltiplica per il loro numero…

Arduino non dovrebbe lavorare solo, ma il segnale andrebbe preprocessato per rendelo più semplice , oppure potrebbero esserci più schede arduino che dialogano fra di loro e che si occupano di vari stadi per analizzare il segnale che arriva dalla kinect.

La frequenza di 16mz non è bassa, considerando anche che tutto il lavoro di ricavare i punti dello scheletro lo fa la Kinect, e la decodifica della usb sarebbe delegata ad una interfaccia tra la kinect ed Arduino.

Bisogna vedere di quanti cicli di clock Arduino esegue le istruzioni per elaborare il segnale.

Per l’analisi degli stati della usb della kinect sono sicuro che qualche smanettone in giro per il mondo lo ha già fatto, mi metto alla ricerca.

lluuccaa: e la decodifica della usb sarebbe delegata ad una interfaccia tra la kinect ed Arduino.

La Kinect usa una USB 2.0 High speed, 480 mpbs. La usb host shield di Arduino al massimo lavora in full speed, 12 mbps, anche ammesso che ti progetti da solo una usb host shield high speed, e c'è sempre il problema dei driver, come pensi di poter processare informazioni che arrivano a quella velocità con una piccola mcu 8 bit @16MHz ? Ci sono (tante) cose che non si possono fare con Arduino, questa è una di quelle, se non ci metti in mezzo un PC, o almeno una sbc di medio/alto livello, scordati di fare qualunque cosa con la Kinect e Arduino.

Aiutami a capire se è fattibile.

pensavo di trovare qualcosa del genere http://news.thomasnet.com/fullstory/USB-Logic-Analyzer-samples-at-up-to-500-MHz-28116

che trasformi il segnale che arriva dalla usb, in stati logici sui vari pin.

La frequnza di 50mz credo che corrisponda alla frequenza dei dati sulla seriale (usb).

per poi trattarli con un circuito dedicato, o se ci riesce con Arduino (lo so che è lento, non ripetermelo, l'ho capito, ma su questo punto poi si cerca una soluzione).

Ecco un'interessante analisi della usb della kinect. http://www.ladyada.net/learn/diykinect/

Ditemi se sbaglio, ma sto pazzo, analizza tutto ciò che gli arriva e invia anche dei comandi in esadecimale?

lluuccaa: Ecco un'interessante analisi della usb della kinect. http://www.ladyada.net/learn/diykinect/

Ditemi se sbaglio, ma sto pazzo, analizza tutto ciò che gli arriva e invia anche dei comandi in esadecimale?

*pazza... comunque se possiedi un sistema più efficiente per fare reverse engineering (ma anche debug) esponicelo :-)

Assolutamente no, anzi, dico solo che questa pazza è già riuscita in uno dei passi necessari per far funzionare il tutto.

devo solo capire se nella scheda di arduino è possibile inviare comandi ala USB, qualcuno di voi lo ha mai fatto?

lluuccaa: Ditemi se sbaglio, ma sto pazzo, analizza tutto ciò che gli arriva e invia anche dei comandi in esadecimale?

Perché non leggi attentamente l'articolo in modo che scopri da solo che ha usato un analizzatore hardware per usb che costa 1400$ (+iva + dazio) ? Quell'articolo è obsoleto perché si limita alla analisi per realizzare dei driver per sistemi non Xbox, cosa superata da quando Microsoft ha rilasciato l'sdk ufficiale.

Ho letto abbastanza attentamente l'articolo per capire che esiste una possibilità per collegare la Kinect ad arduino senza passare da un pc.

Non badare al costo degli strumenti, la persona che ha realizzato questo articolo, ha ricavato molte delle informazioni, forse lei sta già provando a farlo.

qualcuno sa dirmi se la cosa è fattibile?

Cosa bisogna avere per effettuare l'invio di messaggi esadecimali sulla porta USB come avviene su quell'articolo? La porta USB di Arduino MEGA è adatta a questo tipo di operazioni? ho visto una nota dove si parla di una gestione migliorata della porta USB. esistono altre schede da accoppiare ad arduino o che sostituiscano Arduino adatte allo scopo?

Ciao.

Ho trovato questo post sul forum che parla di una scheda che potrebbe essere adatta e con dei costi comunque contenuti

http://arduino.cc/forum/index.php/topic,86625.0.html

Per sostituire il pc, che attualmente si occupa di decodificare i segnali provenienti dalla Kinect, dovrebbe funzionare.