Pour le moment je vais donc laisser de coté mes fonctions d'asservissement pour me lancer dans la logique flou et la je tombe sur un magnifique article écrit par, surprise, Black templar tadadadada.
héhé à croire que tu es abonné XD
Tu as aussi la théorie sur les systèmes flous ici :
http://www.ferdinandpiette.com/blog/2011/08/exemple-de-systeme-flou-un-planificateur-de-trajectoire/trêve de plaisanterie, j'ai énormément de mal a interpréter en code les explication de ces articles, j'arrive sans gros problèmes a transformer les valeurs de distances en pourcentage de mes trois capteur et j'obtient donc 6 variables distances mais la ou j'ais du mal c'est a comprendre comment on passe de cette étape a la suivante c'est à dire transformer ces 6 valeurs en vitesses pour mes deux roues.
Bon, pour avoir un système flou, on doit avoir 3 étapes.
La première transforme une donnée numérique en donnée "linguistique". C'est ce que tu as réussi à faire en transformant tes valeurs de distances. Normalement, tu devrais avoir en résultat, par exemple distance = 1,2 mètre => distance = 75% proche et 25% loin
La seconde étape va te permettre d'établir des relations "logique" entre tes variables linguistiques obtenue à la première étape et les variables linguistiques de sortie.Ici, les relations sont appelés "règles d'inférences". Elles sont déterminé uniquement grâce au savoir humain.
Par exemple, on pourrait avoir une règle qui dit : "si la distance est loin, alors accélère fortement" ou alors une autre qui dit "si la distance gauche est proche et la distance avant est proche, alors tourne à droite fortement"
Une fois que tu as ces règles, il va falloir que tu choisisses les opérateurs mathématiques qui vont remplacer les conjonction ET, OU, etc. Dans l'exemple, "si la distance gauche est proche et la distance avant est proche, alors tourne à droite fortement", si tu prend l'opérateur min() pour l'opération ET et que la distance gauche est proche à 80% et que la distance avant est proche à 50%, tu devras tourner à droite de min(80%, 50%), soit de 50%
Tu fais la même chose pour chacune des règles. Tu obtiens ainsi plein de valeurs différentes pour les valeurs de vitesse de tes moteurs.
Par exemple :
- vitesse_gauche_grande : 50%
- vitesse_gauche_grande : 70%
- vitesse_gauche_grande : 80%
- vitesse_gauche_grande : 60%
- vitesse_gauche_petite : 30%
- vitesse_gauche_petite : 20%
- etc. pour la vitesse droite
Là, il va falloir n'avoir qu'une seul et unique valeur pour chaque variable linguistique, c'est à dire, un seul pourcentage pour vitesse_gauche_grande, un seul pourcentage pour vitesse_gauche_petite, etc.
Pour cela, on applique l'opérateur OU.
- vitesse_gauche_grande_final = vitesse_gauche_grande_1 OU vitesse_gauche_grande_2 OU vitesse_gauche_grande_3 OU vitesse_gauche_grande_4
- vitesse_gauche_petite_final = vitesse_gauche_petite_1 OU vitesse_gauche_petite_2
Pareil, c'est à toi de définir l'opération mathématique qui se cache derrière le OU. Je prend par exemple l'opération max() (pour faire simple), on a donc :
- vitesse_gauche_grande_final = max(50%, 70%, 80%, 60%) = 80%
- vitesse_gauche_petite_final = max(20%, 30%) = 30%
La dernière étape va te permettre de transformer les variables linguistiques de sorties en données numériquesIci, il y a plusieurs méthodes. Dans l'article, j'ai présenté la méthode du barycentre (ou méthode des moyennes pondérées).
Je considère que la vitesse est grande si elle est à 100% et qu'elle est petite si elle est à 0%.
J'ai donc vitesse = (vitesse_gauche_grande_final*1 + vitesse_gauche_petite_final*0)/(vitesse_gauche_grande_final + vitesse_gauche_petite_final) = 80/110 = 72%
La commande de mon moteur gauche sera de 72%
Pour la logique flou, il faut bien avoir compris à quoi servent chacune des étapes.
La première transforme des données numériques en données "qualitative" (le pieton qui traverse est à 6,23323 mètre => le pieton qui traverse est proche, mais pas trop (proche à 80%)), la seconde permet de manipuler les données qualitatives comme le ferait un humain dans la vrai vie (le piéton qui traverse est proche ! Freine !!!) et la troisième permet de transformer les données "qualitatives" de sorties en données numériques (Freine !!! => Appui sur le frein avec une pression de 12 Newtons)
Voila voila ! C'est vraiment une méthode ad-hoc, basée exclusivement sur l'expertise humaine. En gros, avec la logique floue, TOUT est entièrement paramétrable : la forme des fonctions d'appartenances, le nombre de variables linguistiques, le "niveau de détail" des règles d'inférences, le choix de la méthode de défuzification (dernière étape), le choix des différents opérateur (OU, ET, NON, etc.)
Dans le cas de la planification de trajectoire, ça marche plutôt bien. Pour l'avoir expérimenté, ça marchait même très bien pour éviter les obstacles

++
Black Templar