Archivi tag: quadricottero

Sulla calibrazione dell’IMU

I’d like to put here some consideration about the imu calibration, that means how it is mounted the imu on the drone respect the propeller plane. This information is fundamental to garanty a perfect hover position without lateral mevement of the drone.

In other words, if I set roll=0 and pitch=0 I want that the prop plane is aligned with the world, evenif the sensor can be not perfectly aligned with the world (and also with the propeller plane).

In this pictures you can see this case: the world (blue) , the sensor (red) and the prop plane ( orange).

IMU_cal1 IMU_cal2

In the next picture let’s put some manes to the angles:

IMU_cal3

Important: Note that gamma is the angle measured by the accelerometer.

The most important information I need to know is the angle beta : the offset between the sensor and the prop plane . this is the error generated to the mechanical installation of the imu.

This value is used to compensate the measured value from the accelerometer.

alpha and beta are the 2 unknowns so I need 2 equations to solve this problem.

I decide to use this simple method to calibrate imu:

1) Take a reference plane ( my kitchen table) . It does not metter if it is not perfect alingned to the world, it is just enough it is stable.

2)Place from behind the prop plane on the “table roof”.

IMU_cal3b

3) Measure the angles of the accelerometer (gamma1).

4)turn the drone 180 degree respect yaw and place it again on the table roof.

5)Measure the angles again ( gamma2) .

6)consider that, in those 2 measurements, the alpha angle is constant ( i do not move the table…) , while the angle beta is equal but inverted ( due to the rotation of the drone).So the result is:

IMU_cal4

 

In order to manage this method in a easy way I added in the code the option called “fine calibration” .

The last version is now on github.

Just run the myQrc.py , move to the new mode “IMU” and follow the instructions.

 

 

 

 

Alfa1test. Preparazione

Durante gli ultimi fine settimana sono stato impegnato , cosi’ non mi e’ stato possibile continuare i test.

Ad ogni modo ora in questo post introduco il codice che ho creato per quello che ho creato alfa test, una sessione di verifiche per preparare il codice finale.

Alfa1 test include le seguenti funzionalita’:

  1. jogging manuale del motore
  2. lettura del IMU
  3. Logging dei dati(w motore,e angoli dell’IMU)

Le azioni da prendere durante questi test sono:

  1. verificare i disturbi sull’IMU per via delle vibrazioni motore
  2. testare differenti valori del filtro IMU
  3. avviare il motore e provare a capire con questa configurazione qual’e’ il valore di velocita’ angolare di equilibrio (hover w)
  4. capire al variare di w come varia angolo del quadricottero
  5. montare differenti pesi sul braccio del quadricottero e vedere i diversi wh per verificare il mio modello matematico
  6. misurare la velocita’ angolare reale del motore con il mio smartphone (solo curioso sulla possibilita’ di misurare la frequenza usando un sound spektrum analyzer)

Spero di iniziare domani alfa1test , poi potr’ condividere il codice.

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.

Aggiornamento sviluppo

In questi giorni mi sono dedicato ad alcuni approfondimenti di carattere teorico, aggiornando le pagine  sui motori ed eliche.

Ho deciso che data l’instalbilita’ del quadricottero, sara’ quasi subito necessario introdurre un giroscopio o mglio un giroscopio +accelerometro.Penso di acquistare MPU6050 (giro+acc).

Ho poi acquistato la batteria : FULL POWER 3S 11.1V 4000MAH 30-45C

ed il caricabatteria : Equilibrium mini v2

infine ho scrito la classe dell’oggetto  motor.py ( a breve on line) in cui gestisco interfaccia fra comando della velocita motore (in %)  e l’uscita PWM di rpi

Istallazione SW

In attesa che mi  arrivi l’hw  ho settato il software.

Sul mio laptop con ubuntu ho intenzione di effettuare la parte principale dello sviluppo del programma. Per tanto ho istallato ninja IDE, direttamente usando ubuntu software center.

Per comodita’ ho creato  una cartella /home/pyton

il sw cosi creato ( file.py)  lo copiero’ su rpi

Per quanto riguarda rpi ho preso l’immagine rasbian (2013-02-09-wheezy-raspbian.img) che avevo “in casa” e l’ho istallata su una SD da 2GB.

Si puo trovare l’ultima versione disponibile a questo link

Avviato rpi ,collegato al televisore di casa via hdmi e ad una tastiera, ho lasciato tutti i settaggi di default della configurazione , ne sono uscito ed e’ partito rpi.

L’ho collegato al router via cavo, spento tv e tolta tastiera.

Sul router l’ho riconosciuto e definito il suo indirizzo ip statico:192.168.0.50

legandolo al proprio MAC address. (Io uso un router della netgear, e’ mi estato molto intuitivo capire come).

dal laptop , sul terminal ho digitato

ssh pi@192.168.0.50
password : raspberry

ora il terminale del laptop e’ diventato il terminale del rpi

ho lanciato

$ sudo apt-get undate
$ sudo apt-get upgrade

L’aggiornamento prende circa un ora

Ho lanciato l’istallazione della libreria  RPIO che mi permettera’ di gestire diverse uscite di rpi con un segnale PWM:

$ sudo apt-get install python-setuptools
$ sudo easy_install -U RPIO

infine ho creato la cartella che accogliera i file.py:

mkdir python

Link:

ninja IDE

RPIO