Utilisation du squelette robot.py (IV - La classe RobotExplorer)

Cet article constitue le quatrième d'une série consacrée à la programmation d'applications robotiques en langage Python. Dans cette série, cinq classes sont présentées successivement :
La classe RobotExplorer s'appuie sur la classe Robot. Cette classe se trouve dans le module robot.py. Ce module, téléchargeable ici, doit être inclus dans le projet dans lequel il est utilisé. 

La classe RobotExplorer

Dériver la classe Robot n'offre que peu d’intérêt car toute l'intelligence se trouve en réalité dans les tâches qui lui sont attachées. Cependant, cela peut être utile pour rassembler toutes les constantes structurelles d'un robot comme les moteurs, les capteurs et les constantes géométriques ou mécaniques.
Voici un exemple adapté au robot Explorer dont la construction a fait l'objet d'un article intitulé « Construction du robot Explorateur ».

Programmation

# 1 #
from ev3dev2.motor import MoveTank, OUTPUT_B, OUTPUT_C
from ev3dev2.motor import MediumMotor, OUTPUT_A
from ev3dev2.sensor.lego import InfraredSensor
from ev3dev2.sensor import INPUT_4
from ev3dev2.sensor.lego import UltrasonicSensor
from ev3dev2.sensor import INPUT_3

# 2 #
import lego
# 3 #
from robot import Robot

class RobotExplorer(Robot):
    # 4 #
    MOVING_MOTORS = MoveTank(OUTPUT_B, OUTPUT_C)
    # 5 #
    US_MOTOR = MediumMotor(OUTPUT_A)
    # 6 #
    IR_SENSOR = InfraredSensor(INPUT_4)
    # 7 #
    US_SENSOR = UltrasonicSensor(INPUT_3)
    # 8 #
    US_ECCENTRICITY = 12 * lego.U
    # 9 #
    CATERPILLAR_SPACING = 22 * lego.U
    # 10 #
    US_GEARS_REDUCTION = -3

    # 11 #
    def __init__(self):
        super().__init__()

Explications

  1. Les classes et les constantes relative aux éléments Lego MindStorm EV3 sont importés à partir de la bibliothèque ev3dev2 utilisée pour la programmation en Python. 
  2. Le module lego.py contient toutes les constantes Lego. Entre autres, il expose la constante U correspondant à l'écartement entre deux plots (8 mm).
  3.  La classe Robot étant utilisée comme classe de base pour la classe RobotExplorer, celle-ci doit être importée à partir du module robot.py.
  4. MOVING_MOTORS est une constante de classe à laquelle est affectée une instance de MoveTank correspondant à un couple de grands servo-moteurs Levo EV3 connectés respectivement sur les port B et C.
  5. US_MOTOR est une constante de classe à laquelle est affectée une instance de MediumMotor, le servo-moteur utilisé pour contrôler la rotation du capteur ultra-son connecté sur le port A.
  6. IR_SENSOR est une constante de classe à laquelle est affectée une instance de InfraredSensor, le capteur infra-rouge Leog EV3 connecté sur le port 4.
  7. US_SENSOR est une constante de la classe UltrasonicSensor, le capteur ultra-son Lego EV3 connecté sur le port 3.
  8. US_ECCENTRICITY correspond à l'excentricité de l'axe de rotation par rapport au centre du robot. Cette valeur doit être prise en compte lorsque le robot est utilisé pour effectuer des mesures topographiques. Elle est exprimée en unités Lego converties en centimètres et vaut 12U.
  9. CATERPILLAR_SPACING correspond à l'écartement entre les deux chenilles du robot. Cette valeur doit être prise en compte lorsque le déplacement du robot doit être contrôlé finement. Elle est exprimée en unités Lego converties en centimètres et vaut 22U.
  10. US_GEARS_REDUCTION  correspond au coefficient de réduction du train d'engrenages utilisé pour contrôler la rotation du capteur ultra-son. La valeur vaut trois et correspond aux engrenages Lego Technic référencés 4255563 (32 dents) et 4177431 (12 dents).
  11. La construction de la classe se suffit d'appeler le constructeur de la classe de base super().

Utilisation

La classe RobotExplorer s'utilise de façon identique à la classe Robot.
robot = RobotExplorer()
IRControlledTankTask(robot)

Conclusion

L'article suivant présente la classe IRControlledTankTask qui implémente une tâche permettant de contrôler le déplacement du robot Explorer à l'aide de la télécommande infrarouge Lego EV3.

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