restablecer proximidad moto k10 giroscopio como calibrar arreglar activar java android android-sensors

java - proximidad - ¿Cómo calibrar el sensor de orientación en android?



restablecer sensor proximidad (3)

Estoy escribiendo una aplicación en Google Android 2.1 que necesita saber en qué dirección (n / w / s / e) está el dispositivo (HTC Hero). El sensor y su oyente están funcionando muy bien, pero los valores que obtengo del sensor son totalmente malos. por ejemplo, me dice que estaría mirando hacia el norte cuando el dispositivo esté orientado hacia el SW o algo así ...

Este parece ser un problema conocido con los dispositivos Android. Las "soluciones" que encontré en la web se ven así:

  • agitar el dispositivo alrededor
  • mueve el dispositivo como un ocho
  • toque en los dispositivos de nuevo

Se cree que esto activa la recalibración de los sensores. Y: la cosa con el "movimiento" funciona para mí ... pero eso no es muy profesional, supongo ...

Entonces, ¿cómo puedo activar la recalibración del sensor de orientación desde el SDK? Necesito que el sensor esté calibrado correctamente sin ningún elemento sofisticado que haga que los usuarios de esta aplicación se vean como idiotas completos mientras están recalibrando sus teléfonos "manualmente" ...

¿Hay alguna manera de hacer esto "correcto"?

EDITAR:

O: ¿hay alguna manera de determinar PROGRAMÁTICAMENTE, si el dispositivo está calibrado correctamente o no? Como opción alternativa, por así decirlo ... entonces podría advertir al usuario que el dispositivo necesita recalibración "manual".


Estas son algunas orientaciones que los manejadores pueden usar.

Constantes int ORIENTATION_UNKNOWN Se devolvió de onOrientationChanged cuando no se puede determinar la orientación del dispositivo (normalmente cuando el dispositivo está en una posición casi plana). Constructores públicos OrientationEventListener (contexto de contexto) Crea un nuevo OrientationEventListener. OrientationEventListener (contexto de contexto, tasa int) Crea un nuevo OrientationEventListener. Métodos públicos boolean canDetectOrientation () void disable () Inhabilita el OrientationEventListener. void enable () Habilita OrientationEventListener para que monitoree el sensor y active onOrientationChanged (int) cuando cambie la orientación del dispositivo. abstract void onOrientationChanged (int orientación) Se invoca cuando la orientación del dispositivo ha cambiado. [Expandir] Métodos heredados de la clase java.lang.Object Object clone () Crea y devuelve una copia de este objeto. boolean equals (Object o) Compara esta instancia con el objeto especificado e indica si son iguales. void finalize () Se llama antes de que la máquina virtual reclame la memoria del objeto. final Class getClass () Devuelve la instancia única de Class que representa la clase de este objeto. int hashCode () Devuelve un código hash entero para este objeto. final void notify () Provoca que un hilo que está esperando en el monitor de este objeto (mediante la llamada a uno de los métodos de espera ()) se despierte. final void notifyAll () Provoca que todos los subprocesos que están esperando en el monitor de este objeto (mediante la llamada a uno de los métodos de espera ()) se activen. String toString () Devuelve una cadena que contiene una descripción concisa y legible de este objeto. final void wait (long millis, int nanos) Hace que el subproceso que realiza la llamada espere hasta que otro subproceso llame al método Notify () o notifyAll () de este objeto o hasta que expire el tiempo de espera especificado. espera final cancelada (milis largos) Hace que el subproceso que realiza la llamada espere hasta que otro subproceso llame al método notification () o notifyAll () de este objeto o hasta que expire el tiempo de espera especificado. final void wait () Hace que el subproceso que realiza la llamada espere hasta que otro subproceso llame al método notification () o notifyAll () de este objeto. Constantes public static final int ORIENTATION_UNKNOWN Desde: API Nivel 3

Se devuelve de onOrientationChanged cuando no se puede determinar la orientación del dispositivo (generalmente cuando el dispositivo está en una posición casi plana). Ver también

* onOrientationChanged(int)

Valor constante: -1 (0xffffffff) Public Constructors public OrientationEventListener (Contexto de contexto) Desde: API nivel 3

Crea un nuevo OrientationEventListener. Parámetros de contexto para el OrientationEventListener. OrientationEventListener público (contexto de contexto, tasa int) Desde: API Nivel 3

Crea un nuevo OrientationEventListener. Parámetros de contexto para el OrientationEventListener. velocidad a la que se procesan los eventos del sensor (ver también SensorManager). Utilice el valor predeterminado de SENSOR_DELAY_NORMAL para la detección simple del cambio de orientación de la pantalla. Métodos públicos public boolean canDetectOrientation () desde: API nivel 3

deshabilitación pública () desde: API Nivel 3

Desactiva el OrientationEventListener. public void enable () desde: API nivel 3

Habilita OrientationEventListener para que supervise el sensor y llame aOrientationChanged (int) cuando cambie la orientación del dispositivo. public abstract void onOrientationChanged (int orientación) Desde: API Nivel 3

Llamado cuando la orientación del dispositivo ha cambiado. el parámetro de orientación es en grados, de 0 a 359. La orientación es de 0 grados cuando el dispositivo está orientado en su posición natural, 90 grados cuando su lado izquierdo está en la parte superior, 180 grados cuando está boca abajo y 270 grados cuando está El lado derecho está hacia la parte superior. ORIENTATION_UNKNOWN se devuelve cuando el dispositivo está casi plano y la orientación no se puede determinar.


No creo que haya una manera de saber programáticamente si su sensor de brújula está calibrado correctamente a menos que use una fuente de datos secundaria como el GPS. Si puede usar el GPS, cuando el usuario se está moviendo, puede comparar el movimiento del GPS con el rumbo de la brújula y corregirlo. Recuerde que los campos magnéticos locales pueden arruinar las lecturas de la brújula y los dispositivos no tienen idea de si está en medio de un bosque o al lado de un transformador.

Con estos dispositivos micro siempre hay un poco de sesgo con el que tendrás que lidiar. Si también verifica los valores del acelerómetro, verá que, en reposo, no siempre devuelven 9.8 m / s ^ 2 (o, al menos, entre dispositivos).

En su ayuda, es posible que solo tenga que decirle al usuario que gire / gire su teléfono en la figura ocho para restablecer la brújula.


Supongo que te refieres al Magnetómetro dentro del Héroe.

Calibrarlo es una tarea difícil y siempre requerirá la interacción del usuario para una calibración confiable. Hay estrategias separadas para lidiar con eso. Puede pedir a los usuarios que sujeten el dispositivo en dirección norte y luego volver a calibrar. Si los usuarios no saben dónde está el norte, puede pedirles que dirijan el dispositivo hacia el sol y, según la ubicación y la hora, pueden calcular dónde está.

Dejando a un lado la calibración, supongo que su problema es que las lecturas que obtiene del sensor son inexactas. Por supuesto, la calibración es un requisito previo para lecturas precisas, pero también hay otros factores en juego.

Es una práctica común complementar los datos del sensor de un sensor con los datos un sensor diferente para aumentar la precisión. Puede usar el GPS para determinar un rumbo cuando el usuario se está moviendo. Sin embargo, si se está moviendo lentamente, esto también es inexacto. Podría integrar los datos informados por el Acelerómetro para adivinar los cambios de orientación (no la orientación absoluta). Pero honestamente, un girómetro sería más ideal en este caso.

Los sistemas que funcionan de esta manera a veces se denominan sistemas de navegación inercial (INS) porque, dado un punto fijo en el espacio, pueden determinar su posición relativa y orientación subsiguientes con precisión sin más datos externos. El uso de un filtro de Kalman es una práctica común para volver a calibrar el sistema de vez en cuando cuando está disponible una posición absoluta (por ejemplo, recuperada a través de GPS).

Aunque no es realista implementar un INS completo, sin duda puede extraer algunas ideas de cómo funcionan para que sus lecturas de orientación sean más precisas.