ridurre disturbi esterni su magnetometro CMPS03?

è da ormai un anno che ho a che fare con una CMPS03: http://www.robot-italy.com/it/cmps03-robot-compass-module.html
ed ho sempre avuto problemi con i disturbi esterni che mi falsano le misure... cosa si può fare per "schermare" la bussola dai disturbi esterni? qualcuno ha qualche suggerimento?
grazie in anticipo! :wink:

?R:
cosa si può fare per "schermare" la bussola dai disturbi esterni? qualcuno ha qualche suggerimento?

Impossibile per il semplice motivo che se la schermi poi no rileva più il campo magnetico terrestre, purtroppo le bussole in interno non servono a nulla perché sono disturbate da tutto, basta una qualunque massa ferrosa, o un cavo della 220, nelle vicinanze per farle deviare di molti gradi.
Un paio di anni fa assieme ad un amico abbiamo fatto dei test proprio con la CMPS03 all'interno di una palestra, quindi teoricamente lontani da fonti di disturbo, eppure abbiamo lo stesso verificato deviazioni fino a +/- 5° spostandoci all'interno dell'ambiente.
Anche in esterno per utilizzare le bussole è necessario prendere diverse precauzioni, la prima è installarla il più lontano possibile dai motori, se ci fai caso tutti i robot outdoor di piccole/medie dimensioni hanno delle torrette installate su un supporto lungo diverse decine di cm dove viene messa la bussola, e anche il GPS se presente, per tenerla lontana dai motori.
Poi ci sarebbe da fare tutta una serie di ragionamenti relativamente al fatto che la bussola deve funzionare in bolla e su un robot per esterni, ma anche in quelli per interni, diventa un obbligo l'utilizzo di sistemi per la compensazione dell'errore dovuto all'inclinazione del magnetometro.

si è vero anch'io la monto su una "torretta" sui miei robot, però il problema non si risolve...
Se non posso schermare la bussola posso schermare le fonti di disturbo, tipo i motori e i componenti elettronici vicini, è fattibile?
Nel caso non vedesse più il nord della terra, le misure sarebbero casuali o avrebbero comunque una continuità?
Ci sono modelli migliori della CMPS03 o il problema è uguale per tutti?
Grazie mille

?R:
si è vero anch'io la monto su una "torretta" sui miei robot, però il problema non si risolve...

Stiamo parlando di robot indoor o outdoor, nel primo caso non c'è soluzione, il problema sono le componenti magnetiche ambientali.

Nel caso non vedesse più il nord della terra, le misure sarebbero casuali o avrebbero comunque una continuità?

Non è che non vede più il Nord, è che vede qualunque componente magnetica nelle vicinanze e questo porta ad una deviazione della misura, le componenti magnetiche statiche, come i magneti dei motori, possono essere compensate tramite dei magnetini regolabili in posizione come si fa con le normali bussole ad ago sulle imbarcazioni.

il mio robot è da indoor...
Però avevo avuto esperienze diverse con un sensore di bussola per i Lego Mindstorm (http://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NMC1034), infatti avvolgendola con della carta stagnola la bussola funzionava meglio ed era più costante nelle misure... Non so se c'è qualche spiegazione, però funzionava

La carta stagnola (che é aluminio) funge da gabbia farraday e elimina le interferenze elettromagnetiche e ic campi magnetici alternati prodotti da correnti AC. Per schermare campi magnetici si usa mymetal ma nel caso della bussola mettendo quel metallo alteri anche il flusso del campo magnetico terestre e hai misure false.

Ciao Uwe

ma io non l'avevo collegata a massa, non so se poteva funzionare lo stesso... Però i valori rillevati mi sembravano più "lineari" nei cambiamenti

bho, magari non scaricando a terra non crevi una gabbia di faraday, ma distribuivi il distubro su tutte le componenti... però bho

lesto:
bho, magari non scaricando a terra non crevi una gabbia di faraday, ma distribuivi il distubro su tutte le componenti... però bho

beh se così fosse non sarebbe male :slight_smile:

ma come fanno sugli smartphone a fare delle misure precise con tutta la roba intorno?

chi ti dice che sono precise? hai verificato? :grin:

?R:
ma come fanno sugli smartphone a fare delle misure precise con tutta la roba intorno?

Infatti la bussola degli smartphone racconta barzellette :smiley:

lesto:
chi ti dice che sono precise? hai verificato? :grin:

si ho provato con quelle che ho linkato prima della lego perchè per fare i robot della robocup per orientarsi nel campo da gioco, tipo questo:

(lì la bussola non è neanche tanto in alto e non ha ancora la carta stagnola. ndr con i robot derivati da quel robot nel video abbiamo vinto alla robocup jr di riva del garda ques'anno)
adesso non faccio più la robocup per l'età però l'uso che vorrei farne di questa bussola è lo stesso con la CMPS03...
comunque a me non interessa che puntino giusto, nel senso che per esempio lo 0 sia sempre a nord in qualsiasi posizione della terra in cui io accenda il robot, a me basta che se io lo accendo e per lui 330°è il nord, che continui a leggere circa 330 come il nord anche 5m più in là, e poi mi piacerebbe che se il robot si gira di 90 gradi a destra o a sinistra, comunque la bussola leggesse i 90 sia a destra che a sinistra, invece mi capità spesso che a dx per esempio mi da 110° e a sinistra 70...
per risolvere quest'ultimo problema stavo pensando di ricalibrare il modulo...

astrobeed:

?R:
ma come fanno sugli smartphone a fare delle misure precise con tutta la roba intorno?

Infatti la bussola degli smartphone racconta barzellette :smiley:

beh ma mi sembrano costanti nella lettura, a me andrebbe bene una cosa così :stuck_out_tongue:

?R:
beh ma mi sembrano costanti nella lettura, a me andrebbe bene una cosa così :stuck_out_tongue:

Qui tocca fare una grossa distinzione dei possibili errori, prima di tutto se non calibri bene il magnetometro oltre ad errori assoluti di misura hai anche errori di non linearità, e questo mi sembra il tuo caso, inoltre se il magnetometro non si trova sempre perfettamente in bolla hai errori assoluti di misura direttamente proporzionali all'inclinazione sugli assi X e Y.
Oltre agli errori citati ci sono quelli dovuti alle condizioni magnetiche ambientali, p.e. la declinazione magnetica che oltre a dipendere dalla tua latitudine e longitudine dipende anche dalla conformazione delle linee di flusso magnetico sul globo terrestre, a seconda della zona è necessario compensare la lettura della bussola, però parliamo sempre di errori assoluti, tabellati e/o calcolabili, che vanno sommati o sottratti dalla lettura per ottenere quella reale.
La bussola CMPS03 non ha problemi di linearità nella lettura, ovviamente riferita alla sua reale precisione che attorno al singolo grado, ovvero se giri 90° in ambo i sensi devi misurare un valore compreso tra 89° e 91° di variazione.
Attenzione che se la bussola non lavora perfettamente in bolla il solo fatto di farla ruotare può introdurre errori di svariati gradi, per risolvere o si usa un supporto a gimball autostabilizzante, come nelle bussole nautiche, oppure si usa una IMU per conoscere l'assetto e compensare la misura.

astrobeed:

?R:
beh ma mi sembrano costanti nella lettura, a me andrebbe bene una cosa così :stuck_out_tongue:

Qui tocca fare una grossa distinzione dei possibili errori, prima di tutto se non calibri bene il magnetometro oltre ad errori assoluti di misura hai anche errori di non linearità, e questo mi sembra il tuo caso, inoltre se il magnetometro non si trova sempre perfettamente in bolla hai errori assoluti di misura direttamente proporzionali all'inclinazione sugli assi X e Y.
Oltre agli errori citati ci sono quelli dovuti alle condizioni magnetiche ambientali, p.e. la declinazione magnetica che oltre a dipendere dalla tua latitudine e longitudine dipende anche dalla conformazione delle linee di flusso magnetico sul globo terrestre, a seconda della zona è necessario compensare la lettura della bussola, però parliamo sempre di errori assoluti, tabellati e/o calcolabili, che vanno sommati o sottratti dalla lettura per ottenere quella reale.
La bussola CMPS03 non ha problemi di linearità nella lettura, ovviamente riferita alla sua reale precisione che attorno al singolo grado, ovvero se giri 90° in ambo i sensi devi misurare un valore compreso tra 89° e 91° di variazione.
Attenzione che se la bussola non lavora perfettamente in bolla il solo fatto di farla ruotare può introdurre errori di svariati gradi, per risolvere o si usa un supporto a gimball autostabilizzante, come nelle bussole nautiche, oppure si usa una IMU per conoscere l'assetto e compensare la misura.

infatti pensavo di ricalibrarla, anche se ho il dubbio che sia rotta... Boh... Ricalibro e riprovo...

dopo un'eternità, finalmente ora mi trovo a ricalibrarla...
nel datasheet (CMPS03 documentation) scrivono così:

Before calibrating the compass, you must know exactly which direction is North, East, South and West. Remember these are the magnet poles, not the geographic poles. Don't guess at it. Get a magnetic needle compass and check it. When calibrating, make sure the compass is horizontal at all times with components upwards, don't tilt it. Keep all magnetic and ferrous materials away from the compass during calibration - including your wristwatch.

I2C Method
To calibrate using the I2C bus, you only have to write 255 (0xff) to register 15, once for each of the four major compass points North, East, South and West. The 255 is cleared internally automatically after each point is calibrated. The compass points can be set in any order, but all four points must be calibrated. For example

  1. Set the compass module flat, pointing North. Write 255 to register 15, Calibrating pin (pin5) goes low.
  2. Set the compass module flat, pointing East. Write 255 to register 15,
  3. Set the compass module flat, pointing South. Write 255 to register 15,
  4. Set the compass module flat, pointing West. Write 255 to register 15, Calibrating pin (pin5) goes high.
    That's it.

non ho molta pratica con l'I2C, scrivere 255 sul registro 15 significa fare questo? dove specifico il registro su cui scrivere? :expressionless:

Wire.beginTransmission(0x60); //indirizzo del CMPS03
Wire.write(255); 
Wire.endTransmission();

No, prima devi passargli il registro dove devi scrivere e poi invii il dato da memorizzare. Tipo così:

Wire.beginTransmission(0x60); //indirizzo del CMPS03
Wire.write(0x0f);
Wire.write(0xff); 
Wire.endTransmission();

Però leggo che devi scriverlo 4 volte per azzerare tutte le 4 direzioni.

ahn ok ok grazie mille :wink:

leo72:
Però leggo che devi scriverlo 4 volte per azzerare tutte le 4 direzioni.

si, quello pensavo di gestirlo con la seriale: posiziono per bene il sensore e poi gli dico all'arduino di fare quelle operazioni

ho appena finito di calibrarla, ora sembra andare molto meglio! :smiley:
grazie a tutti per l'aiuto! :wink: chissà come ha fatto a "scalibrarsi"... :cold_sweat: