Logique floue
Index de l'article
Eviter des obstacles en logique floue
Page #
Page #
Page #
Toutes les pages
La logique floue permet de résoudre des situations complexes avec peu de règles. ImageAinsi le problème de l'évitement d'obstacles peut être résolu en posant quelques règles simples. Il faut pour cela correctement identifier clairement le problème.  Comme un exemple vaut mieux qu'un long discours, nous allons voir comment un robot mobile simple peut éviter les obstacles disposés dans une pièce.

 

Poser le problème

Il s'agit ici d'éviter la collision du robot avec les obstacles présents dans l'environnement. On ne se soucie pas de la direction que prend le robot pour éviter l’obstacle ni de la mémorisation des obstacles rencontrés. Pas de construction de carte, pas de navigation vers un but dans le comportement d'évitement d'obstacles. Par contre, dans de futurs articles, nous verrons comment on peut utiliser le travail sur ce "comportement" pour l'intégrer dans une architecture plus complexe intégrant d'autres comportements.

La définiton d'un problème en logique floue se décompose en trois parties principales :

  • Définition des variables : quelles sont les entrées, les sorties disponibles ET pertinentes,
  • Partitionnement des domaines de définitions de ces variables, on crée alors des sous-ensembles flous (obstacle près, très prés ou éloignéWink,
  • Définition des règles qui vont donner un comportement à suivre pour chacune des situations. 

 

 

Définition des variables 

Le problème de l'évitement d'obstacles doit forcément s'appuyer sur des capteurs donnant des renseignements sur l'environnement. Nous utiliserons ici des capteurs à ultrasons. Trois capteurs nous permettent de relever les distances des obstacles situés dans les zone droite, gauche et devant.

Image

Nos règles possèderons donc trois variables d'entrées. Voyons maintenant les variables de sorties :

 

Pour déplacer le robot, on fournit au robot une valeur d'angle et une valeur de distance. Dans mon cas, je ne peux coupler les deux, on doit effectuer les actions successivement. Je choisis d'abord de tourner puis d'avancer. On peut noter que cette notion d'ordre dans lequel on effectue les actions pourrait faire partie des variables de sortie des règles.

La variable d'angle est donnée en degrés, en valeur négative pour tourner à gauche, et positive pour tourner à droite. La distance est donnée en centimètres, positive pour avancer et négative pour reculer.

Image

 

Maintenant que nous avons ciblé les variables pertinentes pour notre problème, nous allons décider des ensembles de définition des variables. 

 

 

Partitionner les domaines variables


Ensuite, partitionnons ces variables : les variables de gauche et de droite seront identiques (le robot n'est pas droitier ni gaucher et possède donc une symétrie exacte Smile ). On peut noter que de part cette symétrie, beaucoup de systèmes à base de logique floue tirent partie de cette symétrie en divisant le problème en deux et en ne gérant par exemple que l'évitement d'un obstacle à droite.

Image
Variables droite et gauche

Par contre, on peut très bien choisir un découpage différent pour la variable devant.

Voici le donc le partitionnement proposé : 

Image
Variable devant
 

 

 

Ensuite nous devons partitionner les variables de sorties angle et distance.  La variable angle va être la première à être utilisée et va permettre de donner au robot la future direction de navigation.  Pour ne pas donner trop de variations dans le mouvement du robot (aller et retour  sur un même axe) le domaine de définition de la variable angle sera :  90 à -90.  Plus l'angle sera faible plus nous aurons besoin d'être précis, plus l'angle sera grand  plus de sous ensemble sera grand :

 

Image
Variable angle

 

Il reste enfin le partitionnement de la variable distance. Comme il exclu de faire avancer d'un seul coup le robot à plus de 20cm, nous limiterons le domaine de définition de -10 à 20 cm.

Image
 
 Voila, il ne nous reste donc plus qu'à combiner ces variables dans un ensemble de règles.
 

 

Définir l'ensemble des règles

Maintenant que chacune des variables et que le partitionnement de celle-ci est pret, la définition va faire correspondre les entrées et les sorties. Pour cela il faut s'assurer que chaque sous ensemble de chacunes des variables et utilisé au moins une fois. Si une situation correspondant à des "inputs" qui ne sont utilisés par aucune des règles, alors le programme générera une erreur empechant l'avancement du robot au mieux, ou au pire, lui renverra des valeurs éronnées !.

 

Règle 1 : 

 Devant est "loin"

 Gauche est "moyen or loin"

 Droite est "moyen or loin"

 angleNavigue est  "A"

 distanceNavigue est "moyen"

 

Règle 2 : 

 Devant est "moyen or loin"

 Gauche est "moyen or loin"

 Droite est "pres"

 angleNavigue est  "GS"

 distanceNavigue est "moyen"

 

Règle 3 : 

 Devant est "moyen or loin"

 Gauche est "pres"

 Droite est "moyen or loin"

 angleNavigue est  "DS"

 distanceNavigue est "moyen"

 

Règle 4

 Devant est "moyen"

 Gauche est "pres or moyen"

 Droite est "moyen or loin"

 angleNavigue est  "DM"

 distanceNavigue est "stop"

 

Règle 5 : 

 Devant est "moyen"

 Gauche est "moyen or loin"

 Droite est "pres or moyen"

 angleNavigue est  "GM"

 distanceNavigue est "stop"

 

Règle 6 : 

 Devant est "pres"

 Gauche est "pres or moyen"

 Droite est "pres or moyen"

 angleNavigue est  "A"

 distanceNavigue est "recule"

 

Règle 7 : 

 Devant est "pres"

 Gauche est "pres or moyen"

 Droite est "pres or moyen"

 angleNavigue est  "A"

 distanceNavigue est "recule"

 

Règle 8 : 

 Devant est "pres"

 Gauche est "loin or moyen"

 Droite est "pres"

 angleNavigue est  "GG"

 distanceNavigue est "recule"

 

Règle 9 : 

 Devant est "pres"

 Gauche est "pres"

 Droite est "loin or moyen"

 angleNavigue est  "DG"

 distanceNavigue est "recule"

 

 

Conclusion

La logique floue apporte donc en quelques règles une solution efficace à un problème complexe. Pour cela il est nécessaire de bien connaître le problème et les contraintes (capteurs, moteurs). Les règles doivent ensuite être définies pour couvrir l’ensemble des situations que l’on peut rencontrer. Nous avons vu en exemple cette résolution très simple du problème de l’évitement d’obstacles, qui certes n’est sûrement pas optimale mais largement suffisante pour parer efficacement à la plupart des situations rencontrées.

Une fois le comportement d ‘évitement d’obstacle bien définit et validé, il va être intéressant de l’enrichir d’autres comportements afin d’enfin pouvoir parler de robot intelligent, et pas seulement réactif. Cela fera l’objet d’un prochain tutorial.

 

Quelques liens utils

 

A propos de travaux sur l'"obstacle avoidance by fuzzy logic" :

Tous ces travaux traitent du même problème vu sous des angles de résolution différents. Très interessant et à lire avant de se lancer dans sa propre résolution du problème. 

 

       KOREN WARD, ALEXANDER ZELINSKY
Pointeurs sur la logique floue :
avec Eric Brasseur 

 {jos_ri}