Ich habe zuvor die Ziegler-Methode verwendet, um die Parameter meines PID-Reglers so einzustellen, dass die Position meines Roboters gesteuert wird. Ich habe dann Fuzzy-Logik zur Selbstoptimierung der Parameter implementiert. Ich habe zwei Eingänge zum Fuzzy-Logik-Controller; Einer ist der Positionsfehler und die Fehlerrate.
Ich weiß, dass mein Problem möglicherweise darin besteht, dass ich die Auswirkungen der einzelnen Parameter nicht sehr gut verstehe.
Das Problem ist, dass ich beim Einrichten der Fuzzy-Regeln verwirrt bin. Wann muss ich hohe und niedrige Werte für Kp, Kd und Ki verwenden, um die beste Abstimmung zu erzielen? Muss Kp sehr niedrig sein, wenn der Fehler fast Null ist (daher befindet sich der Roboter an der gewünschten Position)? Die gleiche Frage gilt für alle drei Parameter.
Antworten:
In dem Artikel Controlling of Quadrotor UAV unter Verwendung eines Fuzzy-Systems zum Einstellen der PID-Verstärkungen im Schwebemodus von E. Abbasi erklärt MJ Mahjoob , wie PID-Verstärkungen mit Fuzzy-Logik eingestellt werden. Sie können viele Artikel über Singleton-Tuning finden, aber dieser Artikel zeigt eine völlig unscharfe Kontrolle
Definieren Sie Fuzzifizierungsdiagramme für Ein- und Ausgänge. Definieren Sie Grenzen (Sie können auch die Form ändern) wie
name [min,peak,max]
very small [-1,-1,-0.6], small [-1,-0.6,0], medium [-0.6,0,0.6], big [0,0.6,1], very big [0.6,1,1]
Regeln erstellen wie
if **e** and/or **de** *fuzzyname* (small,big etc.) than KI is fuzzyname (small,big etc.)
Defuzzyfy das Ergebnis.
Sie können Tools wie matlab fuzzy toolbox oder python skfuzzy verwenden
Das Trinkgeldproblem kann als Fuzzy-PID verwendet werden. Ändern Sie einfach die Qualität als e und den Service als de. Zuletzt können Sie die Trinkgeldausgabe als KP / KI / KD ändern (es gibt ein Beispiel für das Trinkgeldproblem: Python Scikit Fuzzy - Fuzzy Control Systems: Das Trinkgeld Problem )
Hinweis 1: Fehlerbereiche sollten gut definiert sein, daher müssen Sie den Fehler protokollieren und den Fehler ändern. Die Grenzwerte müssen in Max- und Min-Werten dieser Werte liegen
Hinweis 2: Der Ausgabewertbereich liegt zwischen -1 und 1.
Ein Beispielcode für Fuzzy-PID in Python ist hier:
Fuzzy-Eingangsmitgliedschaftsfunktionen:
Fuzzy-Ausgabe Mitgliedschaftsfunktion:
Status: Im Statusdiagramm ist die gestrichelte Linie der Zielwert, die rote Linie die PID und die grüne Linie die Fuzzy-PID
Hier die acspid Klasse
quelle