Question

Mon but est de reconnaître les gestes simples d'accéléromètres montés sur un point solaire. Un geste peut être aussi simple que de faire pivoter l'appareil ou de le déplacer de différentes manières. L'appareil ne dispose actuellement que d'accéléromètres, mais nous envisageons d'ajouter des gyroscopes si cela rend les choses plus faciles / plus précises.

Quelqu'un at-il des recommandations sur la manière de procéder? Toutes les bibliothèques disponibles en Java? Exemples de projets que vous recommandez je consulte? Les papiers que vous recommandez?

Sun Spot est une plate-forme Java destinée à vous aider à réaliser des prototypes rapides de systèmes. Il est programmé à l'aide de Java et peut relayer les commandes vers une station de base connectée à un ordinateur. Si j’ai besoin d’expliquer comment le matériel fonctionne davantage, laissez un commentaire.

Était-ce utile?

La solution

Les accéléromètres enregistreront une accélération constante due à la gravité, plus toute accélération subie par le périphérique, ainsi que le bruit.

Vous aurez besoin de filtrer les échantillons par filtre passe-bas pour éliminer autant de bruit que vous le souhaitez. Le pire du bruit sera généralement une fréquence plus élevée que toute accélération éventuelle provoquée par l’homme.

Sachez que lorsque l'utilisateur n'accélère pas le périphérique, la seule force est due à la gravité. Par conséquent, vous pouvez déduire son attitude dans l'espace. De plus, lorsque l'accélération totale varie considérablement de 1g, il faut que l'utilisateur accélère le dispositif; en soustrayant la dernière estimation connue de la gravité, vous pouvez estimer approximativement dans quelle direction et dans quelle mesure l'utilisateur accélère le périphérique, et obtenir ainsi des données que vous pouvez commencer à faire correspondre à une liste de gestes connus.

Avec un seul accéléromètre à trois axes, vous pouvez détecter le tangage et le roulis actuels, ainsi que l'accélération de l'appareil en ligne droite. L'intégration de l'accélération moins la gravité vous donnera une estimation de la vitesse actuelle, mais cette estimation s'éloignera rapidement de la réalité à cause du bruit; vous devrez faire des hypothèses sur le comportement de l'utilisateur avant / entre / pendant les gestes et les guider dans votre interface utilisateur pour fournir des points où le périphérique n'est pas accéléré. Vous pouvez ainsi réinitialiser vos estimations et estimer de manière fiable le sens de la gravité. Il est peu probable que l’intégration de nouveau pour trouver un poste fournisse des résultats utilisables, quelle qu’en soit la durée.

Si vous avez deux accéléromètres à trois axes distants ou un et quelques gyroscopes, vous pouvez également détecter la rotation de l'appareil (en comparant les vecteurs d'accélération ou directement à partir des gyroscopes). En intégrant le moment angulaire sur quelques secondes, vous obtiendrez une estimation du lacet actuel par rapport à celle que vous aviez au début de l’intégration, mais là encore, cela disparaîtra rapidement de la réalité.

Autres conseils

Etant donné que personne ne semble avoir mentionné les bibliothèques existantes, comme l'OP l'a demandé, voici:

http://www.wiigee.org/

Destiné à être utilisé avec la Wiimote, wiigee est une implémentation basée sur Java et à code source ouvert pour la correspondance de modèles basée sur les lectures effectuées par accéléromètre. Pour ce faire, il utilise les modèles de Markov cachés [1].

Il semblerait que la société Thorn Technologies l’ait utilisée à bon escient et elle a mentionné son expérience à cet égard: http://www.thorntech.com/2013/07/mobile-device-3d-accelerometer-based-gesture-recognition/

Vous pouvez également envisager de FastDTW ( https://code.google.com / p / fastdtw / ). Il est moins précis que DTW [2], mais également moins coûteux du point de vue du calcul, ce qui est un gros problème pour les systèmes intégrés ou les appareils mobiles.

[1] https://en.wikipedia.org/wiki/Hidden_Markov_model
[2] https://en.wikipedia.org/wiki/Dynamic_time_warping

EDIT: L’opérateur a mentionné dans l’un des commentaires qu’il achevait son projet, avec une précision de 90% sur le terrain et un temps de calcul inférieur à la milliseconde, en utilisant une variante de Reconnaissance de $ 1 . Il mentionne également que la rotation n'était pas un critère de son projet.

Ce qui n’a pas encore été mentionné est la reconnaissance des gestes. C'est la partie difficile. Une fois que vous avez nettoyé vos données (filtres passe-bas, normalisés, etc.), il vous reste encore beaucoup à faire.

Découvrez les modèles de Markov cachés. Cela semble être l'approche la plus populaire, mais leur utilisation n'est pas triviale. Il y a généralement une étape de prétraitement. Commencez par exécuter STFT et regrouper le vecteur résultant dans un dictionnaire, puis alimentez-le dans un HMM. Consultez jahmm dans le code Google pour une librairie Java.

Ajout au commentaire de moonshadow de la nécessité de réinitialiser la ligne de base pour la gravité et la rotation ...

À moins que l'appareil ne soit censé avoir des moments de repos stables (où la seule force agissant sur lui est la gravité) pour réinitialiser sa ligne de base de mesure, votre système finira par développer un équivalent de vertige.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top