Domanda

Sto lavorando con i dati del sensore Android. La mia applicazione

SensorManager.getRotationMatrixFromVector(
            mRotationMatrix , event.values);

E ha funzionato bene fino a questa mattina, quando la matrice di rotazione ha iniziato a inviare molti dati sul rumore (cambiare da N a W in un secondo).

Non è un problema con il mio codice, perché venerdì funzionava e non sono state apportate modifiche. Ho usato un'app di bussola dal mercato e la bussola sta fornendo dati casuali.

Ho testato la mia app su un altro tablet e funziona bene.

Qualcuno sa perché sta succedendo? Un problema con il sensore? Ha bisogno di una calibrazione?

È stato utile?

Soluzione

Ho lavorato molto con queste bussole elettroniche sui telefoni cellulari ed è del tutto possibile che non ci sia nulla di sbagliato nel tuo codice o sensore.

Invece potrebbe benissimo essere un problema con il tuo ambiente. Ci sono campi magnetici che interferiscono sempre con i campi magnetici della Terra. Dall'interferenza delle apparecchiature elettriche alla struttura metallica che regge un edificio. Alla fine della giornata una bussola è solo un magnete. Se ti trovi accanto a un grosso pezzo di metallo, la bussola sarà attratta da esso e lo indica piuttosto che il polo nord magnetico.

Prova questo: installa Stato GPSQuindi disattiva tutto il filtro (impostazioni ... GPS e sensori ... filtraggio del sensore ... nessun filtro). Fai la calibrazione (figura di 8 roba ondulata) e poi sposta il telefono intorno alla scrivania .. vicino a monitor, cavi, ecc. Lo vedrai impazzire. Le informazioni sono completamente inaffidabili. In passato ho scoperto che spostando il telefono a pochi centimetri a destra ha cambiato completamente la sua lettura. Lo stesso accade con una vera bussola. A rigor di termini non c'è "problema". La bussola del dispositivo si sta assegnando con il campo magnetico più forte. Anche il contenuto magnetico delle rocce vicine può interferire con la bussola.

Come ulteriore test ho appena messo una bussola reale (orientale) sul mio telefono che ha un'app di bussola installata. La vera bussola ora punta ovunque ma magnetico a nord. I due dispositivi interferiscono tra loro.

Quindi il mio consiglio è GPS status L'app punta nel modo giusto) e vedi se la tua bussola funziona come ti aspetteresti.

Extra: La risposta da @resus è anche importante durante la calibrazione. Ruota il telefono alcune volte in ogni asse. Sembra sciocco ma lo calibra correttamente.

Extra 2: Sarebbe possibile/pratico usare il cuscinetto della bussola del tuo GPS? Richiederebbe che il dispositivo si muova (la velocità di camminata dovrebbe andare bene) ma non dovresti preoccuparti di alcuna interferenza. Dovrebbe dare una lettura accurata a condizione che il segnale GPS sia buono.

Extra 3: Un altro pensiero mi è venuto in mente. Potresti provare ad applicare un filtro a basso passaggio al sensore. Ciò significa che gli improvvisi cambiamenti nella lettura del sensore sono filtrati. Dai un'occhiata a questo Rispondere. E se questo non fa un buon lavoro ci sono molti algoritmi sul web tra cui scegliere.

Altri suggerimenti

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

Mentre la tua app è in esecuzione (cioè la bussola è in uso), dovresti essere in grado di agitarla in una figura di 8 per ricalibrare automaticamente la bussola. Dovresti anche assicurarti di non stare accanto a grandi grumi di metallo ecc. Ciò potrebbe interferire con le letture.

Puoi sovrascrivere il onAccuracyChanged() metodo di SensorEventListener Per eseguire il flashing di un messaggio all'utente quando la bussola richiede ricalibrazione (probabilmente quando l'accuratezza scende a SENSOR_STATUS_ACCURACY_LOW).

Nella mia esperienza di gioco con la bussola sui telefoni Android, possono essere piuttosto inaffidabili ...

Se l'applicazione funziona su un altro tablet e altra applicazione della bussola non funzionano sul dispositivo, ciò è probabilmente dovuto a una cattiva calibrazione.

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

Se non si tratta di un errore di calibrazione, poiché alcune persone hanno già risposto, è possibile che la bussola abbia attraversato un campo magnetico e ora è desmagnetizzata, quindi non funziona correttamente.

Dove conservi di solito il tablet? Potrebbe essere che fosse vicino a grandi server o magneti? Dovresti controllare la bussola per ogni evenienza, parla con il supporto tecnico di Android.

Spero che sia d'aiuto.

Penso che la domanda fosse se la calibrazione potesse essere fatta senza inviare dati a bussola. Perché non tutti dicono che la bussola è calibrata come mostrato in questo video: https://support.google.com/maps/answer/6145351?hl=en E ovviamente non puoi fare nient'altro che consigliare all'utente di calibrare prima di utilizzare il programma o quando ricevi troppe modifiche. Ad esempio, andando a sinistra e a destra di 90 gradi in circa 25 ms.

Comunque penso che sia bene dare alcuni secondi all'app prima di iniziare a prendere dati, perché fornisce alcuni valori instabili (troppo alti e bassi in breve tempo senza movimento) nel momento di caricamento dell'app. Lascia che il gestore onSensorChanged() codificato con un condizionale e avviare un thread su onCreate() gestore, che imposterà a boolean Per vero, dopo alcuni secondi. Quindi inizi ad acquisire dati sul file onSensorChanged() gestore.

Anche questo thread può aiutare a rilevare l'accuratezza del sensore, quindi puoi apparire: In Android posso rilevare a livello di programmazione che la bussola non è ancora calibrata?

Lo so perché sto costruendo un robot usando la bussola dello smartphone e sto vivendo questa esperienza. Quindi, se stai realizzando un robot, assicurati di dare un posto distanziato tra elettronica e hardware allo smartphone, ma ricorda che è su qualsiasi bussola: i campi elettromagnetici possono essere modificati dai metalli così pesantemente.

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

Quel codice è compatibile/portatile per altri UController, ma non è anche così facile per gli smartphone, immagino che gli offset necessari per calibrare la bussola, il giroscopio e l'accelerometro siano all'interno di alcuni interni di Android, non disponibili nell'SDK.

Ho risposto prima di pensare che forse la calibrazione fosse solo per alcuni dispositivi, ma mi sono reso conto che doveva essere come ho detto prima. Quindi, se giocare con i robot è possibile, intendo anche che è facile, ma quando si utilizza uno smartphone forse un firmware personalizzato come CyanogenMod porterebbe la possibilità di studiare il modo di impostare tali offset, ma più importante per eseguire alcuni programmi portati da Sketch ( seguendo solo il suo concetto) per ottenerli prima ...

Perciò buona fortuna ! Ciò che è anche vero è che in entrambi i dispositivi (smartphone e il mio robot) è necessario spostarli per farli funzionare bene, come ti ho mostrato nel video dell'ultima risposta, anche utile sui robot.

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

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