IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Phone .NET Discussion :

Accelerometre et distance


Sujet :

Windows Phone .NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut Accelerometre et distance
    Bonjour j'aimerai savoir comment utilisé l'accelerometre afin de calculer une distance en metre parcourru par le device

    je recupere le X; Y;Z de l'accelerometre sur 2 points puis j'applique la formule suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      double Mx = ending.X - starting.X;
      double My = ending.Y - starting.Y;
      double Mz = ending.Z - starting.Z;
     
      double distance= Math.Sqrt(Mx * Mx + My * My + Mz * Mz);
    Mais la distance que me donne la formule est vraiment illogique est-ce-que j'utilise le bon algo? je supose qu'il faut enlever la gravité et faire un low pass filtering plud tard mais deja suis-je sur le bon chemin?
    ending et starting sont des objet que je creeer quand j'appui sur un boutton et ils contiennent les donnees de l'accelerometre

    Merci

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Avec les données de l'accéléromètre (StartingA et EndingA), la vitesse initiale (StartingV) et le temps écoulé DeltaT= EndingTime-StartingTime, on déduit la vitesse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EndingV = StartingV + Integrale(StartingA,EndingA,DeltaT)
    Avec les vitesses (StartingV et EndingV), la distance initiale (StartingD) et DeltaT, on déduit la distance parcourue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EndingD=StartingD + Integrale(StartingV,EndingV,DeltaT)
    Avec la fonction Integrale calculée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Integrale(StartingX,EndingX,DeltatT) = (EndingX-StartingX)*DeltaT/2 ;
    Toutes les données StartingX et EndingX sont des vetceurs (x,y,z).

    Note : la vitesse au début des mesures doit être connue (par exemple nulle pour un mobile à l’arrêt)
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Bonjour Graffito Merci pour ta reponse

    enfait je lance l'enregistrement de mes coordonnees a un moment precis que je connait ou le device est immobile et quand je termine d'enregistrer il l'est aussi du coup voici mon code ou je derive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
            double delta = (accelerationDatas[accelerationDatas.Count - 1].currentDateTime - accelerationDatas[0].currentDateTime).TotalMilliseconds;
                for (int i = 1; i < accelerationDatas.Count; i++)
                {
                    double dt = (accelerationDatas[i].currentDateTime - accelerationDatas[i - 1].currentDateTime).Milliseconds / 1000;
                    vx += (accelerationDatas[i - 1].X + accelerationDatas[i].X) / 2 * dt;
                    dx += vx * dt;
     
     
                    vy += (accelerationDatas[i - 1].Y + accelerationDatas[i].Y) / 2 * dt;
                    dy += vy * dt;
     
     
                    vz += (accelerationDatas[i - 1].Z + accelerationDatas[i].Z) / 2 * dt;
                    dz += vz * dt;
     
     
                }
     
                double vitesse = Math.Sqrt(dx * dx + dy * dy + dz * dz);
     
                double distance = (vitesse / 2) * delta;

    Pour une meme distance j'ai des variations importante
    est-ce la logique que tu as expliqué?

    Merci

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Ca devrait donner des resultts à peu près correct sauf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double vitesse  = Math.Sqrt(vx * vx + vy * vy + vz * vz)
    double distance = Math.Sqrt(dx * dx + dy * dy + dz * dz)
    Un résulat un peu meilleur serait obtenu en remplaçant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vx += (accelerationDatas[i - 1].X + accelerationDatas[i].X) / 2 * dt; dx += vx * dt;
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    wx  = vx
    vx += (accelerationDatas[i - 1].X + accelerationDatas[i].X) / 2 * dt;
    dx += (wx+vx)/2 * dt;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Merci;

    la distance est donnee en metre non?

    j'ai testé avec ce que tu viens de corriger au debut mais pour une meme distance jai des variations considerables c'est logique ?

    Exemple 0.9 puis 16

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    jai des variations considerables
    Peux-tu expliquer ?
    Essaie de sortir les résultats (deltaT, acceleration, vitesse, distance) à chaque pas de la boucle.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    la distance est donnee en metre non?
    Oui, si l'acceleration est en mètre/Secondes_Carré.

    Attention aux erreurs d'arrondi : travailler en double.
    pour la différence de temps, remplacer "/1000" par "/1000D".
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Merci voici les resultqt en utilisant le code aue j'ai donné avec ta correction

    current dt =0.1249904
    current vx =0.0054995776
    current vy =0.0094992704
    current vz =-0.1194908224
    current dt =0.1253932
    current vx =0.0105780022
    current vy =0.0174617386
    current vz =-0.2414357094
    current dt =0.1246691
    current vx =0.012822046
    current vy =0.02325885175
    current vz =-0.3623647364
    current dt =0.1251436
    current vx =0.0148243436
    current vy =0.02995403435
    current vz =-0.486694903
    current dt =0.1262964
    current vx =0.0178554572
    current vy =0.04056293195
    current vz =-0.6103390786
    current dt =0.1230211
    current vx =0.0226532801
    current vy =0.0494819617
    current vz =-0.7315148621
    current dt =0.1250787
    current vx =0.02796912485
    current vy =0.05679906565
    current vz =-0.85352913395
    current dt =0.1248617
    current vx =0.03571055025
    current vy =0.06541452295
    current vz =-0.9710864245
    current dt =0.1290798
    current vx =0.04216454025
    current vy =0.07380470995
    current vz =-1.0954548118
    current dt =0.1213112
    current vx =0.04295306305
    current vy =0.08211452715
    current vz =-1.2148250326
    current dt =0.125632
    current vx =0.04370685505
    current vy =0.09203945515
    current vz =-1.3351804886
    current dt =0.1259761
    current vx =0.04635235315
    current vy =0.10110973435
    current vz =-1.45038563205
    current dt =0.1262508
    current vx =0.04875111835
    current vy =0.10963166335
    current vz =-1.56659949345
    current dt =0.1230821
    current vx =0.0481972489
    current vy =0.1174473767
    current vz =-1.68500447365
    current dt =0.1248274
    current vx =0.0475106982
    current vy =0.1230646097
    current vz =-1.80683601605
    current dt =0.1252297
    current vx =0.05195635255
    current vy =0.127948568
    current vz =-1.93006204085
    current dt =0.1289784
    current vx =0.05653508575
    current vy =0.1317534308
    current vz =-2.05484864285
    current dt =0.1209984
    current vx =0.06288750175
    current vy =0.1341128996
    current vz =-2.16949462685
    current dt =0.1260405
    current vx =0.073285843
    current vy =0.1382722361
    current vz =-2.2885398791
    current dt =0.1230844
    current vx =0.080670907
    current vy =0.1432571543
    current vz =-2.4063931921
    current dt =0.1261129
    current vx =0.0859676488
    current vy =0.1477972187
    current vz =-2.52790297125
    current dt =0.1251591
    current vx =0.0951042631
    current vy =0.1539300146
    current vz =-2.6502459915
    current dt =0.1235476
    current vx =0.1094975585
    current vy =0.1616517396
    current vz =-2.7716932823
    current dt =0.1252759
    current vx =0.12045919975
    current vy =0.1691682936
    current vz =-2.89076802525
    current dt =0.1244582
    current vx =0.12767777535
    current vy =0.1776314512
    current vz =-3.00856771155
    current dt =0.1248912
    current vx =0.13111228335
    current vy =0.1868109544
    current vz =-3.12733924275
    current dt =0.1251323
    current vx =0.13549191385
    current vy =0.1936932309
    current vz =-3.24621492775
    current dt =0.1271174
    current vx =0.14794941905
    current vy =0.198968603
    current vz =-3.36799339695
    current dt =0.1247813
    current vx =0.1588677828
    current vy =0.20389746435
    current vz =-3.4899671177
    current dt =0.1241693
    current vx =0.1660696022
    current vy =0.21072677585
    current vz =-3.60153323375
    current dt =0.1250103
    current vx =0.1679447567
    current vy =0.2187899402
    current vz =-3.7076044733
    current dt =0.1243682
    current vx =0.1798219198
    current vy =0.2274957142
    current vz =-3.8275576022
    current dt =0.1255026
    current vx =0.2031026521
    current vy =0.2393557099
    current vz =-3.9528719483
    current dt =0.1245351
    current vx =0.2163033727
    current vy =0.2550471325
    current vz =-4.0742936708
    current dt =0.1249921
    current vx =0.2226779698
    current vy =0.2750458685
    current vz =-4.2014106365
    current dt =0.1250696
    current vx =0.2272430102
    current vy =0.2962451657
    current vz =-4.3246041925
    current dt =0.125897
    current vx =0.2322159417
    current vy =0.3162627887
    current vz =-4.4403035355
    current dt =0.2491454
    current vx =0.2441749209
    current vy =0.3503957085
    current vz =-4.6768670928
    current dt =0.1246029
    current vx =0.25084117605
    current vy =0.36889923915
    current vz =-4.80016166235
    current dt =0.1265465
    current vx =0.2586237858
    current vy =0.3894630454
    current vz =-4.92164630235
    current dt =0.1236235
    current vx =0.26622663105
    current vy =0.4085010644
    current vz =-5.0370488396
    current dt =0.12571
    current vx =0.27527775105
    current vy =0.4284260994
    current vz =-5.1554676596
    current dt =0.1247875
    current vx =0.2828273948
    current vy =0.4483920994
    current vz =-5.27357902835
    distance = racine de 0.667781101081328 au caree + 1.00545990677612 au caree +-14.8903862215271 au caree

    Resulat = 14.9392263203065



    la vrai mesure de la distance est jute de 1metre ici il me donne 14

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    la distance etant en ms-1 je dois rediviser par delta le EndTime - StartingTime pour avoir la longueur peut etre

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Regarde ce que tu obtiens avec la correction ajoutée dans mon message de 21H58 + le "/1000D".
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Je l'ai ajouté dés que je l'ai lu

    mais ca n'a change pas les valeurs qui sont trop enormes par-rapport aux valeurs reelles...

  12. #12
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Le résultat est globalement cohérent avec le données :
    durée totale (environ 6 secondes) x vitesse moyenne (environ 2 mètres/secondes) ==> à peu près 12m
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Merci graffito mais as-tu une idee pour quoi ces environ 12 metres alors que la distance parcourrue est de seulement 1 metre?

  14. #14
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Est-ce que la durée totale de quelques secondes te parait cohérente ?
    Est-ce que la vitesse atteinte de quelques mètres par secondes te parait cohérente ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  15. #15
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Acceleration en foot/s2 ?
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  16. #16
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    La duree totale me parait coherente mais pas la vitesse j'ai parcouru un metre pendant la periode le code lui semble voir dans les environ de 12

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    pour l'acceleration je prends juste celle donnée par la methode du framework, je suppose que c'est en metre/seconde il n'y a pas de detail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AccelerometerReading reading = _accelerometer.GetCurrentReading();
     
    X = reading.AccelerationX); //Get the G-force Acceleration along the x axis (Microsoft)
     ....

  18. #18
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    L'unité d'acceleration fournie par AccelerometerReading est le "g" = 9.81 m/s2
    Et il faut ajouter +-1g à l’accélération en z pour tenir compte de la force de gravité terrestre.

    En fait suivant le code, les 12 m peuvent correspondre à la distance en chute libre = 1/2 x g x t x t (sachant avec g=1 au lieu de 9.81 normalement)
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  19. #19
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par Graffito Voir le message
    L'unité d'acceleration fournie par AccelerometerReading est le "g" = 9.81 m/s2
    Et il faut ajouter +-1g à l’accélération en z pour tenir compte de la force de gravité terrestre.

    En fait suivant le code, les 12 m peuvent correspondre à la distance en chute libre = 1/2 x g x t x t (sachant avec g=1 au lieu de 9.81 normalement)
    Bonjour Graffito en fait l'ajout de la gestion de la Gravité sur z avec la meme distance me donne des distances tres tres grandes comme 680...
    je me suis dit que la force g s'applique sur Y et j'ai tester mais pareil des resulats incoherents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(reading.AccelerationY > 0)
    z = reading.AccelerationY - 9.81;
    else
    z = reading.AccelerationY + 9.81;
    j'ai fait des recherches et certains utilisent pythagore mais pareil le l'application du theoreme sur 2 points pris de facon statique donne des resultats incoherents

    si il y'a d'autre idee je suis preneur..

  20. #20
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    On fera d'abord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reading.AccelerationZ = reading.AccelerationZ - 1 ;
    // -1 ou +1 de façon à ce que le résultat soit nul si le système est immobile
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    reading.AccelerationX = reading.AccelerationX * 9.81 ;
    reading.AccelerationY = reading.AccelerationY * 9.81 ;
    reading.AccelerationZ = reading.AccelerationZ * 9.81 ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  3. reseau a distance
    Par bourvil dans le forum Hardware
    Réponses: 6
    Dernier message: 21/10/2003, 11h25
  4. [SYSTEME] Relance service a distance
    Par NoisetteProd dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 24/02/2003, 08h26
  5. Réponses: 2
    Dernier message: 06/07/2002, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo