rotacion quiero que pantalla orientacion iconos gire gira desactivar bloqueo best app iphone android math artificial-intelligence gesture-recognition

quiero - no gira pantalla iphone 5s



Almacenar orientaciĆ³n en una matriz-y comparar (2)

Creo que el enfoque de Ali es, en general, un buen camino a seguir, pero hay un problema general llamado bloqueo de cardán (o discusiones SO sobre este tema) cuando se utilizan ángulos de Euler, es decir, cabeceo, balanceo y guiñada. Te toparás con él cuando grabes un movimiento más complejo que dure más que unas pocas garrapatas y, por lo tanto, conducirás a deltas angulares grandes en diferentes direcciones angulares.

En pocas palabras, eso significa que tendrás más de una representación matemática para la misma posición, solo dependiendo del orden de movimientos que hayas hecho para llegar allí, y una pérdida de información del otro lado. Considere un avión volando en el aire de izquierda a derecha. El eje X es de izquierda a derecha, el eje Y apunta al aire. Las siguientes dos secuencias de movimiento te llevarán a la misma posición final, aunque llegarás allí de formas totalmente diferentes:

Secuencia A:

  1. Rotación alrededor de la guiñada + 90 °
  2. Rotación alrededor del tono + 90 °

Secuencia B:

  1. Rotación alrededor del tono + 90 °
  2. Rotación alrededor del rodillo + 90 °

En ambos casos, tu avión apunta al suelo y puedes ver su parte inferior desde tu posición.

La única solución para esto es evitar los ángulos de Euler y así hacer las cosas más complicadas. Los cuaterniones son la mejor manera de lidiar con esto, pero tardó un tiempo (para mí) tener una idea de esta representación bastante abstracta. De acuerdo, esta respuesta no lo lleva más lejos con respecto a su problema original, pero podría ayudarlo a evitar el desperdicio de tiempo. Tal vez puedas hacer algunos cambios conceptuales para configurar tu idea.

Kay

Quiero lograr lo siguiente:

Quiero que el usuario pueda "registrar" el movimiento del iPhone usando el giroscopio. Y después de eso, el usuario debería poder replicar el mismo movimiento. Extraigo el tono, giro y giro usando:

[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler: ^(CMDeviceMotion *motion, NSError *error) { CMAttitude *attitude = motion.attitude; NSLog(@"pitch: %f, roll: %f, yaw: %f]", attitude.pitch, attitude.roll, attitude.yaw); }];

Estoy pensando que podría almacenar estos valores en una matriz, si el usuario está en modo de grabación. Y cuando el usuario intenta replicar ese movimiento, puedo comparar el conjunto de movimientos replicados con el grabado. El asunto es, ¿cómo puedo comparar las dos matrices de una manera inteligente? Nunca tendrán exactamente los mismos valores, pero pueden ser algo iguales.

¿Estoy en el camino correcto?

ACTUALIZACIÓN: Creo que quizás la respuesta de Alis sobre el uso de DTW podría ser la manera correcta para mí aquí. Pero no soy tan inteligente (al parecer), así que si alguien pudiera ayudarme con los primeros pasos en comparación con las matrices, ¡sería un hombre feliz!

¡Gracias!


Prueba el time warping dinámico . Aquí hay un ejemplo ilustrativo con matrices 1D. En la base de datos ya tenemos las siguientes 2 matrices:

Matriz 1: [5, 3, 1]
Matriz 2: [1, 3, 5, 8, 8]

Medimos [2, 4, 6, 7] . ¿Qué matriz es la más similar a la recién medida? Obviamente, la segunda matriz es similar a la recién medida y la primera no.

Vamos a calcular las matrices de costos de acuerdo con este documento, subsección 2.1 :

D(i,j)=Dist(i,j)+MIN(D(i-1,j),D(i,j-1),D(i-1,j-1))

Aquí D(i,j) es el elemento (i,j) de la matriz de costos, ver a continuación. Verifique la Figura 3 de ese documento para ver cómo se aplica esta relación de recurrencia. En resumen: las columnas se calculan primero, comenzando desde D(1,1) ; D(0,*) y D(*,0) quedan fuera en el MIN. Si estamos comparando las matrices A y B , Dist(i,j) es la distancia entre A[i] y B[j] . Simplemente utilicé ABS(A[i]-B[j]) . Las matrices de costo para este ejemplo:

Para Array 1 tenemos 13 como puntaje, para Array 2 tenemos 5. El puntaje más bajo gana, por lo que el array más similar es Array 2. El mejor camino de warping se marca en gris.

Este es solo un boceto de DTW. Hay una serie de problemas que debe abordar en una aplicación del mundo real. Por ejemplo, utilizar el desplazamiento en lugar de puntos finales fijos, o definir medidas de ajuste: consulte este papel , página 363, 5. condiciones de contorno y página 364. El documento vinculado anterior también contiene más detalles.

Me di cuenta de que estás usando yaw, pitch and roll. En pocas palabras: don''t y otra razón para no hacerlo . ¿Puedes usar los datos del acelerómetro en su lugar? "Un acelerómetro es una medida de orientación directa" (del manuscrito de DCM ) y eso es lo que necesita. Y en cuanto a la pregunta de tc, ¿importa la orientación relativa al Norte? Supongo que no.

Es mucho más fácil comparar los vectores de aceleración que las orientaciones (ángulos de Euler, matrices de rotación, cuaterniones) cuando tc lo señala. Si está utilizando datos de aceleración, tiene 3 vectores dimensionales en cada punto de tiempo, las coordenadas (x, y, z). Simplemente calcularía

Dist(i,j)=SQRT((A[i][X]-B[j][X])^2+(A[i][Y]-B[j][Y])^2+(A[i][Z]-B[j][Z])^2) ,

esa es la distancia euclediana entre los dos puntos.