Compensazione bussola ritardo con il giroscopio di iPhone 4
-
26-09-2019 - |
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 pitch
né roll
per i miei scopi):
yaw
va da0
perPI
quando il telefono è rivolto verso il basso (come indicato daldeviceMotion.gravity.z
) e basculante in senso antiorario e0
per-PI
quando girò in senso orario- quando il dispositivo è rivolta verso l'alto,
yaw
va da-PI
per0
ePI
per0
, rispettivamente - e i dati della bussola (sto usando
locationManager.heading.magneticHeading
), Vedo che la bussola dà valori0
per360
, 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 quandogravity.z
è intorno0
?
Vi ringrazio molto.Attendo le vostre risposte!
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 "
- Init
- Leggi di gravità XYZ -> Xg Yg Zg
- Controllare se Xg < 0.25 Se la VERA prova Yg poi Zg // Nota 1 = 1g = 9.82 m/s^2
- Leggere la bussola e giroscopio
- Configurare e calibrare il giroscopio utilizzando la bussola e calulate basato sull'asse che io uso nel punto 3.
- Se 5 secondi si passa quindi ricalibrare, leggere la bussola
- Se la differenza con giroscopio lettura è > 5 gradi saltare recalibartion il giroscopio.
- 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.