La bussola mi dà dati pazzeschi, è necessaria la calibrazione o è rotto il sensore?

Sto lavorando con i dati del sensore android. Utilizzo dell'applicazione

SensorManager.getRotationMatrixFromVector( mRotationMatrix , event.values); 

e sta lavorando bene fino a questa mattina, quando la matrix di rotazione ha iniziato a trasmettere un sacco di dati di rumore (cambiare N in W in un secondo).

  • Perché le mie risorse sono improvvisamente risolte nel mio progetto Android?
  • Scorri la vista per la visualizzazione di text in android
  • Come utilizzare i certificati p12 in Android (certificati client)
  • Effetto curl della pagina Android su layout / s
  • migliorare le performance di Tesseract con OpenCV su Android
  • Rileva quale vista il dito sta scorrendo in Android
  • Non è un problema con il mio codice, perché il venerdì stava lavorando e non sono state apportte modifiche. Ho usato un'applicazione di bussola dal mercato, e la bussola sta fornendo dati casuali.

    Ho provato la mia applicazione su un'altra tavoletta e sta funzionando bene.

    Qualcuno sa perché questo accade? Un problema con il sensore? Ha bisogno di una taratura?

  • android: Handle Application Crash e avviare un'attività particolare
  • Android ViewPager con RecyclerView funziona correttamente all'interno di BottomSheet
  • Come mostrare il DrawerLayout quando scorri da sinistra a destra, non import where?
  • Test di Android non funzionano su Travis con ShellCommandUnresponsiveException
  • sipdroid - Un'altra chiamata in arrivo non viene visualizzata mentre si continua
  • wifi getLinkSpeed ​​() restituisce sempre un valore
  • 6 Solutions collect form web for “La bussola mi dà dati pazzeschi, è necessaria la calibrazione o è rotto il sensore?”

    Ho lavorato abbastanza con queste bussole elettroniche sui telefoni cellulari ed è abbastanza ansible che non esiste nulla di sbagliato con il tuo codice o il tuo sensore.

    Invece potrebbe essere un problema con il tuo ambiente. Durante tutto il tempo, i campi magnetici interferiscono con i campi magnetici della Terra. Dall'interferenza delle apparecchiature elettriche alla struttura metallica che sorregge un edificio. Alla fine della giornata una bussola è solo un magnete. Se vi trovate accanto a un grosso pezzo di metallo, la bussola sarà attratta da essa e la punta piuttosto che il polo nord magnetico.

    Prova questo: Installare lo stato GPS, quindi spegnere tutti i filtri (impostazioni … gps e sensori … filter del sensore … nessun filter). Fare la calibrazione (figura di 8 roba ondulata) e poi spostare il telefono intorno alla scrivania .. vicino a monitor, cavi, ecc. Vednetworking che è pazza. Le informazioni sono completamente inaffidabili. Ho trovato in passato che spostare il telefono a pochi centimetri a destra completamente cambiato la sua lettura. Lo stesso accade con una vera bussola. In senso stretto non esiste "problema". La bussola del dispositivo sta assegnandosi al field magnetico più forte. Anche il contenuto magnetico delle rocce vicine può interferire con la bussola.

    Come un ulteriore test ho appena messo una bussola reale (orientamento) sul mio telefono che ha installato un'applicazione di bussola. La vera bussola sta indicando ovunque ma Nord magnetico. I due dispositivi interferiscono tra di loro.

    Quindi il mio consiglio è .. andare da qualche parte all'aperto, come un parco o un field, lontano da qualsiasi potenziale interferenza e linee elettriche, (se avete uno portre una vera bussola per controllare che l'applicazione di GPS status sta puntando il modo giusto) e vedere se la tua bussola funziona come ci si aspetterebbe.

    Extra: La risposta da @resus è importnte anche quando si calibra. Ruotare il telefono alcune volte in ciascun asse. Sembra stupido ma lo calibra correttamente.

    Extra 2: Sarebbe ansible / pratico usare il cuscinetto della bussola del tuo GPS? Esso richiederebbe che il dispositivo si muovesse (la velocità a piedi dovrebbe essere buona), ma non dovreste preoccuparvi di alcuna interferenza. Dovrebbe fornire una lettura accurata se il segnale GPS è buono.

    Extra 3: Un altro pensiero mi è appena accaduto .. Potresti provare a applicare un filter passa-basso al sensore. Ciò significa che i cambiamenti improvvisi nella lettura del sensore sono filtrati fuori .. dare un'occhiata a questa risposta . E se questo non fa un buon lavoro ci sono molti algoritmi sul web da scegliere.

    Se sicuramente non hai cambiato nulla nel tuo codice e funziona bene anche su altri dispositivi, suggerirebbe un problema con quel particolare dispositivo.

    Mentre l'applicazione è in esecuzione (cioè la bussola è in uso), dovresti essere in grado di farlo in una figura di 8 per ricalibrare automaticamente la bussola. Dovresti anche assicurarsi di non stare in piedi accanto a grossi grumi di metallo ecc. Che potrebbero interferire con le letture.

    È ansible ignorare il metodo onAccuracyChanged() di SensorEventListener per far lampeggiare un messaggio all'utente quando la bussola richiede la ricalibrazione (probabilmente quando la precisione scende a SENSOR_STATUS_ACCURACY_LOW ).

    Nella mia esperienza di giocare con la bussola sui telefoni android, possono essere piuttosto inaffidabili …

    Se la tua applicazione funziona su un'altra compressa e un'altra applicazione di bussola non funziona sul tuo dispositivo, probabilmente questa è dovuta a una ctriggers calibrazione.

    Come detto nel post sopra, per eseguire la calibrazione, lancia il tuo dispositivo in una figura di 8. Voglio solo aggiungere che dovresti farlo per each asse. Questo dovrebbe risolvere il tuo problema.

    Se non è un errore di calibrazione, come alcune persone hanno già risposto, è ansible che la bussola abbia attraversato un field magnetico e ora è desmagnetizzato, quindi non funziona correttamente.

    Dove si tiene di solito la tavoletta? Potrebbe essere che fosse vicino a grandi server o magneti? Devi controllare la bussola solo nel caso, parlare con il supporto tecnico di android.

    Spero che sia d'aiuto.

    Penso che la domanda fosse se la calibrazione potesse essere fatta senza submit alcun dato alla bussola. Poiché non tutti dicono che la bussola è calibrata come mostrato in questo video: https://support.google.com/maps/answer/6145351?hl=it e ovviamente non si può fare altro che consigliare l'utente a calibrare prima di utilizzare il programma o quando si ottengono troppe modifiche. Ad esempio andare a sinistra ea destra 90 gradi in circa 25 ms.

    Comunque penso che sia bello dare alcuni secondi all'applicazione prima di iniziare a prendere dati, perché fornisce alcuni valori instabili (troppo alti e bassi in breve tempo senza movimento) al momento del caricamento dell'applicazione. Basta lasciare che il gestore onSensorChanged() codificato con un condizionale e avviare un thread sul gestore onCreate() , che imposta un boolean a true, dopo alcuni secondi. Quindi si inizia a catturare i dati sul gestore onSensorChanged() .

    Anche questo thread può aiutare a rilevare la precisione del sensore e quindi è ansible aprire la window: in Android posso rilevare a livello di programmazione che la bussola non sia ancora calibrata?

    So perché costruisco un robot usando la bussola dello smartphone e ho questa esperienza. Quindi, se si sta facendo un robot, assicurarsi di dare un posto distanziato tra elettronica e hardware allo smartphone, ma ricorda che è su qualsiasi bussola: i campi elettromagnetici possono essere alterati da metalli così pesanti.

    Oggi ho la fortuna di sviluppare un robot con un HMC-5983 e un MPU-6050 , che può essere calibrato utilizzando le sue librerie con Arduino.

    Quel codice è compatibile / porttile ad altri uController, ma per non anche così facile per gli smartphone, suppongo che gli offset necessari per la calibrazione della bussola, del giroscopio e dell'accelerometro si trovino all'interno di alcuni interni di Android, non disponibili nell'SDK.

    Ho risposto prima di pensare che forse la calibrazione era solo per alcuni dispositivi, ma ha capito che deve essere come ho detto prima. Quindi, se giocare con i robot è ansible, voglio dire anche che è anche facile, ma quando si utilizza uno smartphone forse un firmware personalizzato come CyanogenMod avrebbe portto la possibilità di indagare sul modo di impostare tali offset, ma più importnte per eseguire un programma portto da schizzo ( seguendo solo il suo concetto) per farli prima …

    Perciò buona fortuna ! Quello che è anche vero è che in entrambi i dispositivi (smartphone e robot) è necessario spostarli per far funzionare bene, come ti ho mostrato nel video della risposta più recente, utile anche per i robot.

    Buona fortuna e divertimento con queste cose, sono molto potenti.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.