[Linuxtrent] Re: Suggerimento python per wiimote

  • From: Antonio Galea <antonio.galea@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Tue, 30 Nov 2010 17:33:30 +0100

2010/11/30 matteo ruffoni <mattruffoni@xxxxxxxxx>:
>
> 1)il file che fa i grafici di dati casuali in real time è qui
> http://eli.thegreenplace.net/2008/08/01/matplotlib-with-wxpython-guis/ (il
> secondo esempio) e se ho ben capito i dati che grafica si trovano nella
> classe DataGen sotto le voci
>
> def _recalc_data(self):
>         delta = random.uniform(-0.5, 0.5)
>         r = random.random()

Hai capito benissimo, sì. La classe GraphFrame registra un timer
per ridisegnare il grafico ogni 100ms. Ogni volta che il timer scatta,
se la "raccolta dati" non è stata fermata, chiama la classe DataGen
e si fa restituire un nuovo numero da aggiungere ai dati che ha in
memoria (il metodo on_redraw_timer).

> 2) forse dovrei riuscire, ovviamente non ne sono sicuro, a sostituire
> delta(?) e r(?) , con idati provenienti dalle accelerezioni dello wimote,
> che dovrebbero essere fornite dalle librerie cwiid
>  e sono nei campi(?) cwiid.Y

Puoi senz'altro farlo, sì - l'altro script che hai postato ti fa vedere come
si leggono i dati da cwiid, potresti cavartela già così:

def _recalc_data(self):
    ax, ay, az = [], [], []
    messages = wiimote.get_mesg()   # Get Wiimote Messages
    for mesg in messages:   # Loop through Wiimote Messages
        if mesg[0] == cwiid.MESG_ACC: # If a accelerometer message
                ax.append( mesg[1][cwiid.X] )
                ay.append(  mesg[1][cwiid.Y] )
                az.append( mesg[1][cwiid.Z] )
    #adesso che hai i tre array delle accelerazioni, li puoi usare
    #per calcolare delta ed r
    delta = ...
    r       = ...

Ovviamente, le funzioni per delta ed r te le inventi a gusto. Ricordati
di gestire il caso in cui gli array sono vuoti - potresti avere il Wiimote
spento.

> Sto "studiando" python da una settimana quindi non sono in grado di usare un
> linguaggio adatto e non so nemmeno se le soluzioni che ho individuato sono
> quelle giuste.

Beh, per essere alle prime armi hai già messo le mani su "roba
buona"!

> Un file che fa dei grafici ragionevoli, ma non in real time, è qui
> http://convolutedlogic.com/projects/wiimote/index.htm e si chiama
> wiimote_record_accel_vel_pos.py

Per graficare questi, devi cambiare la logica della classe
wxPython/matplotlib che hai postato: quella usa un'unica
variabile in y, e un semplice indice di iterazione in x.

Potresti usare un thread[1] separato, che raccoglie i dati del Wiimote
e li accumula in un semplice array di tuple etichettate con il tempo
di lettura:
       data = [ (t0,ax0,ay0,az0),...]

Poi la classe che grafica la modifichi per visualizzare quel che ti pare
di questi dati.

Spero di non aver sparato troppo in alto, e che i suggerimenti
ti tornino utili!

Antonio

[1] http://www.doughellmann.com/PyMOTW/threading/index.html
--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: