magnetico - Cuándo usar acelerómetro o giroscopio en Android
giroscopio j7 (5)
Casi todos (o incluso todos) el teléfono tendrá un acelerómetro. Pero no todos ellos tienen un giroscopio. Alguien hizo una lista no exhaustiva de teléfono con giroscopio aquí: ¿Qué teléfonos con Android tienen un giroscopio?
Si logras que funcione solo con el acelerómetro, sus dispositivos más seguros serán compatibles con tu aplicación, pero realmente no puedo decirte qué tan grande es esta diferencia.
¿Está bien suponer que la mayoría de los dispositivos de los usuarios tendrán un giroscopio? En otras palabras, ¿excluiré a un número significativo de personas al usar un giroscopio en mi aplicación?
Estoy haciendo una aplicación de libro de cuentos para niños y quiero que el usuario pueda inclinar su dispositivo alrededor del eje de guiñada para mover una mecedora hacia adelante y hacia atrás. Es una pequeña parte de la aplicación y no tiene que ser muy precisa. ¿Hay algún sensor que deba usar sobre el otro?
Con el tiempo, la cantidad y los tipos de sensores disponibles en un dispositivo Android "típico" han cambiado bastante dramáticamente. Pero algunos medios para medir la orientación del dispositivo se encuentran entre las capacidades anteriores. Parece que el enfoque correcto es probar en tiempo de ejecución para los sensores más nuevos, y recurrir a los más antiguos, mientras se maneja con gracia el caso donde la información simplemente no está disponible.
El documento del desarrollador de Sensor Overiew tiene una tabla que muestra cuando los tipos de sensores específicos estuvieron disponibles por primera vez por el nivel de la API de Android. Pero tenga en cuenta que esto solo refleja la capacidad de ese nivel de API para hablar sobre ese tipo de datos; un dispositivo específico aún podría estar perdiendo el hardware requerido.
Parece que el acelerómetro y el giroscopio se encuentran entre los sensores más antiguos y es probable que estén presentes en la mayoría de los teléfonos.
En este momento (diciembre de 2013), el panel de desarrollo muestra que casi 1.6% de los dispositivos con Android que acceden a Play Store tienen la versión 2.3 o posterior (API 10 o más reciente). Los datos se basan únicamente en la versión 2.2 o dispositivos más nuevos que usan la tienda. Los dispositivos anteriores a 2.2 solo registraron aproximadamente el 1% de todos los dispositivos que se registraron en cualquier servidor de Google en agosto de 2013. Esa página incluye información sobre la resolución de visualización del dispositivo, pero no parecen cubrir otras características de los dispositivos. No pude encontrar un tablero que cubriera específicamente qué sensores están disponibles en la naturaleza.
Creo que estos sensores son los que deben tenerse en cuenta (estoy citando el libro "Reto Meier, Desarrollo de aplicaciones para Android 4 profesional" aquí):
Sensor.TYPE_ACCELEROMETER - Un acelerómetro de tres ejes que devuelve la aceleración actual a lo largo de tres ejes en m / s2 (metros por segundo, por segundo)
Sensor.TYPE_GYROSCOPE- Un giroscopio de tres ejes que devuelve la tasa de rotación del dispositivo a lo largo de tres ejes en radianes / segundo. Puede integrar la tasa de rotación a lo largo del tiempo para determinar la orientación actual del dispositivo; sin embargo, generalmente es una mejor práctica usar esto en combinación con otros sensores (generalmente los acelerómetros) para proporcionar una orientación corregida y modificada.
Sensor.TYPE_ROTATION_VECTOR: devuelve la orientación del dispositivo como una combinación de un ángulo alrededor de un eje. Normalmente se utiliza como una entrada al método getRotationMatrixFromVector del Administrador de sensores para convertir el vector de rotación devuelto en una matriz de rotación. El sensor de vector de rotación se implementa típicamente como un sensor virtual que puede combinar y corregir los resultados obtenidos de múltiples sensores, como los acelerómetros y giroscopios, para proporcionar una matriz de rotación más suave.
Fin de las citas ... Puede encontrar la implementación predeterminada del Sensor para un tipo dado utilizando el método getDefaultSensor, por ejemplo:
Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
Si eso devuelve nulo, el dispositivo no tiene el sensor por lo que sabe que no debe usarlo. Espero que la mayoría de los dispositivos tengan estos sensores (muy probablemente el acelerómetro) ya que son los que se usan para detectar la rotación de la pantalla.
Creo que la mayoría de los teléfonos tienen la capacidad de inclinación. Tengo un teléfono barato de 2 años que era $ 45 cuando era nuevo, y está ejecutando Android 2.1, se inclina y cambia de perspectiva.
También tengo una tableta que tiene tres años y también se inclina.
Diría que estás bastante seguro suponiendo que la inclinación estará allí.
Cobertura del usuario:
La mayoría de los dispositivos tienen tanto giroscopio como acelerómetro, pero casi todos los dispositivos tienen un acelerómetro. Especialmente los dispositivos más viejos y los más baratos no tienen un giroscopio. No olvide que, dado que es una aplicación para niños, tal vez los padres no quieran que los más pequeños usen su magnífica tableta de $ 700, y probablemente utilicen tabletas más baratas. Los dispositivos más baratos tienden a no tener giroscopios. Entonces +1 para el acelerómetro.
Experiencia de usuario
El acelerómetro mide la aceleración en el sistema de coordenadas tridimensionales. En la mayoría de los casos (cuando el usuario no salta ni tira el dispositivo) la mayor parte de la aceleración es la gravedad. Con la gravedad sola, es muy fácil determinar la inclinación y los movimientos leves. Además, tienes el sensor de software Gravity para eliminar movimientos extraños, y la aceleración lineal para eliminar la gravedad. El giroscopio detecta la rotación. Es más sensible, más preciso y produce eventos más rápido que el acelerómetro, pero parece ser un exceso para este uso. Si quisieras hacer un juego de carreras en 3D o un simulador de vuelo Sería una victoria para el giroscopio, pero para una aplicación para niños es demasiado.
Uso de la batería
No hay concurso aquí. El giroscopio usa 3-30 veces más batería (tal vez más, dependiendo del dispositivo), mientras que el acelerómetro es muy suave con la batería. Además, para la mayoría de los usuarios, el acelerómetro ya está activo (para rotar la pantalla automáticamente) por lo que aquí no se utiliza la batería del sensor. +1 para el acelerómetro
Programación
Los sensores son bastante fáciles de implementar en las aplicaciones de Android. Dado que el giroscopio detecta la velocidad de rotación, da todos los 0 valores si el dispositivo se queda quieto (y tal vez un poco de ruido en el rango de + -0.01rad / s), por lo que solo necesita un bloque pequeño para descartar movimientos muy leves ( por ejemplo, cuando los valores del giroscopio son menores a 0.2 rad / s). Con el acelerómetro, necesita algunos cálculos adicionales para determinar la orientación del dispositivo y qué eje es realmente el que necesita más atención para determinar la dirección del movimiento. No es difícil de hacer, pero agrega algunas líneas adicionales de código y una depuración adicional a su línea de trabajo. +1 para el giroscopio.
Conclusión
Para una aplicación infantil simple, el acelerómetro es el camino a seguir. No lo pensaría más. Como no le importa mucho la precisión, en realidad elimina los puntos ganados por el giroscopio.