Qu'est-ce que la Logique Floue (Fuzzy Logic) ?


La logique floue est une forme de logique multivaluée qui permet de traiter des concepts imprécis comme "un peu", "beaucoup" ou "environ", contrairement à la logique booléenne classique qui ne connaît que vrai ou faux.

Développée par Lotfi Zadeh en 1965, elle est particulièrement utile pour les systèmes de contrôle complexes où les entrées sont continues et imprécises, comme dans le cas des robots bipèdes.

Le savais-tu ?

La logique floue est largement utilisée dans les systèmes de contrôle industriels, les appareils électroménagers (comme les machines à laver "intelligentes") et même dans certains systèmes de freinage ABS.

Principe Général de la Logique Floue

Un système flou se compose de trois étapes principales : la fuzzification (transformation des entrées précises en degrés d'appartenance à des ensembles flous), l'inférence (application des règles floues) et la défuzzification (transformation du résultat flou en sortie précise).

$$\mu_A(x) : X \rightarrow [0,1]$$

Les règles floues prennent la forme "SI...ALORS..." et permettent d'exprimer une connaissance experte sous une forme compréhensible par la machine. Par exemple : "SI l'inclinaison est Forte ALORS augmente beaucoup le couple".

Comment appliquer la Logique Floue au robot bipède ?

Pour un robot bipède, la logique floue est idéale pour le contrôle de l'équilibre et de la marche, car elle peut gérer les multiples capteurs et actionneurs de manière robuste face aux incertitudes des mesures et aux perturbations externes.

Implémentation d'un contrôleur flou en Python (skfuzzy)
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl

# Variables d'entrée/sortie
inclinaison = ctrl.Antecedent(np.arange(-30, 31, 1), 'inclinaison')
vitesse_ang = ctrl.Antecedent(np.arange(-10, 11, 1), 'vitesse_angulaire')
couple = ctrl.Consequent(np.arange(-5, 6, 1), 'couple_moteur')

# Fonctions d'appartenance
names = ['neg_grande', 'neg_moyenne', 'nulle', 'pos_moyenne', 'pos_grande']
inclinaison.automf(names=names)
vitesse_ang.automf(names=names)
couple.automf(names=names)

# Règles floues
rule1 = ctrl.Rule(inclinaison['neg_grande'] & vitesse_ang['neg_moyenne'], couple['pos_grande'])
rule2 = ctrl.Rule(inclinaison['pos_moyenne'] & vitesse_ang['nulle'], couple['neg_moyenne'])
# ... autres règles

# Système de contrôle
systeme_controle = ctrl.ControlSystem([rule1, rule2])
simulation = ctrl.ControlSystemSimulation(systeme_controle)

# Exemple d'utilisation
simulation.input['inclinaison'] = -15  # degrés
simulation.input['vitesse_angulaire'] = -3  # degrés/s
simulation.compute()
print(simulation.output['couple_moteur'])

Dans quelle partie du code peut intervenir la Logique Floue ?

Contrôle de l'équilibre

Un contrôleur flou peut déterminer les corrections à apporter aux moteurs en fonction de l'inclinaison et de la vitesse angulaire du robot, exprimées en termes linguistiques comme "légèrement penché" ou "chutant rapidement".

Exemple pratique :

Le système évalue en temps réel l'angle d'inclinaison et sa dérivée pour ajuster le couple des moteurs des hanches et des chevilles selon des règles floues préétablies.

Objectif : Maintenir l'équilibre du robot dans diverses conditions avec une réponse robuste aux perturbations

Gestion de la marche

La logique floue peut coordonner le mouvement des jambes en fonction de la vitesse désirée, de l'état du terrain et de l'équilibre actuel, en ajustant dynamiquement la longueur et la fréquence des pas.

Objectif : Adapter la démarche du robot à différentes situations tout en conservant la stabilité

Détection et réaction aux obstacles

En combinant les données des capteurs de distance et d'inclinaison, un système flou peut décider de la meilleure réaction (ralentir, ajuster la trajectoire, s'arrêter) face à un obstacle imprévu.

Objectif : Permettre une navigation autonome et sûre dans des environnements complexes

Références

  • Zadeh, L. A. (1965). Fuzzy sets. Information and Control, 8(3), 338-353.
  • Passino, K. M., & Yurkovich, S. (1998). Fuzzy Control. Addison-Wesley.
  • Ross, T. J. (2010). Fuzzy Logic with Engineering Applications (3rd ed.). Wiley.
  • Lee, C. C. (1990). Fuzzy logic in control systems: fuzzy logic controller. IEEE Transactions on Systems, Man, and Cybernetics, 20(2), 404-418.