coucou !
Je cherche depuis quelques temps comment calculer les angles d'inclinaison d'un téléphone (Yaw, pitch et roll) à partir du sensor gravity qui me retourne grav.x,grav.y et grav.z :
Je ne suis pas matheux et je ne sais même pas si cela est possible :) Donc, si quelqu'un a une idée, je suis preneur !
# regarde du côté de arc tangente
Posté par bobo38 . Évalué à 2. Dernière modification le 09 juin 2022 à 22:22.
Ce que tu veux faire ressemble à la fonction arc tangente
https://fr.wikipedia.org/wiki/Arc_tangente
tu as un angle qui vient d'un triangle rectangle avec tes axes X Y ou Z comme côté adjacent et le côté opposé
Example pour ROLL:
coté opposé=Y, coté adjacent=X, en python ça donnerait la chose suivante
Ce n'est pas trop compliqué parce que les angles sont entre -90° et 90°, exactement la sortie de la fonction arc tangente.
On note les complications de signe de ROLL avec la manip' X/abs(X) pour changer le signe du résultat de l'arc tangente au cas où X est négatif. Pour YAW et ROLL les angles sont entre dans l'intervalle [-180°,180°] et [0°,360°], ce sont des manips de cercle trigonométrique où tu devras changer de signe et rajouter ou soustraire 180° en fonction de tes signes de « coté adjacent » et « côté opposé »
Désolé de ne pas pouvoir être + précis, je suis plus orienté « physique appliquée de l'ingénieur » que mathématiques
[^] # Re: regarde du côté de arc tangente
Posté par bobo38 . Évalué à 1. Dernière modification le 09 juin 2022 à 23:07.
math.arctan2 est très bien pour roll. La doc peut être trouvée ici
https://docs.python.org/3/library/math.html
La fonction math.atan est appropriée pour les ranges d'ange -pi/2 à pi/2 (-90° à 90°) en output. Cette fonction math.atan2 peut vraiment être utile pour simplifier l'implémentation de pitch et yaw qui couvrent des ranges de -pi à +pi (-180° à 180°) en output : les cotés opposé et adjacent étant 2 inputs séparés pour cette fonction, il est possible pour elle de tenir compte des combinaisons de signe.
Voici ce que je ferais pour pitch et yaw, toujours en python:
pitch=math.atan2(Z,Y)*360/2/math.pi
yaw=math.atan2(X,-Y)*360/2/math.pi+180
(j'ai quand même vérifié ton historique de profil avant d'envoyer ma solution, plein de contribution, j'imagine que tu n'es pas un étudiant qui fait faire ses devoirs sur le web :-P Ceci dit je ne garantis pas le résultat, hein ;-)
[^] # Re: regarde du côté de arc tangente
Posté par PR . Évalué à 2. Dernière modification le 09 juin 2022 à 23:24.
Attention, là tu calcules les coordonnées sphériques de l’axe pointé par le capteur dans le repère de ton téléphone. Tu ne calcule pas l’orientation du téléphone dans l’espace.
Mort aux cons !
[^] # Re: regarde du côté de arc tangente
Posté par bobo38 . Évalué à 1.
Je viens de comprendre ça en lisant le fil "c'est simple…", notamment la réponse de gUI commençant par "Oui et non…" qui donne un exemple très précis, qui est YAW. En effet si le bousin est à plat X et Y sont tous les 2 proches de zéro, du coup arctan(~0/~0) peut donner largement de la merde, surtout si les capteurs ne sont pas méga précis autour de 0. Ça doit être aussi valable pour PITCH et ROLL.
J'ai eu mon kif à rejouer avec les fonctions trigonométriques hier… il y a les maths mais il y a les limites de l'application aussi :-)
[^] # Re: regarde du côté de arc tangente
Posté par Cyprien (site web personnel) . Évalué à 2.
Bon, ben merci !
Je ne pensais pas avoir une réponse si rapide :) Je lançais cela un peu par hasard !
Je vais tester, j'utilise Godot pour faire mon appli.
# C’est simple…
Posté par PR . Évalué à 2. Dernière modification le 09 juin 2022 à 23:14.
… tu peux pas.
Le senseur gravité te donnera seulement un axe (vertical).
Il te faut ajouter un autre axe. J’imagine celui de la boussole.
Ensuite tu peux déduire tes angles.
Ajoute que les téléphones sont, à ma connaissance, équipés d’un gyroscope, plus précis (?) mais soumis à une dérive.
L’API Android ne fournit-elle pas directement les angles voulus ?
Mort aux cons !
[^] # Re: C’est simple…
Posté par raspbeguy (site web personnel, Mastodon) . Évalué à -1.
C'est faux. La valeur de la gravité est fournie pour les trois axes.
Un gentil du net
[^] # Re: C’est simple…
Posté par gUI (Mastodon) . Évalué à 10. Dernière modification le 10 juin 2022 à 10:16.
Oui et non…
Téléphone posé à plat, l'accéléromètre te donne (je l'ai sous les yeux)
X : 0 m.s-2
Y : 0 m.s-2
Z : 10 m.s-2
Si je tourne le téléphone sur lui-même (donc toujours posé à plat mais dans une autre direction), les valeurs ne changent pas une fois le téléphone stabilisé.
Pendant le mouvement, je peux en effet déduire qu'on a tourné le téléphone à plat (et de combien de degrés), mais pour avoir la position de départ, il me faut bien la boussole.
Au passage, si vous voulez jouer avec les capteurs (très nombreux) de votre smartphone, l'application phybox est parfaite pour ça.
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: C’est simple…
Posté par Cyprien (site web personnel) . Évalué à 4.
Trop bien phybox !!
[^] # Re: C’est simple…
Posté par gUI (Mastodon) . Évalué à 7.
Je l'ai découvert dans les expériences confinées de Thomas Bobroff.
Par exemple il se sert du capteur de pression atmosphérique pour peser un objet, ou du son pour mesurer la longueur d'une table, ou encore il retrouve la constante g en le laissant tomber… Vraiment ultra didactique (niveau lycée pour vraiment tout comprendre, mais accessible au collège je pense).
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: C’est simple…
Posté par PR . Évalué à 3.
https://developer.android.com/reference/android/hardware/SensorManager#getRotationMatrix(float[],%20float[],%20float[],%20float[])
https://developer.android.com/reference/android/hardware/SensorManager#getOrientation(float[],%20float[])
Manifestement ça n’utilise pas les gyros (qui renvoient une vitesse de rotation).
Mort aux cons !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.