Archivi categoria: quadcopterPi

progetto quadricottero controllato da raspberry PI

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.