martedì 12 febbraio 2008

"telechirurgia"


Come si puo' controllare un braccio robotico che esegue una operazione chirurgica a distanza?
Ecco dei rudimenti.













Ho messo il datasocket al .vi del post precedente.
Adesso ci sono 2 .vi, uno che sta su un PC e uno sull'altro.
Il .vi col Write data socket, prende i dati dal joystick e li manda sulla rete.
Il joystick e' connesso a questo PC (192.168.1.2).
























Il NXT e' connesso all'altro PC (192.168.1.3) che fa girare questo .vi con il datasocketRead.



































Prima accortezza: il router deve aprire la porta del datasocket (3015).
Seconda: i datasocket server devono essere lanciati su entrambi i PC
(C:\Program Files\National Instruments\DataSocket\cwdss.exe).
Terza: i dati devono fluire su uno stream chiamato "wave".


http://zone.ni.com/devzone/cda/pub/p/id/257?metc=mthg3n

lunedì 11 febbraio 2008

controllo NXT con joystick








































per controllare via joystick (attraverso il PC) un braccio robotico connesso allo stesso PC si puo' usare questo .vi


la divisione per 128 che si vede sui dati provenienti dal joystick e' richiesta dal fatto che il parametro "power" del NXT e' limitato, mentre dal joystick escono dati da -32768 a +32768.

il prossimo passo sara' telecomandare un NXT remoto su internet (occorrera' una webcam...): basta usare il datasocket sul cluster degli assi (il filo marrone uscente dal joystick come "axis info").

domenica 10 febbraio 2008

matrici 2D con NXT-G

Le matrici 2D sono semplicemente array 1D in cui le colonne ( o le righe) sono infilate una di seguito all'altra.

Pertanto e' solo questione di manipolare l'indice in modo che da due numeri (l'indice di riga e l'indice di colonna) se ne ricava uno solo.

Se si crea un MyBlock che all'interno manipola l'indice, si rileva un baco pero': il filo che porta DENTRO l'array rimane "spezzato" (cio' non accade al filo d'uscita).

Percio' e' meglio partire da Labview e crearsi un Block apposito.

Supponiamo di voler creare un blocco che inserisca un elemento in una matrice alla posizione (riga, colonna).

In LV occorre creare una struttura di files i cui nomi devono essere specificati in modo fisso.

Il modo piu' veloce e' fare creare a LV la struttura dei files, chiamando il Wizard sotto Tools->NXTModule.

Il file piu' importante e'









dopo di questo il piu' complicato e' invece:







che viene costruito con la tavolozza NXTControls e
che nel block diagram e'













questi sono i blocchettini che non si vedono nella figura principale perche' dentro il "case" a destra.
in pratica servono a dire che il valore va cambiato quando l'utente lo cambia ...

per rendere automatico il tutto e' meglio partire con il collegare (crea variabile locale con tasto destro sul controllo nel front panel) i vari blocchetti alle variabili locali e solo in seguito definire le opzioni del case: infatti seguendo questo schema il case stesso (tasto destro sull'intestazione del case) proporra' le varie possibilita' di evento (per esempio: cambia il valore del numero di colonne)








































praticamente Config serve a "sentire" quale valore viene cambiato dal programmatore NXT-G nella consueta finestra in basso a sinistra (in NXT-G) e a passarlo di conseguenza al .vi principale.

infine occorre definire nella directory creata col Wizard quali immagine vedere nella tavolozza (palette) e quale vedere quando si trascinera' il blocco in posizione sul diagramma.

Per caricare queste immagini (.png) occorre poi un file .vi (quello che contiene la parola Draw) : va bene quello di default.

Per far comparire l'hub sotto il blocco (quella cosa che si espande e permette di collegare i fili per intenderci) occorre non dimenticarsi di collegare il "connettore".
Ecco come si fa.
Si va sul front panel del principale (2D_Array_Insert.vi nel nostro caso): in alto a destra c'e' una figurina da cliccare col destro -> Show Connector.
Sul front panel si clicca ora un elemento (per esempio number_of_columns) e subito dopo si clicca uno dei quadratini che rappresentano le "prese" per i fili. Il quadratino cambia colore se viene assegnato.
Si raccomanda di assegnare i due quadratini in alto a destra e a sinistra ai controlli di Sequence Flow.

Finito tutto questo si passa al NXT-G e si chiama il wizard di importazione, indicandogli la directory dove sta la serie di files e la tavolozza (per esempio : Advanced) dove mettere il blocco.

Se dira' "successful" significa che il blocco si potra' prelevare in tavolozza ed usarlo:

sabato 9 febbraio 2008

controllo remoto del NXT con Labview/NXTtoolkit

Ho chiesto a qualcuno su nxtasy.org se voleva provare a controllare il mio nxt (o viceversa) usando il datasocket (*) fornito da Labview ma nessuno mi ha mai contattato.

Lo linko qui (dove pero' non posso caricare files, solo immagini); magari c'e' interesse.

L'idea e' di controllare NXT attaccato ad un PC (il mio bluetooth ha dei problemi, ma passare a BT e' facilissimo) da un altro PC via internet.

Il primo esperimento si concentra sul semplice problema di comunicare. Il sensore e' quello di luce; nessun attuatore.

Un .vi parla col NXT via USB e passa i dati al datasocket (internet); l'altro .vi parla col data socket e mostra i dati a schermo.

Il .vi che riceve i dati deve "sottoscrivere" la connessione indicando dspt://indirizzoIPdelPCchetrasmette/wave
dove wave e' il nome che ho scelto nel primo .vi per lo stream di dati nel PC che trasmette.

L'esperimento che ho proposto consiste nello scaricare i due .vi di Labview (o almeno quello che si vuole usare) e provare a vedere che succede.

E' importante la configurazione iniziale del data socket. Inoltre sul router va abilitata la porta 3015.


Se funziona si puo' passare ad altro (vedi esperimento successivo su nxtasy.org) .

(*) Copio-incollo dalla tesi di F. Altamura:
Le VI di LabVIEW possono comunicare o lavorare in rete (networking) con altri
processi, inclusi quelli che sono eseguiti da altre applicazioni o su computer remoti.
In particolare è possibile condividere dati in tempo reale con altre VI in rete
sfruttando la tecnologia DataSocket della National Instruments.
È necessario installare sulla macchina un Datasocket Server , cioè un applicazione
che fornisce il servizio Datasocket ad altri computer effettuando operazioni di
networking e di gestione di file.
Con questo tipo di tecnologia è possibile vedere e comandare ogni controllo e
indicatore del pannello di controllo della VI.
Attraverso questo tipo di connessione vengono scambiati dei dati, non dei grafici, e
in questo modo è possibile operare delle elaborazioni sui dati da remoto.
Vediamo, nella figura 7.3, due esempi di diagrammi a blocchi per leggere e scrivere
dei dati attraverso la connessione DataSocket.

La VI di sinistra genera una temperatura e invia il dato relativo ad essa al
DataSocket server con il nome di temp , mentre la VI di destra preleva il dato
relativo a temp dal server e lo visualizza su un grafico.

Il programma sviluppato per il controllo remoto dell apparecchio usa la tecnologia
Datasocket per lo scambio dei dati attraverso il web; è composto da due parti
distinte:
1. una parte installata sulla macchina a cui è collegato fisicamente
l' apparecchio e su cui è installato il Datasocket server ;
2. una parte (client) installata su una qualsiasi altra macchina remota che,
dialogando con il server, controlla l 'apparecchio.

come fare ottime fotografie ai robot NXT

Dave colpisce ancora!!
Ecco un fantastico tutorial su come fare le foto ai robot (ma vale anche per altre situazioni ovviamente).

Cerco di riassumere qui per i ragazzi italiani come mio figlio (macchina fotografica punta-e-scatta, cioe' non reflex) le cose fondamentali:

primo passo:

Step back about 3 feet and zoom in
Fai un passo indietro di 1 metro e zoomma.

Put the robot in a corner of a room and use white walls to reflect the flash
Metti il robot in un angolo della stanza e usa i muri bianchi per riflettere il flash a 45 gradi (cioe' in modo che il flash non rimbalzi indietro accecando)

Use Full Automatic mode (with flash)
Usa modo automatico con flash

Crop picture afterwards to get close-ups instead of getting closer or zooming in more
Non zoomare ulteriormente con la macchina, ma per selezionare i particolari una volta fatta la foto, usa un programma di fotoritocco che sappia ritagliare il particolare che interessa

Use digital photo editing software to adjust the lighting afterwards if necessary
Usa il programma di fotoritocco per sistemare l'illuminazione della foto.



Fill Light: da usare per schiarire la foto, che in casa viene sempre un po' scura
Neutral Color Picker: serve a dire al programma quale punto della foto e' bianco (ad esempio il corpo del NXT). Supponi che il NXT nella foto e' venuto giallastro: clicco questo Picker, poi con la pipetta vado sulla zona giallastra che voglio diventi bianca e clicco. A questo punto il programma sa che quello deve diventare bianco e trasforma tutto il resto della foto coerentemente.

venerdì 8 febbraio 2008

toledo

schema per iniziare a provare la port del NXT

data sheet espansione di memoria i2c

Obiettivo: creare un datalogger con grande profondita' di memoria.
caratteristiche eeprom 512kB:






































Ecco gli strumenti virtuali Labview che permettono a NXT di accedere ad un indirizzo i2c esterno.
Essi sono presi dal Block scaricabile dal sito Mindsensors e aperti con Labview Student Edition scaricabile da National Instrument.

altro sensore i2c : temperatura