2012-02-27 9 views
10

Sto lavorando con i dati del sensore Android. La mia applicazione usaCompass mi dà dati pazzi, la calibrazione è necessaria o il sensore è rotto?

SensorManager.getRotationMatrixFromVector(
      mRotationMatrix , event.values); 

ed ha funzionato bene fino a questa mattina, quando la matrice di rotazione ha iniziato a inviare un sacco di dati sul rumore (Cambiare N a W in un secondo).

Non è un problema con il mio codice, perché venerdì era funzionante e non sono state apportate modifiche. Ho usato un'app bussola dal mercato e la bussola sta dando 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?

risposta

18

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

Invece potrebbe benissimo essere un problema con il vostro ambiente. Ci sono campi magnetici che interferiscono continuamente con i campi magnetici della terra. Dalle interferenze delle apparecchiature elettriche alla struttura metallica che sostiene un edificio. Alla fine della giornata una bussola è solo una calamita. Se ti trovi accanto a un grosso pezzo di metallo, la bussola sarà attratta da esso e puntata su di esso, piuttosto che sul polo nord magnetico.

Prova questo: Installare GPS status quindi disattivare tutti i filtri (impostazioni ... gps & sensori ... filtraggio sensore ...nessun filtro). Fai la calibrazione (figura di 8 cose ondulate) e poi sposta il telefono intorno alla tua scrivania .. vicino a monitor, cavi, ecc. Lo vedrai impazzire. L'informazione è completamente inaffidabile. Ho scoperto in passato che spostare il telefono di qualche centimetro a destra ha completamente cambiato 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 posizionato una vera bussola (orienteering) sul mio telefono su cui è installata un'app bussola. La vera bussola ora punta ovunque, ma il Nord magnetico. I due dispositivi interferiscono l'uno con l'altro.

Quindi il mio consiglio è .. andare da qualche parte all'aperto, come un parco o un campo, lontano da qualsiasi potenziale interferenza e linee elettriche, (se ne hai uno porti una vera bussola per controllare che l'app GPS status sia rivolta verso destra modo), e vedere se la tua bussola funziona come ti aspetteresti.

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

Extra 2: Sarebbe possibile/pratico utilizzare il GPS compass bearing? Richiederebbe che il dispositivo si muova (la velocità a piedi dovrebbe andare bene) ma non dovresti preoccuparti di alcuna interferenza. Dovrebbe fornire una lettura accurata a condizione che il segnale GPS sia buono.

Extra 3: Un altro pensiero mi è appena venuto in mente .. Si potrebbe provare ad applicare un filtro passa-basso al sensore. Ciò significa che i cambiamenti improvvisi nella lettura del sensore sono filtrati .. dare un'occhiata a questo answer. E se questo non fa un buon lavoro, ci sono molti algoritmi sul web tra cui scegliere.

+0

Grazie, ho già testato lo stato del GPS, e stava funzionando bene fino a quando il tablet è rimasto tutta la notte in un campo magnetico di stracci, potrebbe essere quello, chiamerò il supporto – vgonisanz

+0

Basta provare lo spin "3 assi" come disse Resus. Giralo 3 volte prima sul retro, poi giralo su di esso e ancora 3 volte, quindi ruotalo (come se lo stesse facendo girare su una scrivania) 3 volte. Non credo che il supporto possa essere d'aiuto poiché probabilmente non è difettoso. Basta provare a scappare da tutte le possibili fonti di interferenza - Buona fortuna – Tim

+0

Ho provato ad applicare un semplice filtro passa-basso, con alfa molto basso (a piccole modifiche) ma non ha funzionato, il sensore non dà coerenza dati, quindi è totalmente rotto. Quindi, persone, state attenti con alti campi magnetici. – vgonisanz

6

Se non si è modificato nulla nel codice e funziona ancora bene su altri dispositivi, suggerirebbe un problema con quel particolare dispositivo.

Mentre la tua app è in esecuzione (vale a dire che la bussola è in uso), dovresti essere in grado di agitarla con una cifra di 8 per ricalibrare automaticamente la bussola. Dovresti anche assicurarti di non stare vicino a grossi pezzi di metallo ecc. Che potrebbero interferire con le letture.

È possibile eseguire l'override del metodo di SensorEventListeneronAccuracyChanged() a lampeggiare un messaggio all'utente quando la bussola richiede ricalibrazione (probabilmente quando accuratezza scende a SENSOR_STATUS_ACCURACY_LOW).

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

4

Se il lavoro di applicazione su un altro tablet e altre applicazioni bussola non funzionano sul dispositivo, questo è probabilmente dovuto a una cattiva calibrazione.

Come detto nel post in alto, per effettuare la calibrazione, il dispositivo si illumina in una figura di 8. Voglio solo aggiungere che dovresti farlo per OGNI asse. Questo dovrebbe risolvere il tuo problema.

3

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

Dove solitamente si conserva il tablet? Potrebbe essere che fosse vicino a grandi server o magneti? Dovresti controllare la bussola nel caso in cui parli con il supporto tecnico di Android.

Spero che aiuti.

1

Penso che la domanda fosse se la calibrazione potesse essere eseguita senza inviare alcun dato alla 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 altro che consigliare all'utente di calibrare prima di usare il programma o quando si apportano troppe modifiche. Ad esempio andando a sinistra e a destra di 90 gradi in circa 25 ms.

Comunque penso che sia buono per dare alcuni secondi per l'applicazione prima di iniziare a prendere i dati, perché dà alcuni valori instabili (troppo alto e basso in breve tempo senza movimento) al momento applicazione di carico. Basta lasciare che il gestore onSensorChanged() codifichi con un condizionale e avviare una discussione sul gestore onCreate(), che imposterà un valore boolean su true dopo alcuni secondi. Quindi si inizia a catturare i dati sul gestore onSensorChanged().

Anche questa discussione può aiutare a rilevare la precisione del sensore, e poi si può popup: In Android can I programmatically detect that the compass is not yet calibrated?

Lo so perché sto costruendo un robot con la bussola dello smartphone, e sto avendo questa esperienza. Quindi, se stai facendo un robot, assicurati di dare uno spazio distanziato tra l'elettronica e l'hardware allo smartphone, ma ricorda che è su qualsiasi bussola: i campi elettromagnetici possono essere alterati dai metalli in modo così pesante.

1

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

Quel codice è compatibile/portatile con altri controller, ma non altrettanto facile per gli smartphone, suppongo 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 era solo per alcuni dispositivi, ma ho capito che doveva essere come ho detto prima. Quindi, se giocare con i robot è possibile, voglio dire che è anche facile, ma quando usi uno smartphone forse un firmware personalizzato come CyanogenMod potrebbe portare la possibilità di indagare sul modo di impostare gli offset, ma più importante per eseguire alcuni programmi portati dallo schizzo (seguendo solo il suo concetto) per averli prima ...

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

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

Problemi correlati