iphone - utilisation - Stocker l'orientation à un tableau-et comparer




ubuntu efficace (2)

Essayez le warping temporel dynamique . Voici un exemple illustratif de tableaux 1D. Dans la base de données, nous avons déjà les 2 tableaux suivants:

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

Nous avons mesuré [2, 4, 6, 7] . Quel tableau est le plus similaire au nouveau mesuré? De toute évidence, le deuxième tableau est similaire au nouveau mesuré et le premier ne l'est pas.

Calculons les matrices de coût selon cet article, sous-section 2.1 :

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

Ici, D(i,j) est l'élément (i,j) de la matrice de coûts, voir ci-dessous. Vérifiez la figure 3 de ce document pour voir que cette relation de récurrence est appliquée. En bref: les colonnes sont calculées en premier, à partir de D(1,1) ; D(0,*) et D(*,0) sont omis dans le MIN. Si nous comparons les tableaux A et B alors Dist(i,j) est la distance entre A[i] et B[j] . J'ai simplement utilisé ABS(A[i]-B[j]) . Les matrices de coût pour cet exemple:

Pour le tableau 1, nous avons 13 points, pour le tableau 2, nous avons 5. Le score le plus bas gagne, donc le tableau le plus similaire est le tableau 2. Le meilleur chemin de déformation est marqué en gris.

Ceci est seulement une esquisse de DTW. Vous devez résoudre un certain nombre de problèmes dans une application réelle. Par exemple, utilisez le décalage au lieu des points de fin fixes ou définissez les mesures d'ajustement: voir cet article , page 363, 5. conditions aux limites et page 364. Le document ci-dessus comporte également des détails.

Je viens de remarquer que vous utilisez le lacet, le tangage et le roulis. Simplement mis: don't et une autre raison de ne pas . Pouvez-vous utiliser les données de l'accéléromètre à la place? "Un accéléromètre est une mesure directe de l'orientation" (à partir du manuscrit DCM ) et c'est ce dont vous avez besoin. Et comme pour la question de tc, l'orientation relative au nord est-elle importante? Je suppose que non.

Il est beaucoup plus facile de comparer les vecteurs d'accélération que les orientations (angles d'Euler, matrices de rotation, quaternions) comme cela a été souligné. Si vous utilisez des données d'accélération, vous disposez de vecteurs tridimensionnels à chaque instant, les coordonnées (x, y, z). Je calculerais simplement

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) ,

c'est la distance euclédienne entre les deux points.

https://code.i-harness.com

Je veux réaliser ce qui suit:

Je veux que l'utilisateur puisse "enregistrer" le mouvement de l'iPhone à l'aide du gyroscope. Et après cela, l'utilisateur devrait pouvoir reproduire le même mouvement. J'extrait le pitch, le roll et le yaw en utilisant:

 [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);
     }];

Je pense que je pourrais stocker ces valeurs dans un tableau, si l’utilisateur est en mode enregistrement. Et lorsque l'utilisateur essaie de reproduire ce mouvement, je peux comparer le tableau de mouvements répliqué à celui enregistré. Le truc, c'est comment comparer les deux tableaux d'une manière intelligente? Ils n'auront jamais exactement les mêmes valeurs, mais ils peuvent être quelque peu les mêmes.

Suis-je sur la bonne voie ici?

MISE À JOUR: Je pense que peut-être que la réponse d'Alis sur l'utilisation de DTW pourrait être la bonne solution pour moi ici. Mais je ne suis pas si intelligent (apparemment), donc si quelqu'un pouvait m'aider avec les premiers pas en comparant avec des tableaux, je serais un homme heureux!

Merci!


Je pense que l'approche d'Ali est en général une bonne solution, mais il existe un problème général appelé blocage de cardan (ou discussions SO sur ce sujet) lors de l'utilisation d'angles d'Euler, à savoir tangage, roulis et lacet. Vous allez le rencontrer lorsque vous enregistrez un mouvement plus complexe qui dure plus longtemps que quelques tiques et conduit ainsi à des deltas de grand angle dans différentes directions angulaires.

En un mot, cela signifie que vous aurez plus d'une représentation mathématique pour la même position en fonction de l'ordre des mouvements que vous avez fait pour y arriver - et une perte d'informations de l'autre côté. Considérons un avion volant dans les airs de gauche à droite. L'axe X est de gauche à droite, l'axe Y est orienté vers l'air. Les deux séquences de mouvements suivantes mèneront à la même position de fin, bien que vous y arriviez de différentes manières:

Séquence A:

  1. Rotation autour du lacet + 90 °
  2. Rotation autour du pas + 90 °

Séquence B:

  1. Rotation autour du pas + 90 °
  2. Rotation autour du rouleau + 90 °

Dans les deux cas, votre avion pointe vers le sol et vous pouvez voir son fond depuis votre position.

La seule solution consiste à éviter les angles d'Euler et à compliquer les choses. Les quaternions sont le meilleur moyen de gérer cela, mais il m'a fallu du temps (pour moi) pour avoir une idée de cette représentation plutôt abstraite. OK, cette réponse ne vous fait pas avancer en ce qui concerne votre problème initial, mais cela pourrait vous aider à éviter la perte de temps. Peut-être que vous pouvez apporter des modifications conceptuelles pour configurer votre idée.

Kay







gesture-recognition