rotar rotacion quiero que plus pantalla gire girar gira desactivar iphone rotation accelerometer compass-geolocation

rotacion - Detectar el giro de rotación del iPhone?



rotar pantalla iphone 6 (3)

Podría usar la velocidad de la aceleración para determinar qué tan rápido gira el teléfono y usar eso para completar los espacios en blanco hasta que el teléfono se haya detenido, momento en el que podría consultar la brújula nuevamente.

Quiero crear una aplicación que pueda detectar el número de vueltas cuando el usuario gira el dispositivo iPhone. Actualmente, estoy usando la API Compass para obtener el ángulo y probar muchas formas de detectar spin. A continuación se muestra la lista de soluciones que he intentado: 1 / Crear 2 trampas de ángulo (pieza en la ronda completa) en la ronda completa para detectar si el ángulo que obtenemos de la brújula pasó o no. 2 / Sume la distancia de todos los ángulos entre las veces que se actualiza la brújula (en la función Actualizar encabezado). Vamos a tratar de dividir el ángulo de suma a 360 => podríamos obtener el número de giro

El problema es que cuando el teléfono gira demasiado rápido, la brújula no puede alcanzar la velocidad del teléfono y nos devuelve el ángulo con la última hora (no de forma continua como en la rotación real).

También tratamos de usar acelerómetro para detectar spin. Sin embargo, de esta manera no puede funcionar cuando gira el teléfono en un plano plano.

Si tiene alguna solución o experiencia sobre este tema, por favor, ayúdeme.

Muchas gracias.


El iPhone4 contiene un girocompás MEMS, por lo que es la ruta más directa.

Como habrás notado, el magnetómetro tiene una respuesta lenta. Esto se puede reducir usando un algoritmo anticipatorio que usa la lentitud para hacer una conjetura sobre cuál es realmente la dirección actual.

Primero, debe determinar el rendimiento real del sensor. Para hacer esto, debe girarlo a una velocidad precisa en cada una de varias velocidades de rotación, y registrar el comportamiento de la brújula. La plataforma de rotación debe tener una forma de leer la posición instantánea.

A velocidades más lentas, verá un grado variable de retraso fijo. A medida que la velocidad aumenta, el retraso crecerá hasta que se aproxime a 180 grados, momento en el cual la brújula se volverá repentinamente. A velocidades más altas, todo lo que verá es dar la vuelta, aunque puede parecer que no se voltea cuando los volteos se repiten con el mismo valor. En algunas de estas velocidades más altas, la brújula puede parecer que gira hacia atrás, opuesta a la dirección de rotación.

Obtener una tabla de rotación puede ser una molestia, y asegurar que no afecte el campo magnético local (haciendo que la brújula sea inútil) es un desafío. La mesa ideal estará hecha de aluminio, y si necesita usar una mesa de acero (la más común), deberá montar el teléfono en una plataforma no magnética para alejarlo lo más posible del acero.

Un taller de máquinas local será un buen lugar para comenzar: las máquinas CNC son fácilmente capaces de hacer lo que se necesita.

Una vez que obtenga los datos de rendimiento de la brújula, tendrá que construir un modelo de las lecturas observadas frente a la orientación real y la tasa de rotación. Invierta el modelo y aplíquelo a las lecturas para obtener una estimación de las lecturas reales.

Una implementación de algoritmo simple será mantener un historial de las lecturas y mantener una lista de la diferencia entre las lecturas secuenciales. Como sabemos que hay retraso en la brújula, cuando un valor de diferencia no es cero, sabremos que el valor actual tiene algún grado de imprecisión debido al retraso.

El siguiente paso es crear una lista de lecturas "corregidas", donde se utiliza el retraso de conocimiento de los valores reales previos para generar un valor actualizado que se utiliza para crear un valor actualizado que se agrega al último valor en el "corregido" lista, y se almacena como el valor más nuevo.

Cuando la corrección acumulativa (la diferencia entre los últimos valores en la lista real y corregida excede 360 ​​grados, eso significa que básicamente no sabemos hacia dónde apunta la brújula. Afortunadamente, ese punto no se alcanzará, ya que la mayoría del movimiento de rotación debería generalmente ser por una duración bastante corta.

Sin embargo, dado que su objetivo es solo contar las rotaciones, se desactivará menos de una rotación completa hasta que el error acumulado alcance un valor sustancialmente mayor. No estoy seguro de cuál será este valor, ya que depende tanto del desfase actual de la brújula como de la velocidad real de rotación. Pero si solo le importan unas pocas rotaciones (5 o más), debería poder obtener resultados utilizables.


Si está usando un iPhone 4, el problema se ha resuelto y puede usar Core Motion para obtener datos de rotación.

Para dispositivos anteriores, creo que un enfoque interesante sería tratar de detectar bamboleo a medida que el dispositivo gira, usando UIAccelerometer en un intervalo de informe muy fino. Es posible que pueda obtener algunos patrones razonables detectados por el movimiento en ángulo recto con el plano de rotación.