Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Bibliothèques, systèmes et outils
Bibliothèques, systèmes et outils Forum d'entraide sur les bibliothèques, la programmation système et les outils en C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/03/2012, 11h53   #1
silma
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 55
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 55
Points : 13
Points : 13
Par défaut Reconnaissance de mouvements

Bonjour,

Le but de mon petit projet (j'ai deux semaines) est de réaliser une sorte de clé électronique à l'aide d'un accéléromètre :
Un utilisateur qui souhaite ouvrir sa porte par exemple, doit réaliser un mouvement précis avec l'accéléromètre en main. Le mouvement réalisé par l'utilisateur doit être analysé par un PC et comparé à un schéma de référence. Si le mouvement est bon la porte et dévérouillée. L'accéléromètre dont je dispose détecte l'accélération selon deux axes, donc le mouvement doit être plan.

Pas de soucis pour récupérer les données, je trace deux courbes (voir l'image) : l'accélération horizontale (en rouge) et l'accélération verticale (en vert) en fonction du temps.
Maintenant j'aimerais pouvoir comparer chacune de ces courbes à une courbe de référence, et c'est là que je bloque :
  • Il y a un décalage horizontal entre ma courbe de référence (Cref) et ma courbe mesurée (Cmes), comment m'en débarasser et ainsi "synchroniser temporellement" les deux courbes ?
  • Une fois que me courbes sont calées, comment les comparer ? Ce sont les pics qui sont intéressants, mais leur amplitude varie pas mal selon que le mouvement est rapide ou lent. Du coup, je ne peux pas sommer les écarts des points pris sur chacune des courbes. Approximer un ensemble de points pas une courbe ça me fait direct penser à Lagrange, mais en l'occurrence je ne vois pas trop comment m'en servir.

Ma question est donc : connaissez vous des outils en C qui me permettraient de comparer deux courbes (qui sont en fait des nuages de points...) ?
silma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2012, 14h05   #2
silma
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 55
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 55
Points : 13
Points : 13
Up please.
Je vois pas trop comment faire la... Jai bien trouve un programme concernant lagrange ici http://www.physics.unlv.edu/~pang/cp_c.html mais d une je ne le comprends pas, et de deux il est sous copyright donc je ne sais pas si jai le droit de lutiliser pour un devoir.
silma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2012, 16h33   #3
manudiclemente
Membre habitué
 
Avatar de manudiclemente
 
Homme Emmanuel DI CLEMENTE
Développeur informatique
Inscription : janvier 2011
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Emmanuel DI CLEMENTE
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : janvier 2011
Messages : 51
Points : 133
Points : 133
Ton problème est mathématique.
Si j'ai bien compris, tu cherches à comparer un mouvement, donc des vitesses/accélérations, à des valeurs prédéfinies.
Je pense que la solution se trouve du côté des fonctions dérivés : tu dérives ce que te donne la courbe afin d'obtenir sa variation sous forme d'une autre courbe. Si la variation est comprises entre deux nombres précis, alors l'accélération est celle que tu voulais.

Citation:
Envoyé par silma Voir le message
Up please.
Je vois pas trop comment faire la... Jai bien trouve un programme concernant lagrange ici http://www.physics.unlv.edu/~pang/cp_c.html mais d une je ne le comprends pas, et de deux il est sous copyright donc je ne sais pas si jai le droit de lutiliser pour un devoir.
Dans le lien que tu as fourni il y a le programme 2.4 : Derivatives with the three-point formula qui me semble bien. La source est simple, tu remplis le f[] avec les valeurs de ton capteurs puis tu appelles three() et tu n'as plus qu'à manipuler f1[] et f2[].

Cordialement.
manudiclemente est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/03/2012, 16h50   #4
silma
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 55
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 55
Points : 13
Points : 13
Merci pour ta réponse, je vais regarder ça
silma est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/04/2012, 14h53   #5
mith06
Membre confirmé
 
Ingénieur développement matériel électronique
Inscription : juillet 2010
Messages : 141
Détails du profil
Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : Industrie

Informations forums :
Inscription : juillet 2010
Messages : 141
Points : 200
Points : 200
Mon humble avis est que ton problème revient à recherche un motif dans un signal => algorithme de corrélation http://fr.wikipedia.org/wiki/Corr%C3...n_crois%C3%A9e

Méthode généralement utilisée les systèmes tel que les sonars et les radars.

Bon courage
mith06 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 08/04/2012, 07h39   #6
silma
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 55
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 55
Points : 13
Points : 13
mith06, merci mille fois pour ce conseil salvateur !
C'est par-fait !
J'avais bien pensé à faire un calcul de covariance comme ça, mais il me manquait la notion de calage temporel pour que ça fonctionne.

Bon, par contre j'avoue, j'ai triché... J'ai finalement fait mon programme en perl, parce que je m'en sortais pas en C et que je manquais de temps pour m'acharner

Merci encore
silma est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h24.


 
 
 
 
Partenaires

Hébergement Web