2013-12-16 25 views
11

Attualmente sto sviluppando un'applicazione per iPhone (su iPhone 5, iOS 7, Xcode 5) che richiede una determinazione molto accurata dell'attitudine attuale. L '"atteggiamento" di CMDeviceMotion non soddisfa questi requisiti perché l'algoritmo di fusione dei sensori di Apple sembra fare troppo affidamento sul giroscopio che si allontana piuttosto velocemente (nella mia esperienza). Ecco perché ho deciso di leggere i dati del sensore nudo e in seguito voglio combinarli in un algoritmo di fusione dei sensori da solo.La calibrazione del magnetometro iPhone di Apple funziona correttamente?

Quando chiedere uno dei dati del magnetometro ha due possibilità:

  1. via CMMagnetometerData in CMMotionManager

  2. via CMCalibratedMagneticField in CMDeviceMotion su cui Apple dice

Il CMCalibratedMagneticField restituito da questa proprietà ti dà la fi magnetica totale campo nelle vicinanze del dispositivo senza distorsione del dispositivo. A differenza della proprietà magneticField della classe CMMagnetometer, questi valori riflettono il campo magnetico terrestre più i campi circostanti, meno il bias del dispositivo.

In linea di principio (2.) è esattamente quello che voglio.

Esiste un test molto semplice se i dati del magnetometro sono calibrati correttamente. Per semplicità ci si può limitare a due dimensioni. Quando il dispositivo si trova su di esso, la combinazione B_x^2 + B_y^2 deve essere costante, indipendentemente dalla direzione verso cui punta il dispositivo. Deve solo eguagliare la componente orizzontale del campo magnetico terrestre (supponendo che non ci siano altri campi nelle vicinanze del dispositivo). Pertanto, quando si esegue un giro di 360 gradi del dispositivo che giace su di esso, i dati misurati B_y su B_x dovrebbero visualizzare un cerchio. Vedi here per i dettagli.

Ora il punto: i dati di CMCalibratedMagneticField NON risultano in un cerchio!

Plot

Qualcuno ha una spiegazione per questo? O qualcuno lo sa, come nasce il CMCalibratedMagneticField? Il magnetometro è calibrato nel senso dello link from above quando si esegue il movimento a "otto forme" del dispositivo o a cosa serve il movimento?

Btw. perché il movimento a "otto forme" e non capovolgere il dispositivo attorno al suo tre assi, che consentirebbe una calibrazione come descritto nel link from above?

Sarei molto contento per qualsiasi chiarimento con questo numero ... Grazie!

risposta

2

C'è un problema con il magnetometro in iOS 7, ha un errore di + -7º. Prova a utilizzare la versione beta 7.1.

EDIT

il magnetometro ha zero-deriva nel tempo, ma è piuttosto impreciso per improvvisi cambiamenti di posizione. L'accelerometro e il giroscopio invece si adattano rapidamente ai cambiamenti improvvisi ma, essendo sensori inerziali, perdono la precisione per un periodo di tempo.

Così, quando CMCalibratedMagneticField tenta di compensare il movimento rotatorio, utilizza i dati del giroscopio e dell'accelerometro.Questo è quando l'errore di + -7º dell'accelerometro e del giroscopio si insinua e getta il cerchio fuori dal percorso. Controlla questo answer e questo wikipedia article per maggiori informazioni.

Per quanto riguarda la figura di otto: Entrambi fanno la stessa cosa, orientano il "Nord" del dispositivo in ogni direzione nella speranza di annullare l'interferenza magnetica. Capovolgere il tuo dispositivo lungo tutti e tre gli assi funzionerà meglio, ma è più difficile da eseguire e non facilmente comprensibile dall'utente.

Spero che questo aiuti.

+0

Grazie mille per la risposta! C'è un riferimento per queste informazioni disponibili? – user2980195

+0

Ho sbagliato l'errore è stato risolto in iOS 7.0.3. Riferimento: http://support.apple.com/kb/DL1691 – Pranav

+0

Ma questo riguarda solo l'accelerometro e non il magnetometro, giusto? – user2980195