Registrazione dati con cervello/sensori VEX (versione Python)

introduzione

In questo articolo discuteremo come creare un progetto di registrazione dati che incarichi il robot VEX di raccogliere dati con VEX Brain e salvarli in un file CSV sulla scheda SD per l'analisi dei dati.

La registrazione dei dati è uno strumento potente che possiamo utilizzare per assistere la ricerca scientifica, condurre i nostri esperimenti e risolvere problemi specifici. Ci sono vari compiti divertenti ed entusiasmanti che possiamo portare a termine con il robot VEX con la registrazione dei dati. I seguenti sono alcuni esempi:

  • Raccolta dati con il sensore di distanza per calcolare la velocità del robot
  • Guidare il robot in classe e raccogliere dati con il sensore ottico per osservare i cambiamenti di luce in vari luoghi.
  • Portare il robot in un'avventura e registrare i dati delle coordinate GPS per creare una mappa.

Competenze di codifica necessarie per lo sviluppo di un progetto di registrazione dati

  • Utilizza vari comandi per raccogliere dati con VEX Brain/Sensors e aggiungerli a una struttura dati.
  • Scrivere i dati in un file con valori separati da virgole (CSV) sulla scheda SD.

Hardware richiesto per la registrazione dei dati:

  • Un cervello VEX (QI, V5, ESP)
  • Una scheda SD
  • Un sensore o più sensori (opzionale, in base ai dati richiesti)

Ottenere dati dal sensore

Possiamo programmare il robot VEX (IQ, V5, EXP) per acquisire i dati dai seguenti sensori:

  • Sensore inerziale
  • Sensore di distanza
  • Sensore ottico
  • Sensore di visione
  • Sensore di rotazione (V5, EXP)
  • Sensore GPS (V5)

Nota: il cervello VEX IQ (2a generazione) e il cervello VEX EXP hanno un sensore inerziale integrato. Possiamo raccogliere i dati del sensore inerziale con questi VEX Brian.

In questo articolo svilupperemo un progetto di registrazione dati che raccoglie i dati di accelerazione con VEX IQ Brain (2°) e li memorizza in una scheda SD. 

Innanzitutto, dobbiamo scrivere un breve programma per ottenere letture dal timer e dal sensore inerziale integrati nel cervello VEX IQ (2°).

  • All'inizio di questo programma, dovremo importare i moduli Python per controllare VEX IQ Brain (2°) e recuperare i dati da esso. Quindi, inizia aggiungendo queste istruzioni al progetto.
  • # La libreria importa
    da vex import *

    # Brain dovrebbe essere definito di default
    brain = Brain()
    brain_inertial = Inertial()
  • Successivamente, aggiungi il codice per dichiarare una variabile numOfDataEntries per memorizzare il numero di voci di dati per la registrazione, dichiara una variabile polling_delay_msec per memorizzare il valore dell'intervallo di tempo per la lettura dei dati e crea una variabile stringa vuota data_buffer per memorizzare i dati letti dal sensore.
  • numOfDataEntries = 100
    polling_delay_msec = 50
    data_buffer = ""
  • Poiché utilizzeremo il valore corrente del Timer per aggiungere il Timestamp ai dati, dobbiamo reimpostare il valore del timer su 0 secondi prima di iniziare a raccogliere i dati.
  • # Aggiungi codice di inizializzazione del timer
    brain.timer.clear()
  • Prima di utilizzare l'istruzione che recupera i dati dal VEX IQ Brain (2nd) e registra i dati nel buffer, dobbiamo prima comprenderla.
    La seguente istruzione aggiunge il valore corrente del timer alla variabile data_buffer in un formato specifico.

    Una riga di codice Python è evidenziata a pezzi per spiegarla in dettaglio. La riga di codice recita data_buffer += 1.3f % brain.timer.value() + virgola. Per prima cosa, l'operatore += viene evidenziato ed etichettato Aggiungi dati alla stringa data_buffer. Successivamente, la stringa 1.3f viene evidenziata ed etichettata come Stringa di formato. Successivamente, il segno di percentuale viene evidenziato ed etichettato come Operatore modulo stringa. Successivamente, il comando brain.timer.value() viene evidenziato ed etichettato come Valore corrente del timer. Infine, l'aggiunta della virgola alla fine viene evidenziata e riporta la dicitura Aggiungi una virgola alla fine per separare i dati.

    Analizziamo la stringa di formato “%1.3f”

    • “%”: introduce l'identificatore di conversione.
    • “1”: Indica il numero minimo di cifre che devono essere presenti nella stringa
    • “.3”: specifica il numero di cifre decimali da includere nel numero formattato.
    • “f”: Indica che il valore da formattare è un numero a virgola mobile.

    Pertanto, possiamo utilizzare la stringa di formato “%1.3f” per formattare un numero in virgola mobile con una larghezza minima di 1 cifra e una precisione di 3 cifre decimali.

  • Ora possiamo leggere il timer e il valore di accelerazione del sensore inerziale integrato nel VEX IQ Brain (2°) e quindi aggiungere i dati alla variabile data_buffer nel formato specificato.
  • # Comandi per scrivere i dati nel buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    Il codice precedente è spiegato in dettaglio. La prima riga data_buffer che utilizza brain.timer.value() è etichettata Aggiungi timestamp al buffer. Le tre righe successive sono etichettate Aggiungi il valore di accelerazione lungo gli assi X, Y e Z al buffer.

  • Nota: “\n” è il carattere di nuova riga. Indica che la riga termina qui e segna l'inizio di una nuova riga.
  • Quindi, per registrare un certo numero di voci di dati nella variabile data_buffer , possiamo utilizzare un ciclo for per eseguire ripetutamente le istruzioni che recuperano i dati e accodano i dati alla variabile data_buffer per un numero di iterazioni. La nostra strategia consiste nell'utilizzare il valore della variabile numOfDataEntries per determinare il numero di iterazioni.
  • # Generazione dati
    per i in range(0, numOfDataEntries):

    # Comandi per scrivere i dati nel buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
  • Finora, il nostro programma registra i dati il ​​più rapidamente possibile. Tuttavia, vogliamo registrare i dati a intervalli di tempo specifici. Pertanto, possiamo utilizzare una funzione wait() nel ciclo for per mettere in pausa il programma e aggiungere l'intervallo di tempo specifico tra due letture. Usiamo il valore della variabile polling_delay_msec per determinare il valore dell'intervallo di tempo.
  • # Generazione dati
    per i in range(0, numOfDataEntries):

    # Comandi per scrivere i dati nel buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    wait(polling_delay_msec, MSEC)

Congratulazioni! Abbiamo terminato il programma per ottenere letture (i dati di accelerazione) dal sensore inerziale integrato nel cervello VEX. Successivamente, esploreremo come scrivere i dati in un file CSV sulla scheda SD.

# La libreria importa
da vex import *

# Brain dovrebbe essere definito di default
brain = Brain()
brain_inertial = Inertial()

numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""

# Aggiungi codice di inizializzazione del timer
brain.timer.clear()

# Generazione dati
for i in range(0, numOfDataEntries):

# Comandi per scrivere i dati nel buffer
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

wait(polling_delay_msec, MSEC)

Collegare la scheda SD al VEX Brain

Prima di scrivere i dati su un file su una scheda SD, inserire prima la scheda SD nello slot per schede SD del VEX Brain.

IQ (2a generazione) Brain è mostrato con lo slot per la scheda SD evidenziato. Lo slot per la scheda SD si trova sul lato del Brain, a destra della porta USB-C.

Nota: Formattare la scheda SD su FAT32 per la scrittura dei dati. Si consiglia di utilizzare schede SD di dimensioni pari o inferiori a 32 GB.

Per garantire che la scrittura dei dati su un file sulla scheda SD possa essere eseguita in condizioni adeguate, dovremo aggiungere il codice per verificare se la scheda SD è inserita correttamente nel VEX IQ Brain (2°).

  • Utilizzare la funzione brain.sdcard.is_inserted() per verificare se la scheda SD è inserita. Se la scheda SD non è inserita, visualizzare il messaggio corrispondente sullo schermo VEX IQ Brain e tenere premuto il programma.
  • # Sospendi il programma se la scheda SD non è inserita
    in caso contrario brain.sdcard.is_inserted():
    brain.screen.set_cursor(1,1)
    brain.screen.print("Scheda SD mancante")
    while(True):
    wait(5, MSEC)
  • Nota: la funzione brain.sdcard.is_inserted() restituisce True se una scheda SD è inserita nel Brain.

Scrittura dei dati in un file CSV sulla scheda SD

Finora, il nostro programma può raccogliere dati con VEX IQ Brain (2°). Per completare il progetto di registrazione dei dati, dobbiamo scrivere i dati in un file con valori separati da virgole (CSV) sulla scheda SD per futuri esami e analisi.

  • Quando scriviamo diversi tipi di dati in un file CSV, vogliamo sapere quale tipo di dati contiene ciascuna colonna. Per fare ciò, possiamo aggiungere il testo dell'intestazione CSV alla variabile data_buffer prima di registrare i dati.
    Quindi, aggiungi il codice per dichiarare una variabile csvHeaderText per memorizzare il testo dell'intestazione CSV per specificare i nomi delle colonne per il file CSV e dichiarare una variabile sd_file_name per contenere il nome del file CSV da scrivere sul Scheda SD.
  • csvHeaderText = "tempo, x, y, z"
    sd_file_name = "myDataPY.csv"

Nota: Assicurarsi che le intestazioni siano nello stesso ordine dei dati memorizzati nella variabile data_buffer.

  • Successivamente, aggiungi il testo dell'intestazione CSV alla stringa data_buffer prima del ciclo for per la raccolta dei dati.
  • # Crea intestazione CSV
    data_buffer = csvHeaderText + "\n"

    # Generazione dati CSV
    for i in range(0, numOfDataEntries):

    # Comandi per scrivere i dati nel buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    wait(polling_delay_msec, MSEC)
  • Prima di scrivere i dati su un file sulla scheda SD, capiamo prima come utilizzare la funzione brain.sdcard.savefile().

    Una riga di codice Python è evidenziata a pezzi per spiegarla in dettaglio. La riga di codice recita brain.sdcard.savefile(sd_file_name, bytearray(data_buffer, 'utf-8')). Per prima cosa, la sezione brain.sdcard.savefile viene evidenziata ed etichettata Salva un bytearray in un file denominato sulla scheda SD. Successivamente, la sezione sd_file_name viene evidenziata ed etichettata Nome file. Infine, il bytearray(data_buffer, 'utf-8') alla fine viene evidenziato ed etichettato Buffer.


    Questa istruzione scrive i dati memorizzati nella variabile data_buffer in un file CSV denominato sulla scheda SD.
    Analizziamolo:
    • brain.sdcard.savefile(): la funzione salva un bytearray in un file con nome sulla scheda SD. La funzione restituisce il numero di byte scritti nel file.

    • sd_file_name: il primo parametro della funzione. Indica il nome del file da scrivere. In questo progetto, il nome del file è memorizzato nella variabile sd_file_name.

    • bytearray(datat_buffer,'utf-8'): il secondo parametro della funzione. Rappresenta il bytearray da scrivere nel file.

        • bytearray(): il metodo crea un bytearray mutabile. In questa istruzione, la usiamo per convertire una stringa in un bytearray specificando la codifica.
        • data_buffer: il primo parametro del metodo. Indica l'origine da convertire in un bytearray. In questo progetto la sorgente sono i dati memorizzati nella variabile data_buffer. 
        • 'utf-8': il secondo parametro del metodo. Indica la codifica specificata utilizzata per codificare la stringa. La codifica in questa istruzione è "utf-8". 
  • Dopo lo for del ciclo per la raccolta dei dati, utilizzare la funzione brain.sdcard.savefile() per scrivere i dati memorizzati nella variabile data_buffer nel file CSV sulla scheda SD. Inoltre, aggiungi il codice per controllare il valore restituito dalla funzione brain.sdcard.savefile() per verificare se i dati sono stati scritti correttamente nel file e visualizza il messaggio corrispondente sullo schermo cerebrale VEX IQ per ottenere un feedback in tempo reale. L'istruzione if alla fine aggiunge un messaggio per mostrare lo stato del file, stampando SD Write Error o Data Written.
  • # Generazione dati CSV
    per i in range(0, numOfDataEntries):

    # Comandi per scrivere i dati nel buffer
    data_buffer += "%1.3f" % brain.timer.value() + "\n"
    data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
    data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

    wait(polling_delay_msec, MSEC)

    # Scrive i dati sulla scheda SD
    brain.screen.set_cursor(4,1)
    if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
    brain.screen.print("Errore di scrittura SD")
    else:
    brain.screen.print("Dati scritti")
  • Nota: La funzione brain.sdcard.savefile() restituisce il numero di byte scritti nel file. In questo progetto lo utilizziamo per scrivere i dati raccolti in un file CSV, quindi il numero di byte scritti nel file deve essere maggiore di zero. In altre parole, se la funzione brain.sdcard.savefile() restituisce 0, possiamo concludere che i dati non sono stati scritti correttamente nel file. Altrimenti i dati sono stati scritti nel file.

Congratulazioni! Abbiamo sviluppato un progetto di registrazione dati che raccoglie i dati di accelerazione con VEX IQ Brain (2°) e li memorizza in un file CSV sulla scheda SD. Successivamente, esploreremo come aprire il file CSV per l'analisi dei dati. 

# La libreria importa
da vex import *

# Brain dovrebbe essere definito di default
brain = Brain()
brain_inertial = Inertial()

csvHeaderText = "time, x, y, z"
sd_file_name = "myDataPY.csv"
polling_delay_msec = 50
numOfDataEntries = 100
data_buffer = ""

# Sospendi il programma se la scheda SD non è inserita
if not brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("Scheda SD mancante")
while(True):
wait(5, MSEC)

# Aggiungi qui qualsiasi codice di inizializzazione del sensore &
brain.timer.clear()

# Crea Intestazione CSV
data_buffer = csvHeaderText + "\n"

# Generazione dati CSV
for i in range(0, numOfDataEntries):

# Comandi per scrivere i dati nel buffer
data_buffer += "%1.3f" % brain.timer.value() + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"

wait(polling_delay_msec, MSEC)

# Scrive i dati sulla scheda SD
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("Errore di scrittura SD")
else:
brain.screen.print("Dati scritti")

Apertura del file CSV per l'analisi dei dati

Una volta scritti i dati nel file CSV sulla scheda SD, possiamo utilizzare un'applicazione per fogli di calcolo per aprire il file per leggere e analizzare i dati. 

Nota: Due delle applicazioni per fogli di calcolo più comuni sono Fogli Google e Microsoft Excel. In questo articolo utilizzeremo Fogli Google (basati sul Web) per aprire il file CSV sulla scheda SD. Il processo di utilizzo di altre applicazioni è simile.

  • Rimuovere la scheda SD dallo slot della scheda SD del VEX IQ Brain. Se il computer dispone di uno slot per scheda Micro SD integrato, possiamo inserire la scheda SD direttamente in quello slot. Altrimenti, inserisci la scheda SD in un adattatore per schede SD e quindi collega l'adattatore al computer. 
  • Accedi al nostro account Google e apri Fogli Google. Crea un nuovo foglio di calcolo.
  • Nel foglio di calcolo, apri il menu “File” , seleziona “Importa” -> “Carica” -> “Sfoglia” , quindi scegli il file CSV sul computer. Dopo aver caricato il file CSV, fare clic sul pulsante "Importa dati". Dopo aver importato i dati, fare clic su "Apri ora" per visualizzare i dati raccolti nel file CSV.

    Dati CSV del progetto aperti in un documento di Google Fogli. Ci sono quattro colonne che indicano Tempo, X, Y e Z. Ci sono molte righe di dati che documentano l'accelerazione in ogni timestamp.

  • (Facoltativo) Un modo semplice per analizzare i dati è disegnare un grafico e quindi cercare le tendenze nei dati. Nel foglio di calcolo, apri il menu “Inserisci” e seleziona “Grafico” per disegnare un grafico utilizzando i dati nel file CSV. Il grafico seguente è il risultato dei dati di accelerazione raccolti con il VEX IQ Brain (2°).

    Chart of the data is opened in Google Sheets, showing the acceleration of the X, Y, and Z axes over time. The Z value stays near negative one, and the X and Y values stay near zero.


    Nota: Possiamo utilizzare l'editor di grafici per selezionare un tipo di grafico diverso o modificare il grafico in base alle nostre esigenze.

Fino a questo punto, abbiamo terminato il progetto di registrazione dati che raccoglie i dati con VEX IQ Brain (2°) e li salva in un file CSV sulla scheda SD. Inoltre, abbiamo imparato a leggere il file CSV sulla scheda SD utilizzando Fogli Google e persino a creare un grafico per ulteriori analisi. E dopo? Proviamo a pianificare esperimenti più entusiasmanti utilizzando il robot VEX per la registrazione dei dati, per osservare come i mutevoli fattori ambientali influenzano vari tipi di dati e ottenere una comprensione più profonda del mondo che ci circonda.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: