Dopo avere preparato tutti i tool necessari, ho preparato BigWheely nella stessa posizione dei test precedenti, ovveros su una sedia girevole.

test compass sedia r

 

Ora ho iniziato a campionare i dati tramite il FreeIMU calibration GUI, nel frattempo ruotavo lentamente la sedia.

Ecco il video della campionatura dei valori:

 

Al termine dell'acquisizione, e premuto il pulsante Calibrate, il programma calcola automaticamente gli offset di correzione.

risultati calibrazione FreeIMU GUI

 

Molto interessante è il fatto che i dati trasmessi da Arduino vengono salvati in un file, questo si chiama magn.txt e si trova all'interno della cartella principale del programma.

Io allego il file della mia acquisizione.

Ho approfondito la lettura e l'interpretazione di questi dati, riportandoli in un foglio excel e applicando le correzioni calcolate, in modo da vedere graficamente il risultato:

tabella calibrazione0

 

Mettendo in relazione i valori X e Y acquisiti dal compass è possibile visualizzare il cerchio più volte descritto durante lo studio dell'algoritmo per la calibrazione. Il grafico seguente rappresenta Fx(y).

Il cerchio BLU indica i dati acquisiti,senza correzioni, mentre il cerchio ROSSO indica i valori dopo aver applicato l'offset calcolato (per X e Y).

grafico calibrazione1

 

Per curiosità ho analizzato anche i dati di Fx(z), questo mostra la deviazione rispetto l'asse z.
Idealmente avrei dovuto vedere una semplice riga e non un ellisse come mostrato nel grafico seguente.

In realtà un piccolo scompenso esiste anche qui, ma per ora vorrei poter trascurare questo "errore" in quanto non è molto accentuato. Nel caso in cui avessi utilizzato il compass nelle tre dimensioni, avrei dovuto da subito tenerne conto, ma nel progetto BigWheely, l'inclinazione dell'asse z non cambia mai (si muove su superfici piane !). 

grafico calibrazione2

 

Nel grafico seguente ho voluto mettere in relazione l'angolo di rotazione con l'arcotangente calcolata tra gli assi X e Y.

Si può notare che l'arcotangente tra i 2 vettori non è lineare in funzione della rotazione di BigWheely.
Questo è proprio il fenomeno riscontrato negli esperimenti precedenti, per cui l'indicazione dell'angolo sembra impazzire durante la rotazione (vedi test precedenti).

La linea ROSSA mostra invece il comportamento ideale. Il valore compensato dovrebbe avvicinarsi a questa linea di tendenza.

grafico calibrazione3

 

Ho voluto infine mettere in relazione l'errore generato in funzione della rotazione, si può notare come in prossimità di alcuni angoli la differenza è pressochè nulla (es. 70° e 150°) , mentre in altre posizioni, l'errore si manifesta notevolmente.

grafico calibrazione4

 

L'applicazione permette infine di esportare i valori di compensazione in un file, questo è pensato per l'utilizzo con il modulo FreeIMU, ma questi dati saranno certamente utili al momento di integrarli nel futuro firmware di BigWheely.


/**
* FreeIMU calibration header. Automatically generated by FreeIMU_GUI.
* Do not edit manually unless you know what you are doing.
*/
#define CALIBRATION_H
const int acc_off_x = 0;
const int acc_off_y = 0;
const int acc_off_z = 0;
const float acc_scale_x = 0.665659;
const float acc_scale_y = nan;
const float acc_scale_z = nan;
const int magn_off_x = 255;
const int magn_off_y = 153;
const int magn_off_z = -160;
const float magn_scale_x = 262.332062;
const float magn_scale_y = 272.456604;
const float magn_scale_z = 93.983179;
Allegati:
Scarica questo file (magn.txt)magn.txt[ ]298 kB