Domanda

Ho fatto qualche esperimento con la bussola e il giroscopio di iPhone 4 e vorrei qualche aiuto per un problema che sto avendo.Voglio compensare la lentezza della bussola con i dati del giroscopio.

Utilizzando CMMotionManager e la sua CMDeviceMotion oggettomotionManager.deviceMotion), Ho l' CMAttitude oggetto.Mi corregga se sbaglio (per favore), ma qui è quello che ho dedotto dal CMAttitude oggetto yaw proprietà (non ho bisogno di pitchroll per i miei scopi):

  • yaw va da 0 per PI quando il telefono è rivolto verso il basso (come indicato dal deviceMotion.gravity.z) e basculante in senso antiorario e 0 per -PI quando girò in senso orario
  • quando il dispositivo è rivolta verso l'alto, yaw va da -PI per 0 e PI per 0, rispettivamente
  • e i dati della bussola (sto usando locationManager.heading.magneticHeading), Vedo che la bussola dà valori 0 per 360, il valore crescente quando oscillare in senso orario

Tutti a destra, in modo da utilizzare tutte queste informazioni insieme, sono in grado di ottenere un valore chiamo horizontal che, indipendentemente dal fatto che il dispositivo è rivolto verso l'alto o verso il basso, si danno valori 0 per 360 e aumentare quando il dispositivo viene girata in senso orario (anche se sto ancora avendo problemi quando deviceManager.gravity.z è intorno 0 -- la yaw valore appassionati di fuori di questo gravity.z valore).

Mi sembra che ho potuto "sincronizzare" il horizontal e magneticHeading valori, utilizzando un calcolato horizontal valore mappe magneticHeading, e "sincronizzare" il horizontal valore magneticHeading quando sento la bussola ha "raggiunto."

Quindi le mie domande:

  • Sono sulla strada giusta con questo?
  • Sto usando il giroscopio dati CMDeviceMotion correttamente e le ipotesi che ho elencato sopra è corretto?
  • Perché potrebbe yaw freak out quando gravity.z è intorno 0?

Vi ringrazio molto.Attendo le vostre risposte!

È stato utile?

Soluzione

Solo cercando di rispondere...mi corregga se sbaglio..

1.Sì, sei sulla strada giusta

2.gravità in CM è già "isolato" dall'utente gravità (valore di gravità causata da utente accelerazione) ecco perché c'è due gravità, la "gravità" e "userAcceleration" il suo apple documentazione CM // Nota :non completamente isolata //

3.se si dispone di una gravità 0 significa che il corrispondente asse è perpendicolare con la forza di gravità.la forza di gravità.z è lo schermo di un iPhone, ecco perché è -9.82 m/s2 se si mette sulla scrivania con lo schermo in verticale, in realtà è difficile da ottenere 0 o il valore massimo della gravità a causa del rumore del sensore (è normale, tutto ha un sensore di rumore particolarmente a buon mercato del sensore).

quello che faccio nel mio app è la farò passare il mio asse di riferimento asse (nel tuo caso può essere x o y) per alcuni limiti, come la strategia dipende dalla ragione o da che lato è il vostro riferimento.

l'altra cosa è, giroscopio è veloce, ma non è stabile, è necessario ri-tarare il valore per diversi intervalli.Nel mio caso ogni 5 secondi.Ho esperimento con giroscopio per calcolare l'angolo tra due piani, cerco esattamente di 90 gradi righello e darà un errore di circa 0,5 gradi ogni secondo tentativo e continuare ad aumentare, ma questo è il mio, forse gli altri hanno un metodo migliore per evitare l'errore.

qui di seguito la mia procedura "

  1. Init
  2. Leggi di gravità XYZ -> Xg Yg Zg
  3. Controllare se Xg < 0.25 Se la VERA prova Yg poi Zg // Nota 1 = 1g = 9.82 m/s^2
  4. Leggere la bussola e giroscopio
  5. Configurare e calibrare il giroscopio utilizzando la bussola e calulate basato sull'asse che io uso nel punto 3.
  6. Se 5 secondi si passa quindi ricalibrare, leggere la bussola
  7. Se la differenza con giroscopio lettura è > 5 gradi saltare recalibartion il giroscopio.
  8. Se la differenza con giroscopio lettura < 5 grado di calibrare il giroscopio utilizzando la bussola valore

Nota:per il numero 7 :è quello di verificare se il telefono interessati con il campo magnetico o vicino enorme di acciaio o di alta tensione della linea elettrica o rumorosi e le attrezzature pesanti in fabbrica.

Questo è tutto...Spero che questo possa aiutare...E mi dispiace per il mio inglese..

Altri suggerimenti

Ecco un esempio di un'applicazione per iPhone in cui le bussola vengono compensati con il giroscopio. Codice e del progetto può essere visto qui: http://www.sundh.com/blog/2011/09 / stabalize-bussola-di-iphone-con-giroscopio /

La direzione del vettore dell'asse di imbardata è indefinito quando a gravità zero (o caduta libera, o abbastanza vicino).

Per fare sincronizzazione durante il moto, è necessario creare un filtro per il valore "orizzontale" che ha le stesse caratteristiche di risposta lag / ritardo come la bussola magnetica. O che, o attendere che il movimento si ferma abbastanza a lungo per entrambi i valori di risolvere prima di ricalcolare l'offset.

Risposta alla domanda 1 è affermativa, la domanda 2 si è sulla strada giusta, ma è possibile utilizzare un nome di variabile che non è 'orizzontale', la domanda 3 si risponde con hotpaw2 e anche un imbardata in un elicottero o in elicottero al vicino allo zero altitudine di avvertire il pilota con un allarme. C'è un ritardo perché parte del software è locale mentre ci sono altri fattori che possono rallentare giù compreso l'accesso ad un sensore per rilevare onde magnetiche, la posizione del dispositivo e la direzione, prepara l'output grafico per la visualizzazione della bussola, calcolo e fornire in uscita dati dal giroscopio e sensori tramite un'interfaccia relativamente lento, utilizzando un dispositivo palmare scopo generale non progettato su misura per il tipo di operazione viene chiesto di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top