Bonjour,
Voici comment je compte programmer mon robot :
Les explications : si je veux que le robot reste parfaitement où il est sans bouger, je laisse les setpoint1 des deux roues à 0, mon premier PID va regarder quel est l'écart avec la position angulaire réelle des roues et va généré un output qui sera un angle vertical de référence pour le robot que le deuxième PID va intégré en tant que Set Point qu'il va comparer avec l'angle mesuré par le MPU et sortir une vitesse aux moteurs pour à la fois maintenir le robot à l'équilibre mais aussi dans une position spatiale fixe. Vu que chaque roue possède son propre système d'asservissement le robot ne tournera pas sur lui même non plus car les deux vitesses des moteurs ne seront pas identiques et chacune essaiera de respecter le setpoint1 de départ vis à vis de sa valeur propre.
Ensuite si je veux faire avancé le robot en ligne droite je change la valeur de setpoint1 (positive, avant ou négative, arrière) mais en mettant la même aux deux systèmes. Encore une fois le premier PID va interpréter ça en donnant une nouvelle consigne pour la verticale (en mettant l'angle vers l'avant). Le deuxième PID va voir qu'il y a une différence avec l'angle mesuré et va induire une vitesse des moteurs qui permet de respecter tout cela, le robot se mettra donc à avancer.
Enfin si je veux faire tourner le robot il me suffis de mettre des valeurs de SetPoint1 différentes pour les deux systèmes, ce qui aura pour conséquence des vitesses différentes en sortie sachant que la roue qui se déplacera le moins essaiera toujours de maintenir le robot à l'équilibre.
J'espère avoir été clair ! J'ai pensé à ça hier au travail, pour moi je suis sur que ça va marcher mais j'aimerais avoir votre avis sur la question Evidemment je vais commencer par coder un premier PID pour maintenir le robot à l'équilibre pour je m'attarderais sur celui qui l'empêche d'avancer et enfin de scinderais le système en deux