5.3 CONTRÔLE ET RÉGULATION

 

 

INTRODUCTION

 

Lorsque l’on travaille avec des machines, en particulier des robots, on est souvent confronté au problème de les contrôler de sorte qu’une variable mesurée soit aussi proche que possible d’une valeur prédéterminée, la valeur de consigne. C’est le cas dans une voiture équipée d’un tempomat responsable de maintenir la vitesse du véhicule aussi proche que possible d’une vitesse donnée, la valeur de consigne, indépendamment des facteurs extérieurs comme la pente de la route. À cette fin, un système de régulation doit être en mesure de déterminer la vitesse instantanée de la voiture (valeur réelle) à l’aide d’un capteur et d’ajuster ensuite la puissance du moteur de manière appropriée, comme si l’on agissait sur la pédale des gaz.
Voici quelques autres exemples de systèmes de régulation:

  • Maintenir la température d’un réfrigérateur (contrôle par thermostat)
  • Maintenir la trajectoire d’un avion sur un parcours déterminé (pilote automatique)
  • Maintenir le niveau de remplissage d’un réservoir (par exemple la chasse d’eau des WC)

De nombreuses activités humaines peuvent être considérées comme des processus de régulation.  Voici quelques exemples :

  • Tourner le volant pour que la voiture reste sur la route
  • Travailler juste ce qu’il faut pour obtenir son baccalauréat …
  • Garder l’équilibre en se tenant sur une seule jambe
CONCEPTS DE PROGRAMMATION: Système de régulation, valeur mesurée, valeur de consigne, incertitude de mesure

 

 

VOITURE AUTONOME

 

Conduire une voiture est un processus de contrôle très complexe devant prendre en compte de nombreux signaux d’entrée qui affectent le conducteur non seulement visuellement, mais de manière haptique (forces ressenties par le corps). Le comportement du conducteur résulte du traitement mental de tous ces signaux (tourner le volant, actionner la pédale des gaz, etc …).
Dans le future, les véhicules seront capables de conduire sans intervention humaine même dans des situations de trafique très dense. Plusieurs groupes de recherche de par le monde travaillent actuellement à ce problème et il n’est pas impossible que vous participiez vous-même un jour à ces recherches passionnantes. Dans cette section, vous pourrez déjà aiguiser vos compétences dans une situation extrêmement simplifiée.

 

 

Votre tâche est de guider le robot constitué d’un châssis monté sur roues et d’un capteur photosensible le long d’une route verte bordée d’une zone noire d’un côté et d’une zone verte de l’autre. Le capteur fonctionne en mesurant l’intensité de la lumière diffusée par le revêtement du sol. Le capteur mesure une intensité moyenne lorsqu’il se trouve sur la zone verte, élevée au-dessus de la zone jaune et faible au-dessus de la zone noire. Il incombe au système de régulation d’adapter l’intensité des moteurs en fonction de la valeur mesurée par le capteur photosensible de sorte que le robot soit capable de se déplacer le long de la route au mieux possible.

 

Schématiquement, on peut représenter ce processus par une boucle de régulation. Le capteur photosensible mesure l’intensité lumineuse (valeur mesurée) et la transmet au régulateur qui la compare à la valeur désirée (valeur de consigne) correspondant à la route verte. Le régulateur utilise la différence entre la valeur mesurée et la valeur de consigne pour déterminer par un algorithme de régulation spécifique à la situation la grandeur de contrôle à envoyer à l’essieu afin de ramener la valeur mesurée à la valeur de consigne.


Boucle de régulation

On voit que ce schéma constitue une boucle partant des capteurs du véhicule, passant par le système de régulation et revenant à nouveau vers les moteurs du véhicule qui vont à nouveau influencer les valeurs mesurées par les capteurs …

Avant de pouvoir coder le programme, il est nécessaire de connaitre les valeurs de référence mesurées par le capteur sur les différentes zones jaune, verte et noire. Pour déterminer ces valeurs, il suffit d’écrire un petit programme test qui affiche les valeurs mesurées par le capteur sur la console de TigerJython ou sur l’écran de la brique. En mode réel, il n’est pas nécessaire de programmer des déplacements car il suffit de prendre le robot dans les mains et de le placer sur la zone souhaitée. En mode simulation, il faut par contre déplacer le robot à travers les différentes zones colorées pour pouvoir observer les différentes valeurs mesurées par le capteur photosensible virtuel. On appelle ce processus la calibration. Il faut utiliser le capteur photosensible sur le NXT et le capteur colorimétrique sur la brique EV3.

 

from simrobot import *
#from nxtrobot import *
#from ev3robot import *

RobotContext.setStartPosition(250, 490)
RobotContext.useBackground("sprites/roadtest.gif")

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ls = LightSensor(SensorPort.S3)
robot.addPart(ls)
ls.activate(True)
gear.forward()

while not robot.isEscapeHit():
    v = ls.getValue()
    print(v)
    Tools.delay(100)
robot.exit()
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

Ce programme utilise un algorithme de régulation trivial : si la valeur mesurée est plus grande que la valeur de consigne, le véhicule se trouve dans la zone jaune et doit tourner vers la droite. Si la valeur mesurée est par contre inférieure à la valeur de consigne, le véhicule se trouve dans la zone noire et doit effectuer un virage vers la gauche. Dans tous les autres cas, il se trouve dans la zone verte et peut continuer sa course en ligne droite.

from simrobot import *
#from nxtrobot import *
#from ev3robot import *

RobotContext.setStartPosition(50, 490)
RobotContext.useBackground("sprites/road.gif")
  
robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ls = LightSensor(SensorPort.S3)
robot.addPart(ls)
ls.activate(True)
gear.forward()
nominal = 501

while not robot.isEscapeHit():
    actual = ls.getValue()
    if actual == nominal:
        gear.forward()
    elif actual < nominal:
        gear.leftArc(0.1)
    elif actual > nominal:
        gear.rightArc(0.1)

robot.exit()
Sélectionner le code (Ctrl+C pour copier, Ctrl+V pour coller)

 

 

MEMENTO

 

La régulation fonctionne sans encombre en mode simulé, ce qui n’est pas le cas en mode réel. Ceci vient du fait que les valeurs mesurées par le capteur fluctuent dans la réalité, même lorsque le capteur se trouve sur une surface de couleur uniforme. Ces fluctuations sont dues, même sur une surface uniforme, aux différences d’éclairage et aux erreurs de mesures du capteur. Faites l’effort de chercher par vous-mêmes une solution à ce problème ! Le rayon de courbure transmis à leftArc() ou rightArc() est une paramètre sensible. Une petite valeur de ce paramètre conduit certes à de petits écarts avec la route mais à un comportement oscillatoire très nerveux [plus...Les oscillations du du régulateur constituent une imperfection typique des
processus de régulation et peuvent amener à l’échec de la régulation (instabilité)
], tandis qu’une grande valeur du rayon de courbure permet un mouvement plus calme mais qui s’éloigne parfois excessivement de la route. Faites quelques expériences pour confirmer ce comportement en utilisant différents rayons de courbure.

 

 

EXERCICES

 

1.

Déplacer le robot le long d’une frontière noire/vert à l’aide d’un capteur en utilisant le RobotContext suivant en mode simulé :

RobotContext.useBackground("sprites/edge.gif")
RobotContext.setStartPosition(250, 490)

 

 


2.

Déplacer le robot le long d’un chemin elliptique en utilisant deux capteurs photosensibles. Utiliser le RobotContext suivant en mode simulé:

RobotContext.useBackground("sprites/roundpath.gif")
RobotContext.setStartPosition(250, 250)
RobotContext.setStartDirection(-90)

Régler la position et la direction de départ pour que le robot commence sa course sur la piste noire.

 



3.

Parcourir un grand-huit à l’aide de deux capteurs photosensibles. Utiliser l’image de fond track.gif en mode simulation.

RobotContext.useBackground("sprites/track.gif")