lisser un mouvement venant d'un smartphone

Toutes les questions sur le développement Mobile, y compris la partie script.
FournierF3D
Messages : 38
Inscription : 16 Nov 2017 00:18

lisser un mouvement venant d'un smartphone

Message par FournierF3D » 20 Déc 2017 22:42

Bonjour

j'utilise les coordonnée venant d'un smartphone pour modifier la position d'un objet
dans la théorie, ça fonctionne, mais les coordonnée envoyée par le smartphone change constamment ( même si le smartphone est posé )

les coordonnées sont recuperer grace a ces fonctions

Code : Tout sélectionner

       Depl_H = (Input.acceleration.x) ;
       Depl_V = (Input.acceleration.z) ;
je souhaitais savoir si il y a une fonction pour lisser un mouvement et ainsi éviter les tremblements

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: lisser un mouvement venant d'un smartphone

Message par boubouk50 » 21 Déc 2017 10:07

Je ne sais pas s'il y a une fonction spéciale pour cela mais tu peux passer par une interpolation linéaire (Lerp ou SLerp). Cela fera une sorte de moyenne entre les valeurs en fonction de l'interpolant. Il faut jouer sur l'interpolant pour savoir si tu te situes plutôt du côté de la nouvelle valeur (tu auras encore des artefacts) ou de la précédente (tu auras de la latence).
Le mieux, je pense, c'est de ne pas lisser les inputs mais le résultat. A tester quand même.
Sinon, tu peux stocker les dernières valeurs de l'accéléromètre pour établir toi même une moyenne ou une médiane. En gros, tu ne peux pas lisser sans connaître au moins la valeur précédente.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Fasol0
Messages : 64
Inscription : 07 Avr 2015 11:43

Re: lisser un mouvement venant d'un smartphone

Message par Fasol0 » 22 Déc 2017 15:02

Les données de ce type de capteur sont très bruitées par nature. Prises individuellement, les valeurs sont très peu précises,
J'éviterai donc l'interpolation dans ce cas de figure, qui ne ferait que rajouter des valeurs entre ces valeurs imprécises. Il te faut un vrai filtre de données pour pouvoir exploiter celles-ci correctement, qui n'existe pas de base dans unity malheureusement.

Une des méthodes, de loin la plus simple à mettre en place, est un filtre à moyenne glissante:
Dans ce cas, comme le dit boubouk, il te faut stocker les données dans une liste, sur un certain nombre de secondes.
ce nombre est l'unique paramètre à régler:
Une durée d'acqusition élevée offrira un excellent lissage des données mais introduira un retard important, et réciproquement.
à toi de trouver le compromis qui te convient (pour te donner l'échelle; cette durée se situera ente 0.5s et 3s)

- la taille de ta liste correspond à la durée d'acquisition.
- ensuite, à chaque nouvelle acquisition, tu supprimes la donnée la plus ancienne de la list et ajoutes la nouvelle donnée.
- Tu fais à chaque frame la moyenne de cette liste, qui te donnera une valeur lissée.

Si tu as des difficultés pour l'implémentation je pourrais t'aider.

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »