Pilotage d'un robot à chenille avec la télécommande infra-rouge en Python

Cet article présente un programme Python qui permet de piloter un robot à chenille à l'aide de la télécommande infra-rouge Lego.
Le robot utilisé est construit sur une base standard de robot à chenille telle que présentée dans la documentation Lego MindStorm EV3. Quelques modifications ont été apportées pour permettre, d'une part d'utiliser la batterie rechargeable qui est plus épaisse que l'espace embarquant les piles R6 normales, et d'autre part pour libérer un peu d'espace pour connecter une clef WiFi sur le port USB placé sur le coté de la brique et dédié à cet usage. Le construction de ce robot est décrite dans l'article intitulé « Construction du robot Explorateur ».
Le moteur contrôlant la chenille gauche est connecté sur le port B, celui contrôlant la chenille droite sur le port C. Le capteur infra-rouge est connecté sur le port 4.
La télécommande infra-rouge du Lego MindStorm est utilisé pour contrôler le robot. Celle-ci doit être configurée sur le canal 1. Les boutons de gauche (coté rouge) pilotent la chenille gauche, ceux de droite (coté bleu) la chenille de droite. Pour avancer, il faut appuyer simultanément les boutons rouge et bleu vers l'avant. Pour reculer, il faut appuyer simultanément les boutons rouge et bleu vers l'arrière. Pour tourner à droite appuyer le bouton rouge (situé à gauche) vers l'avant ou appuyer le bouton bleu (à droite) vers l'arrière. Faire l'inverse pour tourner à gauche.

Prérequis

Programmation

Dans VSCode, créer un nouveau fichier remoteir.py. Y taper le code ci-dessous :
#!/usr/bin/env python3

from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C
from ev3dev2.sensor.lego import InfraredSensor
from ev3dev2.sensor import INPUT_4

motors = MoveTank(OUTPUT_B, OUTPUT_C)
irsensor = InfraredSensor(INPUT_4)
SPEED = 50

while True:
    speed_left, speed_right = 0, 0
    if irsensor.top_left(1):
        speed_left = SPEED
    if irsensor.bottom_left(1):
        speed_left = -SPEED
    if irsensor.top_right(1):
        speed_right = SPEED
    if irsensor.bottom_right(1):
        speed_right = -SPEED
    motors.on(speed_left, speed_right)

Explications

La documentation de référence de l'API ev3dev est accessible sur Internet sur l'url «https://ev3dev-lang.readthedocs.io/projects/python-ev3dev/en/stable/spec.html».
  • La première ligne du programme DOIT contenir l'instruction #!/usr/bin/env python3. Cela permet de désigner quel interpréteur Python doit être utilisé sur la brique EV3 pour exécuter le programme.
  • Tous les objets relatifs aux moteurs, aux capteurs et aux ports utilisés doivent être importés. Dans cet exemple, on utilise les classes MoveTank pour le groupe des moteurs qui contrôlent les chenilles, InfraredSensor pour le capteur infra-rouge et les constantes OUTPUT_B, OUTPUT_C et INPUT_4 relatives aux  ports sur lesquels ils sont connectés.
  • Ensuite, les organes capteurs et moteurs doivent être instanciés :
    • La constante SPEED défini la vitesse du moteur. Celle-ci, fixée à 50, sera transmise aux moteurs pour toutes les actions, pour équilibrer le déplacement du robot.
    • L'objet motors est une instance de la classe MoveTank qui correspond à un groupe de deux Lego large EV3 motors. Ceux-ci sont connectés sur les ports OUTPUT_B et OUTPUT_C
    • L'objet irsensor est une instance de la classe InfraredSensor qui correspond au capteur infra-rouge Lego EV3. Ce dernier est connecté sur le port INPUT_4.
  • Un programme de robot est une boucle sans fin (while True:) qui lit en permanence les capteurs connectés aux ports d'entrée et, en fonctions des données collectées, déclenche les actions adéquates sur les organes (moteurs ou autres) connectés aux ports de sortie.
  • La méthode on de la classe MoveTank permet de passer la vitesse respective de chaque moteur du groupe. Ces vitesses, d'abord initialisées à 0, sont modifiées en fonction de l'état des boutons de la télécommande détectés par le capteur infra-rouge.

Test du programme

Lancement du programme en mode Debug

En mode Debug, le programme est lancé sur l'ordinateur à partir de l'IDE VSCode en tapant la touche F5.

L'IDE permet de poser des poins d'arrêt et de contrôler la valeur des variables. Comme les programmes de robotique sont des programmes sans fin, le programme doit être arrêté en cliquant le carré rouge dans la barre de debug de l'IDE avant d'être modifié ou corrigé.

Lancement du programme en mode déconnecté

La commande F5 de l'IDE, compile — ou plutôt vérifie la syntaxe du programme, car le langage python est interprété — puis télécharge celui-ci sur la brique EV3. Cela est facilement vérifiable dans l'IDE, car celui-ci permet d'explorer le contenu de la brique. Pour cela, il suffit de développer le nom de la brique dans l'explorer comme le montre la figure ci-dessous :
Le programme étant présent sur la brique, il peut être lancé à partir de celle-ci indépendamment de toute connexion. A partir des boutons de la brique EV3 :
  • Choisir File browser.

  • Naviguer dans les dossiers jusqu'à trouver le fichier remoteir1.py (nom donné au programme au moment de sa création). Celui-ci se trouve dans le dossier /home/robot/Exploration dans l'exemple.
  • Lancer l'exécution de ce programme en appuyant le bouton central de la brique après l'avoir choisi.
Le programme étant constitué par une boucle sans fin, appuyer le bouton de retour de la brique.

Conclusion

Cet article constitue le premier d'une série constituant un tutoriel pour programmer un robot MindStorm EV3. Ici, la programmation est linéaire. L'exercice suivant propose d'utiliser les caractéristiques objet du langage Python pour programmer le robot dans une classe d'objet.

Commentaires

Posts les plus consultés de ce blog

Connecter ev3dev2 à Internet en WiFi

Connecter Visual Studio Code à un robot MindStorm EV3 avec ev3dev-browser

Installer les modules EV3DEV2 sur Python