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

Android Discussion :

Gestion de l'accelerometre


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut Gestion de l'accelerometre
    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
    7
    8
    9
    10
     
    public void onSensorChanged(SensorEvent event) 
    {
    //je recupere XYZ
    }
    //puis
     
    	double mX = fin.X - debut.X ;
    	//...
           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 confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Heu... c'est surtout que "Accelerometre" = accélération (m/s² quoi) ... et c'est bien différent de "disance" (m tout court) !!!
    Il doit mesurer les modifications de vitesse de déplacement comme bien indiqué ici.



    La position c'est simplement LocationManager... qui fournira des positions.

  3. #3
    Membre confirmé
    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
    Par défaut
    Merci nicroman de ta reponse
    Heu... c'est surtout que "Accelerometre" = accélération (m/s² quoi) ... et c'est bien différent de "disance" (m tout court) !!!
    Il doit mesurer les modifications de vitesse de déplacement comme bien indiqué
    Oui exactement l'idée c'est de se basé sur le temps et la vitesse pour trouver le nombre de metre parcourru... la formule la plus logique que j'ai trouvé pour l'instant est la double integration de l'acceleration mais elle donne des resultats vraiment incoherente.

    La position c'est simplement LocationManager... qui fournira des positions.
    Je cherche à calculer des distances tres courtes dans une zone fermé donc le GPS n'est pas la meilleur des solutions

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ben on reprend ses cours de Math

    Il me semble qu'il faille donc intégrer deux fois l'accélération...

    Un truc genre:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    float x,y,z;
    float vx,vy,vz;
    long t;
     
    public void onStart(float x0, float y0, float z0, float vx0, float vy0, float vz0)
    {
         this.t = System.currentTimeMillis();
         this.x = x0;
         this.y = y0;
         this.z = z0;
         this.vx = vx0;
         this.vy = vy0;
         this.vz = vz0;
    }
     
    public void onNewAcceleration(float ax, float ay, float az)
    {
         long t1 = System.currentTimeMillis();
     
         float dt = ((float)(t1 - this.t))/1000.0f;
     
         float dx = ax * dt;
         float dy = ay * dt;
         float dz = az * dt;
     
         // on prend la moyenne de la vitesse (pour l'intégration)
         float vxa = this.vx + dx / 2.f;
         float vya = this.vy + dy / 2.f;
         float vza = this.vz + dz / 2.f;
     
         // on integre l'accélération entre 0 et dt pour la vitesse.
         float vx1 = this.vx + dx;
         float vy1 = this.vy + dy;
         float vz1 = this.vz + dz;
     
         // on integre la vitesse entre 0 et dt pour la position
         float x1 = this.x + vxa * dt;
         float y1 = this.y + vya * dt;
         float z1 = this.z + vza * dt;
     
         this.x = x1;
         this.y = y1;
         this.z = z1;
         this.vx = vx1;
         this.vy = vy1;
         this.vz = vz1;
         this.t = t1;
    }
    J'ai pas essayé, mais c'est ce que je ferai... Pas sur par contre, que les mouvements "lents" et "réguliers" soient détectés de cette manière !

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    L'utilisation de l'accéléromètre pour calculer une distance est une fausse bonne idée. En effet, pour y arriver, il faut des accéléromètres de grande précision, stables dans le temps, sans faux zéro (ou faux zéro compensé) et qui soient calés avec précision sur les axes concernés.

    Le calcul de l'espace parcouru est le résultat d'une double intégration de l'accélération ; c'est une opération qui diverge très facilement à cause des défauts (cités ci-dessus) des accéléros.

    Prenons par exemple un faux zéro non compensable de 0.05 m/s².

    Au bout de 10 secondes de trajet, l'erreur est de 0.05*10²/2 = 2.5 m ; ça va.

    Au bout de 100 secondes, elle sera : 0.05*100²/2 = 250 m !

    Pour évaluer les distances parcourues par les navires, les avions, les véhicules, on utilise des accéléromètres, mais ils sont couplés à des gyroscopes. Le tout formant ce qu'on appelle une centrale inertielle. Ce sont des systèmes très complexes et très onéreux.

    Pour autant, je vous encourage à faire un petit système basé sur les accéléromètres de votre smartphone. Vous serez vite convaincu de l'imprécision des résultats.

    Cordialement.

    Pierre

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/08/2002, 21h37
  2. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 18h19
  3. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  4. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11
  5. gestion d'un joystick ...
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h53

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