Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Explorer > Intelligence Artificielle > Logique floue > Soyons flous (be fuzzy)

Soyons flous (be fuzzy)

Des règles pour un robot (Fuzzy rules for a robot)

mercredi 4 octobre 2006, par Frédéric Bernat

Outils et astuces pour la logique floue

Eviter le piège de l’indécision en Logique Floue

Ce premier ensemble de règles est utile lorsque un robot est confronté à un obstacle de forme concave. Avec des règles de base du déplacement et d’évitement d’obstacle il y a de forte chance que le robot se trouve dans l’incapacité de le contourner. Il va effectuer de menu déplacement de gauche à droite sans jamais s’arrêter ou au contraire à rester bloqué indéfiniment.

Ceci est du au fait que les comportements programmés jusqu’à présents sont des fonctions continues définies à partir des entrées fournies par les capteurs.
Si il existe des points dans l’espace de contrôle des moteurs qui sont négatifs le résultat sera de tourner à gauche. Inversement, si il existe des points dans l’espace de contrôle des moteurs qui sont positifs le résultat sera de tourner à droite. Alors il doit exister un point de cette espace ou la valeur sera nulle. Il est alors impossible d’éviter l’indécision symétrique statique. Un autre cas apparaît lorsque le robot fait face à deux obstacles symétriquement de part et d’autre de sa trajectoire, le robot va reculer puis ré avancer indéfiniment, les obstacles apparaissant et disparaissant de ses capteurs.

Dans ce cas les multiples règles vont s’annuler les uns les autres et bloquer le robot. Le problème dès lors peut être vu comme un défaut de mémoire.

piege

De la mémoire pour un robot :

Supposons que l’on gére l’espace situé devant le robot avec un agent de motivation : La frustration. Si le robot est bloqué on va augmenter la valeur de la frustration et si il est débloqué on va rapidement diminuer sa frustration. On va limiter la valeur de la frustration entre 0 et une limite de saturation. On définit une nouvelle variable (direction_aléatoire) qui va osciller entre des valeur positive et négative. Si la frustration atteint le seuil de saturation on rajoute la valeur de direction aléatoire à la commande des moteurs.

Ceci va permettre au robot de changer de trajectoire et de se sortir du piège.

 IF Front_capteur = prés ALORS delta_frust = 1
 IF Front_capteur != prés ALORS delta_frust = -1

Temp_valeur= Frustration + delta_frust ;

 IF Temp_valeur != saturation ET Temp_valeur >0 ALORS Frustration = Temp_valeur
 IF Temp_valeur = saturation OU Temp_valeur <=0 ALORS Frustration = Frustration

Temp_direction = Direction + Direction_Aléatoire

 IF Frustration = Grande ET Front_capteur = prés ALORS Direction=Temp_direction
 IF Frustration != Grande OU Front_capteur != prés ALORS Direction = Direction

Suivre un mur

Supposons que notre robot possède des capteurs de distances sur les cotés. Ceux ci peuvent nous renseigner sur la distance d’un obstacle mais la encore nous pouvons introduire un peu de mémoire pour déterminer si la distance évolue ou reste fixe.

 Delta_droite = Capteur_Droit - Delta_Droite
 Delta_Gauche = Capteur_Gauche - Delta_Gauche

 Delta_droite = Negatif,Constant,Positif
 Delta_Gauche = Negatif,Constant,Positif

fonction de transfert Delta_droite

 IF Delta_droite = Constant ET Delta_droite = Negative ALORS Direction = Gauche
 IF Delta_droite != Constant OU Delta_droite != Negative ALORS Direction = Centre

 IF Delta_Gauche =Constant ET Delta_Gauche =Negative ALORS Direction =Droite
 IF Delta_Gauche !=Constant OU Delta_Gauche !=Negative ALORS Direction= Centre

Rejoindre un point de coordonnées (x,y)

En ajoutant des capteurs odométrique au robot (comme ceux équipant une souris d’ordinateur), Il est possible de calculer en permanence la position du robot.
Ce qui nous ouvre de nouvelles possibilités : le robot ne va plus errer au hasard dans la pièce, mais on peut lui demander de réaliser des déplacements bien définis dans un but précis. Pour cela nous allons lui rajouter quelques règles, afin de lui permettre par exemple de rejoindre un point de coordonnée préprogrammé :

Le but à atteindre : Goal(X,Y)

La position du robot : Rob (Xb,Yb)

angle du but par rapport au robot : µgoal

Distance = ((Xb-X)²+(Yb-Y)²)1/2

IF (Xb-X)=0 THEN µgoal =90 ELSE IF ((Xb-X)>0 THEN µgoal = arctan((Y-Yb)/(X-Xb) ELSE µgoal = 180 + arctan((Y-Yb)/(X-Xb)

Az-error = µ-µgoal (µ direction actuelle du robot)

Les règles seraient alors :

1. IF distance = neargoal THEN vitesse = stop

2. IF distance != neargoal THEN vitesse = avTT

3. IF Az-error = zero THEN direction = Centre

4. IF Az-error = TresPositif THEN direction = DroiteTT

5. IF Az-error = Positif THEN direction = Droite

6. IF Az-error = TresNégatif THEN direction = GaucheTT

7. IF Az-error = Négatif THEN direction = Gauche

Vos commentaires

  • Le 7 octobre 2006 à 18:10, par Eric P. En réponse à : Soyons flous

    Il existe d’ailleurs une expérience faite avec des chiens et des chats et qui montre que ces derniers sont plus intelligents que leurs congénères canins. Elle consiste à placer un récipent de nouriture derrière une paroi concave transparente. Décrit plus simplement, on fabrique une paroi en plexi en forme de V, dont la pointe est dirigée à l’opposé du cobaye et derrière laquelle se situe la bouffe.

    La plupart des chiens va "entrer" dans le V, puis essayer de passer au travers des parois en s’énervant. Le chat va très rapidement comprendre qu’il n’y a pas d’issue via le chemin direct apparent, et va "backtraker" et utiliser un chemin totalement différent, puis contourner l’obstacle.

    En gros, il est plus doué que le chien pour s’échapper des minimas locaux.

    • Le 3 novembre 2006 à 17:09, par David (un "ancien" et toujours fier détenteur de PoBot ) En réponse à : Soyons flous

      bonjour Eric,
      non seulement le chat va s’adapter lors d’une erreur due à un minima local mais en plus il semble pouvoir "dépiler" les déplacements acquis afin d’analyser son envirronement et déduire un nouveau chemin.

      Pour donner un argument supplémentaire je renverrai également vers un autre algortihme (mais qui n’est pas de logique floue) issus des jeux : le A* qui à donné naissance au D* en robotique d’ailleurs.

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.