Forum: Digitale Signalverarbeitung / DSP / Machine Learning Zustands-Rückführung mit Beobachter


von Philipp G. (flashmaster)


Lesenswert?

Hallo zusammen,

Ich bin dabei eine adaptive Regelung aufzubauen.
Es handelt sich dabei um einen hydraulischen Arm, dessen Modell durch 
ein Parameter-Schätzverfahren rekursiv abgebildet wird. Diese 
Modellbildung läuft parallel als Beobachter zu dem realen System um den 
Regler adaptiv anzupassen. Als Regler wollte ich eine 
Zustands-Rückführung (State-Feedback) implementieren, jedoch stoss ich 
jetzt an mein Problem.
Der Ausgang des Reglers wird ja additiv mit dem Eingang des Systems 
verknüpft. Wenn ich jetzt doch aber meine Sollgröße vorne in mein System 
gebe, erhalte ich ja am Ausgang die Momentan-Größe. Wo aber erhalte ich 
meine "Reglerausgangsgröße" sprich den Wert mit dem ich meine 
Stelleinrichtung betreibe?
Laut einiger Literatur erhalte ich durch diese Zustandsrückführung ja 
schon einen geschlossenen Regelkreis. Wo ist mein Gedankenfehler?

MfG Flashmaster

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin Phillip,

du machst das wie beim klassischen Regler. In deine Strecke gehen n 
Eingänge u und das sind deine Stellgrößen. Also den Vektor nach der 
Summation/Subtraktion(jenach Literatur) von K*x und der durch den 
Sollwert vorgegebenen Werte für u durch N*w. Kurz gesagt das was mit B 
im Model multipliziert wird.

Stellgrößen sind hier
           |
           V
w---N---+----B--+---1/s-----------------
        |       |            |
        |        ----A-------|
        |                    |
         ------------K-------

Model ohne Beobachter

MfG

Tec

von Uwe (Gast)


Lesenswert?

> Wo aber erhalte ich meine "Reglerausgangsgröße" sprich den Wert mit dem ich
> meine Stelleinrichtung betreibe?
Am Ausgang des Reglers.

> Der Ausgang des Reglers wird ja additiv mit dem Eingang des Systems
> verknüpft.
Nö. Der gemessene Wert deines zu regelden etwas wird zurückgekoppelt.

von Philipp G. (flashmaster)


Lesenswert?

Danke erstmal für die Antworten...

zu Uwe:
der Ausgang des Reglers kann doch nicht die Reglerausgangsgröße sein, 
allein schon aus der Sicht der physikalische Einheiten. Wenn meine 
Stelleinrichtung einen PWM-Wert zum Beispiel erwartet, jedoch aber am 
Summationspunkt die Einheit der Sollgröße anliegt [m] ist das doch ein 
Konflikt oder?

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin Philip,

Du hast glaube ich eun grundsätzliches Problem. Deine Sollgröße muss ja 
erst mal in die Systemeingänge umgerechnet werden, Siehe meine Zeichung, 
mittels Vorfiltermatrix N. Und die denn deine Sollgröße hat ja die 
Einheit eines Ausgangs. Beschreib mal dein System genauer.

Nur als Beispiel, Drehzahlregelung eines E-Motors,

Eingang ist Spannung U, Zustände sind Drehmoment T und Drehzahl Y, 
Ausgang ist die Drehzahl.

Wenn ich jetzt die Drehzahl regeln will. Gebe ich W=1000rpm vor , rechne 
N*W = 0.100V/rpm*1000rpm = 100V Hinzu kommt die Regelabweichung als 
K*X(Zustandsvektor) also U = K*X + 100V = ~110V Das ist deine Stellgröße
Das was in B reingeht, also ins System.

W---N---+-U--B--+---1/s------X----------Y
        |       |            |
        |        ----A-------|
        |                    |
         ------------K-------

MfG

Tec

von Uwe (Gast)


Lesenswert?

>Wenn meine Stelleinrichtung einen PWM-Wert zum Beispiel erwartet,jedoch >aber am 
Summationspunkt die Einheit der Sollgröße anliegt [m] ist das doch >ein Konflikt 
oder?
Das umrechnen Mußt du schon machen. z.B. Du gibst vorne den Soll Druck 
ins System. Im System ist nen Motor dessen Drehzahl geregelt wird. Die 
Drehzahl hat nichts mit Drcuk zu tun. Das Messgerät gibt was weiß aus 
PWM, Stromquelle, Spannungquelle, mechanische verformung. Das 
Zurückführen mußt du dir überlegen. Und das Skalieren natürlich auch.

von Philipp G. (flashmaster)


Lesenswert?

Danke für die Erläuterungen,

Ok, es kommt so langsam Licht ins Dunkle. Ich dachte bis jetzt dieses 
N-Glied am Eingang sei am Schluss zur Kompensation für die stationäre 
Genauigkeit.
Also nochmal zu meinem System:
Ich habe einen hydraulischen Arm dessen Ausgangsgröße die Entfernung zum 
Boden ist und Eingangsgröße ist eine PWM [0 bis 1 bei mir] für das 
anzusteuernde Ventil.
Das Umrechnen verwirrt mich jetzt aber, da ich nicht sagen kann bei 0,5 
sprich 50% PWM fährt der Arm auf 2m, sondern der würde ja mit einer 
bestimmten Geschwindigkeit gegen den Endpunkt fahren.

Beim Motor-Beispiel von euch mag das einfacher sein, da der Motor ja bei 
einer bestimmten Spannung sich selbst auf eine bestimmte Drehzahl 
einstellen wird.

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin,

die Dimensionierung ist bei solch einem System mit I-Verhalten, 
analytisch schwer zu machen. Für N gibt es eine Formel ähnlich wie für 
K, ich hab sie leider nicht parat gerade. Denn du musst das 
Zusammenspiel von K und N betrachten. Den durch K ändert sich ja die 
Systemverstärkung. Falls du das Analytisch bestimmen willst musst du den 
stationären Fall im Sollwert betrachten. Also wie sehen die Eingänge aus 
für 2m konstante Auslenkung, mit deinem K im System.
Wobei Rechnen im Zustandsraum ziel führender ist.

MfG

Tec

@edit: analytisch ist das Motorbeispiel einfacher(deswegen hab ichs 
gewählt) aber Regelungstechnisch ist dein System besser. Was du auch 
machen kannst ist eine 2. volle Rückführung die ist dann einfacher zu 
verstehen, Nennt sich dan PI-Z-Regeler.

W---+---N---+--B--+-----1/s----------Y
    |       |     |              |
    |       |      -----A--------|
    |        -----------K--------|
     ----------------------------

Mit diesem System erreichst du volle stationäre Genauigkeit und das 
Zusammenspiel von N und K wird deutlicher hoffe ich. So würde ich den 
System regeln auf den ersten Blick.


MfG

Tec

von Philipp G. (flashmaster)


Angehängte Dateien:

Lesenswert?

Schönen guten Morgen,

Ich bin bezüglich der Berechnung des PreCompensators (das 
Eingangs-N-Glied) fündig geworden. Ich will das erstmal ohne die 
zusätzliche PI-Kaskade ausprobieren, oder ist das gleich zum Scheitern 
verurteilt?
Wie du schon sagtest beinhaltet die Berechnung auch die Matrix des 
Zustandsregler im Rückführzweig.
Laut Recherchen wird es folgendermaßen berechnet: N = 
inv(-C*inv(A-B*F)*B) , wobei A,B und C die Matrizzen des Beobachters im 
Zustandsraum sind und F die Reglermatrix aus dem Feedback-Pfad.

Leider erhalte ich nicht so zufriedenstellende Ergebnisse. Ich habe die 
Regelung jetzt einmal Schritt für Schritt in Matlab aufgebaut und hier 
angehängt. Wer Interesse hat kann sich die ja mal anschauen. Falls einer 
Probleme oder Fehler sieht wäre es schön wenn er sich kurz melden würde 
;)

Danke schonmal

MfG Philipp

P.S.: Für diejenigen die sich das m-file mal anschauen, ich weiss das 
die Pole noch nicht optimal ausgewählt sind. Könnte/Sollte aber dennoch 
halbwegs funktionieren.

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin Phillip,

ohne mir dein M-File genau angesehen zuhaben, solltest du aufgrund des 
I-Verhaltens deiner Strecke einen Soll, Ist vergleich machen und den als 
Eingang benutzen, Also Ausgang auf Eingang zurück führen dann sollte das 
laufen.

MfG

Tec

von Philipp G. (flashmaster)


Lesenswert?

Hab ich direkt mal ausprobiert und in meiner for-Schleife zu Beginn die 
Zeile 'r(i) = r(i) - y(i-1)' ergänzt.
Sprich, ich habe den "alten" Ausgang zum aktuellen Eingang rückgeführt, 
wie du sagtest. Dennoch habe ich kein zufriedenstellendes Ergebnis.

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Moin Philip,

ich hab mir dein M-File jetzt mal angesehen. Habs aber in Matlab noch 
nicht aus probiert. War erstmal ungewohnt für mich da ich das mit 
Simulink gemacht hätte.

Vllt solltest du r(i) nicht über schreiben sondern eine Zwischen Größe 
einführen.

Was ich mich aber frage was hast du denn für ein unbefriedigendes 
Regelergebnis. Braucht dein Regler vllt mehr iterationen um sich 
einzustellen?

MfG

Tec

von Philipp G. (flashmaster)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

r(i) überschreibe ich auch schon nicht mehr. Da du mir zu einer weiteren 
Kaskade geraten hattest, habe ich den Error e(i)=r(i)-y(i-1) ins Leben 
gerufen. Dieser geht nun weiter in das Vor-Regelglied (N), welches ich 
mit der oben genannten Formel berechnet habe.
Durch diese weitere Rückführung habe nun aber das Problem, dass sich der 
Error (e) dermaßen stark aufsummiert, dass irgendwann Matlab streikt 
(>1e+164).
Im Anhang habe ich mal die aktualisierte Version angefügt. Vielleicht 
sticht dir ja noch ein Fehler ins Auge.

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Das sich e(i) aufsummiert deutet auf einen vorzeichen Fehler hin. Der 
Fehler vergrößert den Fehler anstelle ihn zu kompensieren. Negiere Test 
weise e und siehs dir an. Falls es das nicht ist muss ein Fehler in 
deinem Code sein. Den e(i) kann bei konstantem Sollwert und konstantem 
Ausgang nicht wachsen. Es deutet alles auf eine negative Strecken 
Verstärkung hin.

MfG

Tec

von Philipp G. (flashmaster)


Lesenswert?

Ja, das sehe ich auch so, konnte den Fehler bis jetzt dennoch nicht 
finden.

Bei Recherchen bin gerade über ein Beispiel-Code von Matlab gestolpert, 
der zwar ohne Beobachter läuft aber sogar mit meinen Streckenparametern.
http://www.mathworks.com/matlabcentral/fileexchange/29795-state-feedback-control
Diesen Versuche ich mal zu erweitern mit meinem Recursiven Beobachter. 
Vielleicht ist ja ein grundlegender Fehler in meinem Code, den ich 
ständig überlese ;)

Wenn es geklappt hat, meld ich mich direkt.

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

Ok bin gespannt.

von Philipp G. (flashmaster)


Lesenswert?

Guten Morgen zusammen,

Ich bin zu dem Entschluss gekommen, dass ich mit einem Zustandsregler 
nicht weiterkomme.
Sobald ich bestimmte Pole vorgebe, die für mich sinnig erscheinen, rennt 
mein Matlab Programm in einen Error, da einige Matrizzen singulär 
werden. Der Grund liegt in der Wurzelortskurve, wenn man die sich mal 
anschaut. Der Precompensator am Eingang verstärkt mein System soweit, 
sodass das System instabil wird. Das sieht man in der Wurzelortskurve am 
Gain der sich ausserhalb des Einheitskreises befindet (im diskreten Fall 
-> Instabilität)...

Bin nun verzweifelt nach der Suche nach einer anderes Lösung einen 
Regler adaptiv anzupassen. Hat jemand Erfahrung mit adaptiven Reglern 
(Self-Tuning PID oÄ)? Am liebsten auch welche die "mal eben" in Matlab 
zu implementieren gehen ;)

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

moin,

da kann ich dir leider auch nicht mehr weiterhelfen, such mal nach Mrac 
Model reference adaptive control.

MfG

Tec

von Philipp G. (flashmaster)


Lesenswert?

Moin,

Ja das mit dem MRAC hab ich schon gesehen. Ist auch sehr interessant, 
aber ich wollte gerne einen Regler den man online anpassen kann, um 
meinen rekursiven Algorithmus zu benutzen.
Bei MRAC gibst du ja eher einen Soll-Kurvenverlauf vor, und deine 
Strecke soll diesen nachbilden. Da werden ja "nur" die Ausgänge von 
deinem Modell und der original STrecke miteinander verglichen ;)

MfG Philipp

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

MOin,

es gibt ja auch die Variante mit der Fitnessfunktion. Also normaler PID 
Algo anstrecke, und du bewertest das Ausregelverhalten und passt die 
Reglerparameter an. Habe ich aber keine Erfahrung mit.

MfG

Tec

von Purzel (Gast)


Lesenswert?

Zustandsregler bedeutet ein generalisierter generischer PID, mit einer 
etwas groesseren Matrix. Beobachter bedeutet, die Messgroessen, die man 
nicht hat, aber haben moechte werden simuliert.
Da sollte man sich etwas vom Balast befreien.

Adaptive Regler ist was fuer Ingenieure, die gegen die Pension gehen und 
noch ein paar Jahre ohne Output zu verbraten haben.
Juengere Ingenieure sollten etwas mehr ueberlegen und eine Funktion 
finden. Die moderne Elektronik erlaubt ja auch sequentiel einen 
Kalibrierzyklus einzufuegen, wobei man eine Groesse bestimmen kann, die 
ersten variabel und zweitens abhaengig von anderem Zeugs ist.

von Philipp G. (flashmaster)


Lesenswert?

Guten Morgen zusammen,

Da hast du schon Recht, dass das Thema vielleicht ein wenig weit 
ausgeholt ist. Dennoch muss es ja funktionieren.
Ich hab ja nicht gesagt, dass ich dieses Verfahren in einer 
industriellen Anwendung implementieren möchte die man auch einfach mit 
einem PID Regler bewältigen könnte. Ok, die m-file sieht zwar im Moment 
so aus, aber dort wollte ich lediglich eine Simulationsumgebung 
schaffen. Die dort verwendete Übertragungsfunktion ist alles andere als 
konstant.
Ausserdem ist ja auch nicht weniger als der von dir beschriebene 
Kalibrierzyklus ;)

MfG Philipp

von Detlef _. (detlef_a)


Lesenswert?

>>>>
Adaptive Regler ist was fuer Ingenieure, die gegen die Pension gehen und
noch ein paar Jahre ohne Output zu verbraten haben.
<<<<

Wieder mal gelungene Symbiose von Arroganz und Ignoranz.
http://www.youtube.com/watch?v=5KT2BJzAwbU

Cheers
Detlef

von UR-Schmitt (Gast)


Lesenswert?

Purzel schrieb:
> Adaptive Regler ist was fuer Ingenieure, die gegen die Pension gehen und
> noch ein paar Jahre ohne Output zu verbraten haben.

Du benutzt wohl statt dessen PID Regler? Vor allem bei stark 
nichtlinearen Systemen, oder?
Vieleicht solltest du erst mal 2 Jahre Literatur dazu wälzen ehe du eine 
solch <Selbstzensur, ersetzt durch: "ärmliche"> Aussage machst :-P

Ich kann dir den alten Isermann empfehlen.

von Philipp G. (flashmaster)


Lesenswert?

Nur so als Zwischeninfo, ich habe die Regelung jetzt hinbekommen. Ich 
werde den Code nur erst mal aufräumen müssen und verallgemeinern, dann 
stell ich den hier mal online.
Die Isermann-Bände habe ich vor mir liegen ;), die sind echt die Bibel 
für dynamische Systeme mit allem drum und dran .

Gruß Philipp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.