2010-05-04 19 views
5

Necesito compás para mi aplicación.Dilema de precisión del compás

De la lectura de la documentación Parece que hay dos formas razonables de hacerlo:

  • método Sensor.TYPE_ORIENTATION: Esta es la forma más fácil de hacerlo. El problema con esto es que no es exacto. Cuando comparo mis lecturas con Snaptic Compass, se trata de un 10-15 degress que, para mis propósitos, es inaceptable.
  • Sensor.TYPE_ACCELEROMETER, Sensor.TYPE_MAGNETIC_FIELD y getRotationMatrix() junto con los métodos remapCoordinateSystem() y getOrientation(): La documentación dice que esto "suele ser más preciso". El problema es que independientemente de la demora que registre con el oyente, la brújula se vuelve loca incluso cuando el dispositivo está parado en una superficie plana.

Cualquier sugerencia para resolver este problema será muy apreciada.

Respuesta

8

Parece que mob1lejunkie ha dado cuenta de esto ya, pero sólo para referencia futura, permítanme mencionar que la cuestión aquí es magnetic declination (la diferencia entre el norte magnético y el norte verdadero). Puede probar an online model from NOAA para tener una idea de cuál es la diferencia en su parte del mundo.

Android incluye un modelo llamado GeomagneticField que se puede utilizar para calcular la declinación aproximada dada una latitud, longitud y altitud. Entonces, lo que creo que debe hacer para calcular el norte verdadero es leer el azimuth value de Sensor.TYPE_ORIENTATION y luego agregarlo a GeomagneticField.getDeclination().

+0

Sí, este fue exactamente el problema. – mob1lejunkie

1

Es la desventaja de las piezas compactas hechas para teléfonos. Un IMU de $ 5000 que estamos usando ahora tiene un error de +/- 2 grados y en ese rango parece volverse loco también.

Intente alejarse de las interferencias, superficies metálicas, y vea si mejora. Si no, odio romper las malas noticias, pero ese es el hardware.

¿Has visto estos?

http://developer.android.com/reference/android/hardware/SensorManager.html

http://groups.google.com/group/android-developers/browse_thread/thread/bbb0e8b97c673cf9/5c16bc2e49f6e972?lnk=raot

+0

Lo que trato de decir es que está en el mismo teléfono (Nexus One) exactamente en el mismo lugar de la mesa de la cocina. Snaptic Compass, una aplicación de terceros de Android Market, es más preciso que mi lectura. Me pregunto qué truco está utilizando Snaptic para obtener una lectura más precisa y confiable. – mob1lejunkie

+0

Ver enlaces que agregué para responder. –

+0

Después de hurgar en la configuración de la brújula de Snaptic noté que usa el norte verdadero mientras que yo estaba usando el norte magnético. Ahora que también uso True North, mi aplicación y Snaptic Compass tienen la misma lectura. Por supuesto, leer no es perfecto, pero eso se debe al hardware de Nexus One, que no es una falla de la implementación de mi brújula. pinnacler gracias por su ayuda! – mob1lejunkie