Programme de commande d'un entraînement différentiel
L'entraînement différentiel est un procédé de commande pour un robot équipé de seulement deux roues motorisées.
Ce couple de roues motorisées assure les fonctions de propulsion et de direction.
Les autres roues, si elles existent, sont libres (roues folles) ou servent à l'équilibre du robot.
Introduction : les constructions « classiques »
La manière classique de construire un petit engin motorisé sur roues (robot, voiture, aspirateur, tondeuse…) est de l'équiper d'un axe pour la propulsion et d'une direction motorisée. Vous avez donc une commande pour le moteur agissant sur la vitesse d'avance et une commande pour le moteur du système de direction (articulation, crémaillère et pignon moteur).
Dans la plupart des cas, vous disposez donc d'une plateforme mobile sur trois ou quatre roues.
Quand vous désirez exécuter un virage, vous agissez sur la direction sans rien changer sur la vitesse de propulsion sauf si la sécurité de la manoeuvre l'exige.
Maintenant, si nous désirons avoir plus de puissance motrice, nous allons entraîner les deux roues arrières.
Dans cette configuration, pendant l'exécution d'un virage, les roues ne tournent pas à la même vitesse. En effet, la roue externe de la courbe parcours plus de distance que la roue interne de la courbe. Il faudra alors mettre en place un mécanisme appelé différentiel mécanique.
Ces types de configurations induisent que les virages sont "longs" et que pour exécuter un demi-tour sur place et le plus court possible vous êtes limité par l'angle de braquage maximum que la mécanique vous impose (et la physique aussi).
Le rayon de braquage (R) sera proportionnel à la distance (E) entre les deux axes avant et arrière de votre plateforme roulante.
Pour virer au plus court, il faut donc un véhicule court avec un angle de braquage maximum.
Constitution du robot à entraînement différentiel
Le robot est équipé de deux roues motrices. Une de chaque côté du robot. Chaque bloc, roue + moteur, est indépendant mécaniquement et électriquement. Il n'y a pas d'axe mécanique reliant les axes moteurs et les moteurs sont alimentés individuellement. La seule liaison mécanique est le châssis du robot (comme support). La plateforme est équipée d'une roue libre pour l'équilibre du robot.
L'intérêt de cette configuration est importante pour un constructeur de robot : c'est en effet la méthode de pilotage la plus simple pour un robot.
Le terme « différentiel » signifie que la vitesse d'un robot en train d'exécuter un virage, est déterminée par la différence de vitesse entre les deux roues (chacune étant située de chaque côté du robot).
Exemples simples de pilotage
- Le robot doit aller tout droit en avant : faire tourner les deux roues à la même vitesse en avant,
- le robot doit tourner à gauche : maintenir la roue gauche fixe et faire tourner la roue droite en avant.
Algorithme de commande différentielle
L'algorithme de commande différentielle est utile pour les robots photophobes, les suiveurs de ligne, un robot pendulaire inversé, mais également pour des robots bipèdes. Cette commande est la plus fondamentale de toutes et fortement recommandée pour les débutants.
La construction mécanique, ainsi que l'algorithme de contrôle, ne peuvent pas être plus simple.
Commande différentielle partielle
Pseudo-code :
entrée lecture capteur
prendre des décisions en fonction de lecture du capteur
effectuez l'une des actions suivantes :
Aller en avant :
les deux roues avancent à la même vitesse
Aller en arrière :
les deux roues reculent à la même vitesse
Tourner à gauche :
la roue gauche est fixe
la roue droite va vers de l'avant
Tourner à droite :
la roue gauche va vers l'avant
la roue droite est fixe
recommencer
Comment utiliser cet algorithme
Placez deux roues motorisées sur votre robot, une de chaque côté. Envoyez vos commandes de déplacement aux moteurs, soit en utilisant un pilote de moteur ou un pont en H.
Si vous utilisez des servo-moteurs, il suffit d'envoyer la largeur d'impulsion nécessaire. Notez que cet algorithme fonctionne très bien en combinaison de l'algorithme du photophile.
Avec le code ci-dessus et la plateforme à trois roues vous exécutez des virages dont le rayon de braquage est égal à l'entre-axe des roues motrices.
Pour cela il faut que la roue d'équilibre soit le plus libre possible et de bonne qualité. Une bille porteuse est une très bonne solution mais, une roue omnidirectionnelle fonctionne aussi.
Une bille porteuse est encapsulée dans une coque qui contient des billes de roulement.
Dans ce cas présent nous considérons des roues idéales : un glissement optimum pour la roue d'équilibre et une bonne adhésion des roues motrices. Dans la réalité nous avons des performances quasi idéales seulement à très basse vitesse.
En effet, la roue motrice qui est fixe dans un virage, devrait pouvoir glisser sur elle-même, alors que dans le cas d'utilisation normale nous lui demandons une adhérence parfaite.
Le robot à deux roues va diminuer certains de ces inconvénients.
Utilisation avec un robot à deux roues
Dans ce genre de configuration, nous avons un robot qui s'auto-équilibre (type pendule inversé). La roue d'équilibre étant absente, nous avons encore plus de souplesse dans les mouvements et trajectoires. Les deux roues participent à l'exécution du virage et nous avons donc une commande différentielle complète.
Nous améliorons le code de la façon suivante :
entrée lecture capteur
prendre des décisions en fonction de lecture du capteur
effectuez l'une des actions suivantes :
Aller en avant :
les deux roues avancent à la même vitesse
Aller en arrière :
les deux roues reculent à la même vitesse
Tourner à gauche :
la roue gauche va en arrière
la roue droite va en avant
Tourner à droite :
la roue gauche va en avant
la roue droite va en arrière
recommencer
Avec ce code, le robot exécute des demi-tours sur place ; le rayon de braquage est la moitié de l'entre-axe des roues et l'angle de braquage est de 180°.
Le robot munie de deux roues motrices contrôlées par une commande différentielle complète, réalise des trajectoires courbes optimisées pourvu qu'il soit doté de roues qui ne patinent pas.
Commande et algorithme avancés
Jusqu'ici, notre code commande les moteurs de façon assez simple : en avant, fixe (moteur arrêté) et en arrière. Nous avons une vitesse identique sur chacune des roues.
Si vous êtes habile ou que vous utilisez un contrôleur PID, vous pouvez obtenir des trajectoires courbes intéressantes en attribuant des vitesses différentes aux deux roues.
Commande proportionnelle
Si nous désirons corriger légèrement la trajectoire, il suffit de ralentir momentanément une roue pour effectuer un petit changement de direction (au lieu de carrément stopper un moteur).
Améliorons possible du pseudo-code :
lire les capteurs
calculer état_système_coté_droit
calculer état_système_coté_gauche
commande_moteur_gauche =
état_système_coté_gauche × contante_proportionnelle
commande_moteur_droit =
état_système_coté_droit × contante_proportionnelle
recommencer