Forum Linux.android Yaw, pitch et roll depuis la gravité

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
3
9
juin
2022

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 :
Yaw picth roll
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  . É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

    import math 
    ROLL=X/abs(X)*math.atan(-Y/X)*360/2/math.pi
    

    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  . É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  . É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  . É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  (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  . É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 !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.