Archivi tag: raspberry pi

myQrc Rilasciata

I just upload the last and final version of the myQ release candidate on github

DSC_6918

All the software has been debugged and tested.

All the functionalities are now stable.

I tested in different options (debug mode, netscan activated, sensor log) and the result is that I can run the main loop every 10 ms and get sensor data every 6 ms.

It can happen to have a delay on the sensor data loop when a log is added ( 2/3 ms).

 

I removed the webserver from the list of test to do, so it is not supported in this version of the software. The main reason is an instability when runnin gon raspberry. I have to investigate a more robust way to manage the comunication via browser.

 

Next time I will write a post the drone will be just landed…(after its first flight!!!)

Classe sensor.py pronta

Dopo alcune attivita’ collaterali (costruirmi il nuovo tavolo da lavoro in garage per ospitare le prossime prove) ho completato i test sull’IMU e creato l’oggetto sensor che puo lavorare in un thread paralllelo in  modo da poter avere a disposizione le informazioni aggiornate del sensore(ogni 5-8 ms).
E’ possibile scaricare l’esempio  sensor_test .Lanciandolo si puo’ vedere sul terminale i valori attuali di roll,pitch eyaw.

I dati messi a disposizione dalla classe sono: posizione  angolare [deg],velocita’ angulare[deg/sec], accelerazione lineare[m/sec]

Le principali modifiche rispetto al precedente IMU_test sono:

  • Ho notato che l’inizializzazione di alcuni parametri del mpu6050 puo fallire. L’ordine con cui si inizializza i dati ne influenza la riuscita. Pertanto ho aggiunto una funzione che verifica la corretta inizializzazione del sensore.
  • Il vettore accelerazione e’ stato normalizzato e scalato in modo che la risultante quando fermo sia uguale alla gravitaì .Questo puo’  aiutare se si vuole integrare l’acccelerazione per stimare velocita’ lineare e movimento lineare.
  • l’oggetto sensor.py puo’ lavorare in un thread in parallelo.
  • minori modifiche fatte sui nomi delle variabili.

Prossimi passi:

  • Comprare alcuni connettori e predisporre un collegamento definitivo per il sensore e i motori
  • montare il sensore sulla struttura con i motori in funzione e verificare se occorre utilizzare sul sensore dei filtri piu severi.

Tutorial: come leggere i dati dal IMU

Nel precedente post ho descritto come settare raspberry pi per la connessione col sensore IMU.

Ora e’ tempo di vedere come leggere dati dal sensore.

Prima di tutto e’ necessario il sw che gestisca l’interfaccia i2c.Si possono trovare diversi esempi. Di seguito ne trovi uno : adafruit_i2c.py da github.

Quindi e’ necessario definire un codice specifico per il proprio sensore , nel mio caso un MPU6050.

Ho cercato per diversi giorni di scrivere il mio codice incontrando un problema di inconsistenza sui dati:anche tenendo il sensore fermo ricevevo dei risultati sempre differenti.Sospetto fosse un problema di formattazione dei dati.

Alla fine , grazie al grande lavoro di Hove nel suo blog, ho utilizzato il suo codice code e sono ora in grado di ricevere dati correttamente dal sensore.

Ho fatto alcune minime modifiche e preparato questo IMU_test file.

Cosi ho iniziato alcuni test preliminare per verificare il comportamento del sensore.

Ho montato il sensore su una barra orizzontalmente,quindi ho fatto ruotare la barra di una quantita’ ( 13 gradi, misurata con la bolla dello smartphone); infine l ho riposto orizzontale.

IMU_test1

Ho registrato su di un file i dati: accelerazione lungo gli assi (da ACCelerometro) e la velocita’ angolare(dal GYROscopio). Su di un foglio excel ho calcolato l’angolo sia rispetto ACC che il GYRO:

  • rx ACC=DEGREES(ATAN2(accZ+9.8;accY))
  • rx(i) GYRO=wx(i) *dt+wx(i-1)

Sotto trovi il grafico risultante.

IMU

Ho sottolineato in figura i due tipici problemi sul IMU :

  • lo slittamento del Gyro (puoi vedere un angolo che da 1 grado deriva mentre dovrebbe essere uguale a 0)
  • la sensibilita’ al rumore dell’ Accelerometro.

Quindi il prossimo passo dello sviluppo e’ cercare di ridurre questi due problemi cercando di filtrare e combinare i risultati dai due tipi di sensori.

Istallazione del sensore IMU

Da una settimana circa sto giocando  col mio IMU: Inertial Measurement Unit.

Ho acquistato su e-bay un MPU6050, sensore che include:

  • un giroscopio a tre assi,che e’ ingrado di restituire la velocita’ angolare registrata intorno a 3 assi x,y,z.
  • un accelerometro che e’ in grado di misurare l’accelerazione lungo i 3 assi x,y,z.

Tale sensore e’ in grado di comuncare attraverso l’interfaccia  I2C.

Qui potete trovare lo schema elettrico che sto utilizzando.

wiring_IMU

Per la parte di software ho trovato un chiaro tutorial sul sito della Adafruit , per cui vi rimando li per i dettagli. Qui riporto per promemoria i passaggi fondamentali per istallazione:

in sudo nano /etc/modules  add:

  • i2c-bcm2708
  • i2c-dev

sudo apt-get install python-smbus

sudo apt-get install i2c-tools

in sudo nano /etc/modprobe.d/raspi-blacklist.conf  comment:

  • #blacklist spi-bcm2708
  • #blacklist i2c-bcm2708

Ora, lanciando  sudo i2cdetect -y 1 si dovra’ vedere l’indirizzo 0x68, corrispondente all’indirizzo di default del sensore.