Forum: PC-Programmierung Regelung inverses Pendel mit C++


von Daniel L. (dannynrw)


Lesenswert?

Hallo zusammen,

wir haben in einer kleinen Gruppe die Aufgabe, ein inverses Pendel nach 
dem Aufschwingvorgang in der senkrechten Position zu stabilisieren. Das 
inverse Pendel ist frei drehbar an einer Linearachse befestigt und soll 
nur mit Hilfe der Fahrbewegungen der Linearachse zunächst aufgeschwungen 
und dann auf 12 Uhr stabilisiert werden. Der Pendelwinkel kann über 
einen Inkrementalgeber eingelesen werden. Der Aufschwingvorgang selbst 
funktioniert schon gut und ist mit Hilfe einer Sinusfunktion umgesetzt, 
sodass sich das Pendel langsam und definiert aufschwingt.

Unser Problem ist jedoch die Stabilisierung in der Senkrechten (bei uns 
Pi bzw. -Pi). Nachdem wir den Ansatz über einen LQ-Regler verworfen 
hatten, gab uns unser Dozent den Tipp, einen nichtlinearen P-Regler zu 
verwenden. Bislang sind aber alle Versuche der Stabilisierung 
gescheitert. Wir versuchen dies zunächst folgendermaßen: Wir halten das 
Pendel auf 12 Uhr fest und lassen dies los, um so den Regler einstellen 
zu können. Das "Abfangen" wäre dann der nächste Schritt. Unseren Regler 
haben wir wie folgt implementiert:

 X_Ist = this->Drehgeber->GetCounterValue(); //Istwert vom Drehgeber 
(0=6 Uhr ; Pi/-Pi=12 Uhr)

 e_Abw = W_Soll - X_Ist; //Regelabweichung

 efkt = fabs_(e_Abw); //Absolutwert der Regelabweichung

 Y_Stell =  pow_(Kp *efkt, exp_x)*(e_Abw/efkt) * -1;  //Stellwert Regler


Die Pow_-Funktion ist dabei unsere nichtlineare Funktion x^n, "x" 
(Kp*efkt) ist dabei die Regelabweichung multipliziert mit dem 
Verstärkungsfaktor Kp und "n" (exp_x) ein fester Wert, mit dem wir 
herumexperimentiert haben. Der Ausdruck nach der ersten Klammer bestimmt 
alleine die Fahrtrichtung des Schlittens.

Für Tipps und Vorschläge für die Lösung unseres Problems wäre ich sehr 
dankbar.

Viele Grüße
Daniel

: Bearbeitet durch User
von Christian M. (christian_m280)


Lesenswert?

Was hat das ++ in einer Regelung zu suchen? Und auf einem PeeCee wird 
das nie und nimmer funktionieren, oder was für ein RT-OS verwendet Ihr?

Gruss Chregu

von Einer (Gast)


Lesenswert?

Daniel L. schrieb:
> (0=6 Uhr ; Pi/-Pi=12 Uhr)

Da würde ich mir mal ein paar Gedanken dazu machen...

von Dieter H. (kyblord)


Lesenswert?

Also das ist schon arg komisch, dass ihr das nicht stabilisiert bekommt.
Die obere Ruhelage ist instabil. Da linearisiert man dann eben die 
Modellgleichungen um den Arbeitspunkt (obere Ruhelage) und entwirft dann 
einen linearen Regler.
Den Regler kann man in der Wurzelortskurve oder anhand des offenen 
Kreises entwerfen. Ich glaube bei mir im Praktikum war es damals ein 
PI-Regler.
Zeig mal das Modell.
Was habt ihr für einen Beobachter verwendet für den LQ-Regler?

von Daniel L. (dannynrw)


Lesenswert?

Einer schrieb:
> Daniel L. schrieb:
>> (0=6 Uhr ; Pi/-Pi=12 Uhr)
>
> Da würde ich mir mal ein paar Gedanken dazu machen...

Worauf möchtest Du konkret hinaus? Das einzige, was mir gerade dazu 
einfallen würde, wäre die Regelabweichung, die durch die Skalierung von 
2Pi auf den gesamten Kreisumfang selbst bei größeren Winkeln nie 
besonders groß ist und der Regler dementsprechend spät reagiert - nur 
kann man darauf ja über die Verstärkung Kp Einfluss nehmen. Den Sollwert 
setzen wir abhängig davon, in welche Richtung das Pendel den Höchstpunkt 
überschreitet entweder auf Pi oder -Pi (was aber noch keine Rolle 
spielt, solange wir versuchen, das Pendel einfach zu stabilisieren, 
nachdem wir dieses oben loslassen).
Ein anderer Punkt wäre natürlich: Solange die Abweichung <1 ist, wird 
der Stellwert durch die Potenz verkleinert, ist er jedoch >1, wächst der 
Stellwert je nach eingestellter Potenz rasant an.

@christian_m280: Wir machen das Ganze mit einer Beckhoff-Steuerung sowie 
TwinCat und Visual Studio. Das ermöglicht die Isolierung von CPU-Cores 
für unsere Regelaufgabe.

@kyblord: Bei dem LQ-Regler sind wir leider schon daran gescheitert, 
diesen in Code umzusetzen - der Ansatz hierfür fehlt schlichtweg. Was 
den oben angesprochenen nichtlinearen P-Regler angeht, so haben wir 
diesen wie oben gezeigt implementiert und versucht, uns über Variation 
von "Kp" und "n" an gute Werte heranzutasten. Aber entweder war die 
Reaktion des Reglers zu langsam oder aber der Schlitten fing an zu 
rattern. Bisher also alles sehr bescheiden, leider.

von Pandur S. (jetztnicht)


Lesenswert?

Naja. Den Fehler nichtlinear auf das Stellglied umzusetzen ergibt ja 
noch viele Moeglichkeiten. Ich wuerd mal beginnen die systematisch 
durchzuprobieren, allerdings mit dem Messen der Antwort dazu. Wie 
varhalten sich Fehler und Stellgroesse ueber die Zeit fuer die 
verschiedenene Funktionen mit verschiedenen Parametern.

von udok (Gast)


Lesenswert?

Da könnt ihr mal fragen, wie man es richtig macht:

https://www.youtube.com/watch?v=ew-yP6uZbrU

von udok (Gast)


Lesenswert?

Hier würde ich nicht fragen.  Die schaffen es nicht mal,
die Ruheposition ruhig zu halten, aber besser als nix.

https://www.youtube.com/watch?v=fTK37EZzruk

von udok (Gast)


Lesenswert?

Hier ein Dreifachpendel im Dunkeln:

https://www.youtube.com/watch?v=FFW52FuUODQ

von N. M. (mani)


Lesenswert?

udok schrieb:
> Hier würde ich nicht fragen.  Die schaffen es nicht mal,
> die Ruheposition ruhig zu halten, aber besser als nix.

Du meinst das knattern oder das zyklische Verfahren um x cm? Zweites 
könnte auch ein gewolltes positionieren sein.

von udok (Gast)


Lesenswert?

N. M. schrieb:
>> Hier würde ich nicht fragen.  Die schaffen es nicht mal,
>> die Ruheposition ruhig zu halten, aber besser als nix.
>
> Du meinst das knattern oder das zyklische Verfahren um x cm? Zweites
> könnte auch ein gewolltes positionieren sein.

Ja.  Die Ruheposition sollte auch immer in die Mitte fahren,
sonst kann das System nicht mehr auskorrigieren.
Aber die Hardware ist ein paar Klassen schlechter als die aus dem ersten
Video.

von Dieter H. (kyblord)


Lesenswert?

Rumprobieren kannst du noch lange. Ohne Modell kann man keinen 
vernünftigen Regler entwerfen. Zeig mal ein Bild vom Aufbau. Ich nehme 
an es ist ein Stab gelenkig gelagert auf einem Linearschlitten der über 
einen Riemen/Kugelgewindetrieb von einem Motor angetrieben wird?

von udok (Gast)


Lesenswert?

Wenn das invertierte Pendel zu langweilig wird:

https://www.youtube.com/watch?v=XxFZ-VStApo

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.