Bonjour,
Pour un montage à deux roues motrices, en général je ne définis pas mes lois de commandes en vitesse de chaque moteur, mais en vitesse linéaire et angulaire du robot (c'est ça qui définit la trajectoire, qui est ce qui nous intéresse, la vitesse individuelle des moteurs est un "détail" de bas niveau qui ne nous intéresse en général pas en soit).
Si ton robot a un écart e (en m) entre les roues motrices, et que les roues motrices ont un rayon R (en m), alors tu as les relations suivantes (je considère qu'une vitesse de rotation positive fait avancer la roue correspondante) :
Vitesse du robot : V_lin (en m/s) et V_th (en rad/s)
Vitesse des roues gauches et droites : w_g et w_d (en rad/s)
V_lin=(w_g + w_d)/2 * (2*pi*R) / (2*pi) = R * (w_g + w_d)/2
V_th=R * (w_d - w_g) / (d/2) = R * (w_d - w_g) / d
et inversement :
w_d = V_lin / R + 0.5 * V_th * d / R
w_g = V_lin / R - 0.5 * V_th * d / R
Donc ce que je fais d'habitude, c'est de partir des vitesses linéaires et angulaires que je souhaite pour mon robot, et ensuite les convertir en vitesses pour chacune des roues.
NB : si tu ne veux pas te casser la tête, prends des moteurs assez rapide pour pouvoir réaliser simultanément la vitesse linéaire et angulaire max.
La deuxième question, c'est de définir la trajectoire que tu veux pour ton robot, et en déduire tes vitesses linéaires et angulaires.
Là, ça dépend beaucoup de ton cas de figure :
- faut-il prioritiser la vitesse ou le fait de rejoindre au plus "tôt" la distance cible (dans le premier cas on garde la vitesse max et on tourne en avançant ; dans le deuxième cas on peut aller jusqu'à s'arrêter, tourner sur place vers la destination, avancer vers la destination, puis suivre la "ligne" virtuelle)
- faut-il impérativement commencer à un point donné, ou a-t-on le droit de rater le début de la ligne?
- ton lidar, il est 1D (télémètre laser) ou 2D? Fixe ou monté sur un moteur? Si monté sur un servo, quel vitesse de balayage?
- ton robot est-il rapide et/ou lourd et/ou haut (en gros, est-ce qu'il peut changer brutalement de vitesse ou pas)?
Des idées de stratégies (en supposant que la ligne à suivre, la position du robot et l'orientation du robot soient connues):
Stratégie 1 : précis mais lent
a) on tourne sur place vers le début de la ligne
on avance vers le début de la ligne à vitesse linéaire proportionnelle à la distance au début de la ligne (limité à la vitesse max). Vitesse angulaire proportionnelle à l'erreur d'orientation par rapport au début de ligne (alternativement proportionel + dérivée (PD) pour plus de précision)
c) on tourne sur place pour s'orienter dans le sens de la ligne
d) on avance à vitesse linéaire constante. Vitesse angulaire proportionnelle+dérivée sur la distance à la ligne. Si jamais la distance à la ligne est trop grande, faire d')
d') s'arrêter et se tourner vers le point le plus proche de la ligne, puis avancer jusqu'à la ligne, puis retourner au c)
Stratégie 2 : rapide et simple, peu précis
a) on s'oriente vers la fin de la ligne en tournant sur place
on avance à vitesse max, vitesse angulaire proportionnelle (éventuellement PD pour plus de précision) à la distance à la ligne