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
- La programmation se fait en python sur un ordinateur avec l'IDE Visual Studio Code. L'IDE doit être connecté à la brique Lego EV3 (voir instructions dans l'article intitulé «Connecter Visual Studio Code à un robot MindStorm EV3 avec ev3dev-browser ».
- Python3 doit être installé sur l'ordinateur, ainsi que l'extension ev3dev2. Suivre les instructions dans l'article intitulé « Installer les modules EV3DEV2 sur Python ».
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)
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
Enregistrer un commentaire