GY271 : comment s'orienter ?

Salut.

J'ai un GY271 (compas) qui me tourne une valeur de 0 à 359° en fonction de son orientation .
Il sera monté sur mon proto de Rover.Le but est de fixer un cap et d'asservir le robot pour qu'il le suive . Je cherche une parade "mathématique" pour le passage de 360 à 0 ou l'inverse.

Un exemple , je demande à mon robot d'aller tout droit, je prend le cap actuel comme référence (prenons 345°). Et ensuite je le compare avec le cap pris en cours de mouvement : si c'est positif il va trop à droite , si c'est négatif c'est trop sur la gauche.

Si le robot se trouve décaler de 20° sur la droite avec mon cap de consigne à 345° le cap sera alors de 5° et j'aurai une comparaison négative et donc mon robot va interprêter de la mauvaise façon : il va croire être trop a gauche ..

J'ai bien pensé faire un "changement de repère" en utilisant map() mais je bloque ..

2 jours que je suis dessus , je trouve 3 min après avoir posté :smiley:

J'ai piqué le bout de code ici : BittyBot Rover using HMC5883L Compass to move in straight line - YouTube

Ca donne un truc du genre :

mesure = int(headingDegrees);        // mesure en "live"
diff=cap_ref - mesure;                     // comparaison par rapport à mon cap de référence
int direct=180 - (diff+360)%360;     // Le calcul que je n'aurai jamais trouvé tout seul ^^

Concrètement ça donne qqch que je représenterais comme ça :

Va vers la gauche CAP à suivre (=180) Va vers la droite
171; 172 ;173 ;174; 175; 176; 177; 178; 179; 180; -179; -178; -177; -176; -175; -174; -173; -172; -171; -170