Go Down

Topic: Delegare calcoli a PC usando Processing e passare dati ad Arduino. Come fare? (Read 10524 times) previous topic - next topic

Jujo


Se ti può interessare, ho fatto un robot polare che scrive frasi usando le lettere dell'alfabeto partendo da caratteri trutype con delle spline. Considera che è fatto tutto dentro l'arduino, non c'è alcuna comunicazione con il pc. La cinematica inversa è calcolata all'interno dell'arduino e come, nel caso del tuo scara, è abbastanza elementare. Per disegnare i segmenti usa l'algoritmo di Bresenham, che è uno standard per queste cose. Io uso degli stepper, perchè con i servi è impossibile raggiungere queste precisioni a meno di andare su prodotti molto costosi. Il codice è completamente commentato, quindi dovrebbe essere abbastanza semplice seguirlo.
Questo è il link: http://robottini.altervista.org/polar-robot-arm-sketching-skyline
Questo robottino disegna slyline di città, ma dentro c'è tutto il codice per scrivere frasi, lettere e quello che ti pare. Puoi anche impostare la scala, quindi scrivere lettere più o meno grandi, maiuscole o minuscole. Prova a dare una occhiata per vedere se ti può essere utile.


D4NI3L3



La cosa che non mi è chiara è come accedere alla console o comunque dove devo inserire i dati su processing. Quando facevo partire lo sketch mi appariva una mini finestra con un quadrato grigio e basta. Non c'è il monitor come su Arduino. Da qui i miei dubbi.


No, il monitor di Processing non c'e', dovresti usare altro per spedire dati a manina verso Arduino (esempio Putty) oppure apri un altro IDE Arduino e sfrutti la sua console (anche senza sketch).
Per Processing ho usato la libreria G4P che permette di disegnare un minimo di interfaccia (che sò, tre pulsanti e per ogni pulsante invii qualcosa)
libreria: http://www.lagers.org.uk/g4p/index.html    
editor: http://www.lagers.org.uk/g4ptool/index.html


Molto interessante, bello anche l'editor che ti da già il codice. Dopo la provo magari. Se avessi dubbi su come installarla o farla funzionare se non ti dispiace ti rompo ancora le scatole.  :)

D4NI3L3



Se ti può interessare, ho fatto un robot polare che scrive frasi usando le lettere dell'alfabeto partendo da caratteri trutype con delle spline. Considera che è fatto tutto dentro l'arduino, non c'è alcuna comunicazione con il pc. La cinematica inversa è calcolata all'interno dell'arduino e come, nel caso del tuo scara, è abbastanza elementare. Per disegnare i segmenti usa l'algoritmo di Bresenham, che è uno standard per queste cose. Io uso degli stepper, perchè con i servi è impossibile raggiungere queste precisioni a meno di andare su prodotti molto costosi. Il codice è completamente commentato, quindi dovrebbe essere abbastanza semplice seguirlo.
Questo è il link: http://robottini.altervista.org/polar-robot-arm-sketching-skyline
Questo robottino disegna slyline di città, ma dentro c'è tutto il codice per scrivere frasi, lettere e quello che ti pare. Puoi anche impostare la scala, quindi scrivere lettere più o meno grandi, maiuscole o minuscole. Prova a dare una occhiata per vedere se ti può essere utile.




Grazie mille, gentilissimo. Do un'occhiata al codice.

Anche io ho quegli stepper motor uguali uguali. Vedo che usi anche i markerbeam, volevo prendere lo starter kit, come ti ci trovi?

D4NI3L3



Se ti può interessare, ho fatto un robot polare che scrive frasi usando le lettere dell'alfabeto partendo da caratteri trutype con delle spline. Considera che è fatto tutto dentro l'arduino, non c'è alcuna comunicazione con il pc. La cinematica inversa è calcolata all'interno dell'arduino e come, nel caso del tuo scara, è abbastanza elementare. Per disegnare i segmenti usa l'algoritmo di Bresenham, che è uno standard per queste cose. Io uso degli stepper, perchè con i servi è impossibile raggiungere queste precisioni a meno di andare su prodotti molto costosi. Il codice è completamente commentato, quindi dovrebbe essere abbastanza semplice seguirlo.
Questo è il link: http://robottini.altervista.org/polar-robot-arm-sketching-skyline
Questo robottino disegna slyline di città, ma dentro c'è tutto il codice per scrivere frasi, lettere e quello che ti pare. Puoi anche impostare la scala, quindi scrivere lettere più o meno grandi, maiuscole o minuscole. Prova a dare una occhiata per vedere se ti può essere utile.




Allora ho dato un'occhiata rapida a tutto. Intanto complimenti, gran bel progettino.

Ho scaricato il codice, ho anche visto che nel problema dal quale ti sei ispirato c'è un link a un programma java che ti restituisce un codice da implementare su arduino.

Ho ancora diversi dubbi però, dici che è fatto su Arduino ma il codice che ho scaricato è uno sketch di Processing, per caso quello scketch mi da qualcosa per arduino?

Mi hanno comunque detto di studiarmi la pianificazione di traiettoria di cui a lezione di robotica ci hanno parlato in linea generica. Dovrò fare la pianificazione di traiettoria nello spazio operativo per segmenti e archi di cerchio, una volta fatta dovrò al solito darla in pasto alla cinematica inversa per avere gli angoli.

Ottima l'idea della penna, con il laser non si vede il risultato a meno di non fare un tracking video con After Effects. Infatti dovrei anche cercare una superficie fotosensibile perchè rimanga impressa la traiettoria tracciata dal laser e non so dove trovarla.

Rispondi appena puoi che ho i tempi stretti e grazie mille dell'aiuto, con il tuo link mi hai dato ottime idee e mi hai aiutato parecchio. Davvero un bel progetto, mi è piaciuto un sacco e mi ha convinto a prendere i markerbeam.

testato

Processing ha la consolle, è la parte nera sotto al codice, cosi come scrivi su seriale scruvi anche su consolle, quindi se scrivi cobtemporaneamente su ebtrambe hai visione di cosa stai facendo.
Su arduino si usa il trucco di stampare su seriale per fare debug perché arduino non ha una consolle, mentre processing si
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

D4NI3L3


Processing ha la consolle, è la parte nera sotto al codice, cosi come scrivi su seriale scruvi anche su consolle, quindi se scrivi cobtemporaneamente su ebtrambe hai visione di cosa stai facendo.
Su arduino si usa il trucco di stampare su seriale per fare debug perché arduino non ha una consolle, mentre processing si


Non ho capito cosa intenti per scrivere su entrambe. Ho visto che Processing stampa sotto ma non vedo nessun form dove poter inserire i dati.

Inoltre se sto comunicando tra Processing e Arduino sul monitor di Arduino non vedo un tubo, quindi per vedere le cose che stampo su Seriale devo mandarle indietro a Processing in qualche modo.

Non ci sto capendo più un tubo.

Comunque la questione è complessa. Credo proprio che non potrò utilizzare solamente Arduino ma dovrò rifarmi a qualcos'altro come Processing o Python a meno che Arduino non ce la faccia a fare 26 interpolazioni differenti con parecchi punti.

Mi hanno detto che devo eseguire lo studio di traiettorie nello spazio operativo quindi dovrò eseguire un'operazione come questa per ogni dannata lettera:

Code: [Select]
p(s) = p[sub]i[/sub] + s/IIp[sub]f[/sub] - p[sub]i[/sub]II *(p[sub]f[/sub] - p[sub]i[/sub])


Con s definita come ascissa curvilinea, questo per quanto riguarda i segmenti.

In pratica non posso inserire nello sketch i vettori tutti con le coordinate già pronte per le lettere ma devo costruire le traiettorie in tempo reale, ricavarne coordinate vicinissime tra loro e poi farle inseguire al puntatore laser.

Non so più come fare, dovrei passare in maniera velocissima coppie di angoli tra processing e arduino per passarle ai servi, quindi un angolo per un servo e un angolo per l'altro.

testato

Per scrivere intendo via sketch processing. Se nello sketch stampi hello world su seriale e scrivi hello word verso la consolle, vedilo come un log, saprai in che momento hai spedito hello word su seriale.
Ti serve scrivere su consolle perché appunto non puoi aprire il monitor arduinico.
Se per scrivere tu intendi fisucamente usare la tastiera devi crearti un form processing.
Quel quadrato bianche che vedi al play di processing è un interfaccia vuota. Tu la amplii con un form ed un tasto e ci scrivi
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

D4NI3L3


Per scrivere intendo via sketch processing. Se nello sketch stampi hello world su seriale e scrivi hello word verso la consolle, vedilo come un log, saprai in che momento hai spedito hello word su seriale.
Ti serve scrivere su consolle perché appunto non puoi aprire il monitor arduinico.
Se per scrivere tu intendi fisucamente usare la tastiera devi crearti un form processing.
Quel quadrato bianche che vedi al play di processing è un interfaccia vuota. Tu la amplii con un form ed un tasto e ci scrivi


Ah ok, si quello lo sapevo già. L'avevo notata. Io parlo proprio di scrivere e dare comandi da tastiera in tempo reale. A questo punto potrei usare la libreria che mi è stata gentilmente linkata qualche post indietro. Molto ben fatta.

testato

si, se riesci a farla funzionare  :)
io ho avuto rpoblemi da quando si e' passati a processinig 2.0, almeno su win7-64
quindi continuo ad usarla su 1.5 e vecchie versioni della libreria.
Tieni presente che la cosa utile e' il Tool grafico, ma non e' compatibile tra le versioni, cioe' io ora non potro' mai piu' usare quel tool grafico su nuove versioni processing.
e' un po' un casino :-)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Jujo


[
Ho ancora diversi dubbi però, dici che è fatto su Arduino ma il codice che ho scaricato è uno sketch di Processing, per caso quello scketch mi da qualcosa per arduino?



Il codice processing serve per creare le 'traiettorie' che poi arduino seguirà per disegnare le singole lettere. E' la traduzione in processing del sorgente java che ho linkato. Non ti serve a nulla se non vuoi cambiare i caratteri. Se ti va bene il font che ho inserito nel codice arduino non devi fare niente. Il programma processing stampa sul terminale le righe che poi devono essere copiate e incollate nel codice di arduino. Quindi ti pemette, oltre a calcolare le traiettorie, di semplificarti la vita per poi importarle nell'arduino.
Fatto ciò, che, ripeto, è da fare solo se vuoi cambiare i font, l'arduino funziona da solo, non serve più alcuna interazione con il pc.

Scusa se sono lento nella risposta ma ho poco segnale qui dove sono.

D4NI3L3


si, se riesci a farla funzionare  :)
io ho avuto rpoblemi da quando si e' passati a processinig 2.0, almeno su win7-64
quindi continuo ad usarla su 1.5 e vecchie versioni della libreria.
Tieni presente che la cosa utile e' il Tool grafico, ma non e' compatibile tra le versioni, cioe' io ora non potro' mai piu' usare quel tool grafico su nuove versioni processing.
e' un po' un casino :-)



Ho capito, che peccato però, l'idea era ottima. Hai fatto bene a mettermi in guardia.

D4NI3L3



[
Ho ancora diversi dubbi però, dici che è fatto su Arduino ma il codice che ho scaricato è uno sketch di Processing, per caso quello scketch mi da qualcosa per arduino?



Il codice processing serve per creare le 'traiettorie' che poi arduino seguirà per disegnare le singole lettere. E' la traduzione in processing del sorgente java che ho linkato. Non ti serve a nulla se non vuoi cambiare i caratteri. Se ti va bene il font che ho inserito nel codice arduino non devi fare niente. Il programma processing stampa sul terminale le righe che poi devono essere copiate e incollate nel codice di arduino. Quindi ti pemette, oltre a calcolare le traiettorie, di semplificarti la vita per poi importarle nell'arduino.
Fatto ciò, che, ripeto, è da fare solo se vuoi cambiare i font, l'arduino funziona da solo, non serve più alcuna interazione con il pc.

Scusa se sono lento nella risposta ma ho poco segnale qui dove sono.



Figurati, rispondi quando puoi.

Mi sono studiato un po' il codice. Ci sono ancora però delle cose che non capisco. Il codice che c'è in fondo alla pagina che mi hai linkato (città_disegna) quando lo scarico mi dice che è codice processing dall'estensione del file. Però se lo carico in processing e lo compilo mi da errore, se invece lo carico sull'IDE di arduino e lo compilo non mi da errore.

Per capirsi è il codice con tutti quei vettori int dichiarati all'inizio che poi sono i vettori contenenti l'informazione per la scrittura del font. Poi sulla pagina del progetto c'è anche un link allo sketch processing che hai utilizzato per il tuo progetto. Quello sketch sarebbe quello che crea il codice di arduino quindi quello con tutti i vettori dichiarati all'inizio?

Scusa per le molte domande ma sto cercando bene di capire come è strutturato il tutto. Ho capito che c'è un programma che in base ai dati che gli vengono forniti genera il codice per arduino ma non ho capito il perchè dell'errore di compilazione che mi da su processing e il perchè non mi dia errori sulla IDE arduino. Ovviamente non l'ho caricato sul mio arduino perchè dovrei riadattarlo, l'ho solo compilato.

Veniamo ora al mio problema. Non so se hai studiato la parte riguardante la pianificazione di traiettorie a Robotica ma io devo sfruttare gli algoritmi che producono rette e archi di circonferenza nello spazio operativo.

Se non ho capito male quelle che usi tu sono funzioni derivanti da un fontPathGenerator in Java, quindi funzioni che accettano in ingresso array definiti in un certo modo e contenenti certe informazioni. Il fatto è che lo scopo del mio progetto non è propriamente scrivere delle lettere ma (essendo una tesi) dimostrare come posso generare e inseguire delle traiettorie dando delle informazioni al mio manipolatore, nel mio caso le traiettorie che devo seguire sono le lettere dell'alfabeto ma devo dimostrare che le ho generate usando quegli algoritmi. Non so se mi sono spiegato, non è facile scrivendo farmi capire bene.

Il tuo progetto lo proporrò quando torno dalle vacanze per capire se lo posso usare ma loro vogliono che io applichi quello che ho studiato e che quindi insegua delle traiettorie (nello specifico lettere) usando la generazione di segmenti e circonferenze nello spazio operativo.

Poi dovrò mettere su un sistema di controllo dell'errore di inseguimento (anche questo studiato a robotica).

Comunque sia anche se non riuscissi a riadattare il tuo progetto mi ha dato una grande idea, magari mi scrivo un programma su Processing (o Python) che mi calcoli tutti i vettori necessari alle traiettorie, faccio in modo che mi stampi il necessario che poi io possa copiare e incollare su arduino per darlo in pasto alla cinematica inversa. Comunque sia sappi che lo terrò d'occhio e magari mi dedicherò a fare qualcosa di simile più avanti, mi è davvero piaciuto tantissimo, una bella implementazione robotica.

Dovrò chiarire diverse cose al mio ritorno dalle vacanze, comunque se intanto (sempre quando puoi) mi rispondi alle domande attuali te ne sono grato.  :)

Grazie mille per ora dell'aiuto e supporto che mi hai dato.  :) :) :)



Jujo

I codici hanno entrambi estensione .pde, sia quello arduino che quello processing. Devi distinguere tra i due, ma è facile.
Uno ha la funzione void loop() - arduino, mentre l'altro ha void draw() - il codice processing. Questo perchè utilizzo la versione 0023 di arduino, dalla versione 1.0 l'estensione è cambiata in .ino.

Le funzionalità che generano il codice per scrivere le lettere utilizzano le librerie dei glifi di Java, non ci penso nemmeno a scriverle da solo... la cosa bella del codice processing è che utilizza poche righe di codice per generare le traiettorie proprio perchè usa le librerie dei glifi di java, se devi fare tutto con le tue traiettorie personali, mi dispiace ma non sono in grado di aiutarti.


D4NI3L3


I codici hanno entrambi estensione .pde, sia quello arduino che quello processing. Devi distinguere tra i due, ma è facile.
Uno ha la funzione void loop() - arduino, mentre l'altro ha void draw() - il codice processing. Questo perchè utilizzo la versione 0023 di arduino, dalla versione 1.0 l'estensione è cambiata in .ino.

Le funzionalità che generano il codice per scrivere le lettere utilizzano le librerie dei glifi di Java, non ci penso nemmeno a scriverle da solo... la cosa bella del codice processing è che utilizza poche righe di codice per generare le traiettorie proprio perchè usa le librerie dei glifi di java, se devi fare tutto con le tue traiettorie personali, mi dispiace ma non sono in grado di aiutarti.




Giusto non ci avevo pensato. Mi aveva spiazzato l'estensione, non sapevo tu usassi una vecchia IDE, adesso mi è tutto più chiaro.

Infatti come immaginavo, sfrutta le librerie dei glifi, purtroppo invece devo farmi tutto da solo. L'idea della tesi è proprio dimostrare che ho pianificato delle traiettorie e che ho saputo attuare la cosa con il mio manipolatore (ovviamente devo aspettare i nuovi servi, quelli migliori), sono state scelte le lettere proprio per avere qualcosa di tangibile e non una traiettoria a caso. Inoltre le lettere (in stampatello) sono tutte riassumibili in segmenti e archi di cerchio, per questo devo studiarmi la pianificazione di queste due figure geometriche.

Comunque sia mi hai dato delle ottime idee e ripeto tengo da conto questo codice perchè potrei riutilizzarlo in seguito. Intanto magari mi scrivo un programma in processing che mi stampi i vettori da scrivere poi su Arduino. Magari oltre a stampare le info gli faccio anche disegnare le traiettorie così vedo se le informazioni sono corrette.

Mi ci vorrà un po' a scriverlo ma non dovrebbe essere complesso, utilizzerò una serie di cicli for e le parametrizzazioni cartesiane.

paulus1969

Ma per quale motivo vuoi usare Processing?
Puoi lavorare con Python (o in Fortran) e passare - come ti suggerii all'inizio - direttamente gli angoli dei servomotori ad Arduino.
Se usi Windows potresti anche pensare all'accoppiata Visual Studio - Firmata in modo da comandare l'Arduino direttamente dal PC (in questo caso controlli proprio i singoli pin) ed ottenere un maggiore impatto: oltre alle lettere, potresti anche far disegnare qualcosa col mouse in una zona dello schermo e poi far seguire al laser la traiettoria corrispondente (puoi parametrizzare la figura durante la stessa fase di disegno e trovarti quindi la cosa già quasi fatta).

Go Up