Forum: PC-Programmierung Wie PID Regler mit Begrenzung abhängiger Größe realisieren?


von Markus H. (cairol)


Lesenswert?

Was ich hier vorhabe ist einen PID Regler zu implementieren,
der bei einem Flugzeug (in einer PC Simulation) die gewünschte Höhe 
hält.
Der PID an sich ist nicht das Problem.
Das Problem ist folgendes:

Ich regle die Höhe über das Anstellen der Höhenruder.
D.h. die Höhe ist mein Sollwert/Führungsgröße und der Winkel des 
Höhenruders ist meine Stellgröße.
Aber der Antellwinkel des Höhenruders hat ja leider noch eine andere 
Wirkung als nur die Höhe zu ändern: Das Flugzeug hebt oder senkt dabei 
die Nase, was bei einer größeren Regelabweichung durch den über eine 
Zeit anliegenden Anstellwinkel irgendwann zum Ströhmungsabriss oder dem 
gegenteiligen Effekt führen kann.
Das heißt ich muss jetzt also den maximalen Pitch relativ zum Horizont 
begrenzen den das Flugzeug einnehmen darf.

Und da ist der Knackpunkt:
Der absolute Pitch ist ja kein Teil der Regeltrecke.
Es ist nur eine Abhängigkeit die meinen Flieger in Schwierigkeiten 
bringen kann, wenn sie nicht betrachtet wird.
Was ich aktuell mache ist, bei Erreichen des von mir vorgegebenen 
Maximal-Pitches den Stellwert zu invertieren und um einen gewissen 
Faktor abzuschwächen.
Oder anders gesagt: Ich lasse den Flieger den Anstellwinkel an der 
Pitch-Grenze umdrehen, um wieder in den erlaubten Pitch Bereich zu 
kommen.
Nur hat das dann leider zur Folge, dass der Flieger zwar die Höhe 
einigermaßen hält,
dabei ammer ständig am "Nicken" ist. Nase hoch bis zur Begrenzung -> 
Nase runter bis zur Begrenzung.
Das führt dann zu großen Schwankungen in der Höhe um den Sollwert herum 
die ich bisher mit keiner Regler-Einstellung vermeiden oder vermindern 
konnte. Aber der Regler kann da ja auch nicht wirklich was dafür...

Wie implementiert man einen Regler, wenn man wie im o.g. Beispiel eine
abhängige äußere Größe beeinflusst, die nicht zum Regelkreis gehört?
Kann man dieses Pitch-"Fenster" auch in dem vorhandenen Regler oder ggf. 
einem eigenen Regler abbilden, so das alles korrekt zusammenspielt?
Wie sind da die Ansätze?

von Pandur S. (jetztnicht)


Lesenswert?

Du kannst vieles Rechnen, und auch etwas erhalten. Eine 
Fliegersimulation ist etwas komplzierter wie ein PID Regler... Ein PID 
tut nicht, weil das Problem sehr nichtlinear ist. Man kann nun fuer 
jeden Betriebspunkt die Parameter neu finden/suchen, oder ein besseres 
Modell rechnen.

von der mechatroniker (Gast)


Lesenswert?

Wenn du den Pitch so begrenzen kannst, hast du anscheinend schon einen 
zuverlässigen Sensor dafür.

Rein physikalisch ist es doch so, dass in der Regelstrecke der 
Höhenruderausschlag den Pitch bewirkt und dieser wieder die Flughöhe. 
Eigentlich ein guter Kandidat für eine Kaskadenregelung. Da kann man 
dann auf den Ausgang des Höhenreglers (der ja die Führungsgröße für den 
Pitchregler wird) noch einen Maximalwert aufzwingen.

Nur aufpassen, dass das nicht zum Windup für den Höhenregler führt 
(evtl. Logik nach dem Motto: Wenn Führungsgröße für den Pitchregler in 
der Begrenzung, darf der Höhenregler seinen I-Anteil nicht weiter 
erhöhen).

von Tommi (Gast)


Lesenswert?

Wie der Mechatroniker schon schrieb ist die Hoehenaenderung ja vom Pitch 
abhaengig und nicht (direkt) von der Stellung des Hoehenruders.
Stellung Hoehenruder proportional Pitchaenderung.
Pitch proportionanl Hoehenaenderung.

von Pandur S. (jetztnicht)


Lesenswert?

Nebenbei : wie wird der Pitch gemessen ? Aber nicht mit dem 
3D-Beschleunigungssensor ? So einfach ist es dann nicht.

von Markus H. (cairol)


Lesenswert?

Naja, die Simulation hat direkte Möglichkeiten den absoluten Pitch zu 
messen. Und noch jede Menge andere Parameter.
Da kann ich aus dem Vollen schöpfen.

Ich hab das jetzt erstmal so gemacht, dass ich den Regler sehr viel 
träger ausgelegt hab und die ziemlich grobschlächtige "Rücklenkung" an 
den Pitch-Limits ebenfalls experimentell nahe an das nötigen Minimum 
gefahren hab.
Somit macht der Flieger jetzt statt total nervösem hoch- und 
runter-bewegen eine ruhige Oszillation wie man sie bei einem 
austarierten Flieger ohne Eingriff immer ein bisschen hat.
"Phugoid" Effekt nennt Wikipedia das. (Nur das meiner etwas erzwungen 
ist.)
Allerdings ist das Fenster in dem er seine Höhe ändert immer noch recht 
groß.
Ca. +/- 50m sind es grade. Und das Teil ist kein Jumbo-Jet...
Ich würde am liebsten den Flieger komplett stabilisieren mit der Höhe,
so dass er "metergenau" seine Höhe hält im eingeschwungenen Zustand.
Das sollte sich mit weiterem Parameter-Tweaking eigentlich noch 
verbessern lassen.

Das Problem mit den Pitch-Grenzen ist kniffliger.
Im Prinzip muss ich dafür sorgen, dass er nicht "mit Karacho" in die 
Begrenzung fährt wenn die Höhe stark abweicht vom Soll und dann wieder 
zurückprallt.
So eine Art Regler für die Pitch-Grenzen der im richtigen Moment Vorrang 
bekommt und die Nase bei starker Höhenabweichung am jeweiligen Limit 
hält und beim Überschreiten sanft ans Limit zurückholt.
Aber dabei nicht verhindert, dass der Regler bei Erreichen der Soll-Höhe 
die Nase wieder in die Mitte zieht.

Das übersteigt allerdings mein Grundwissen in Regelungstechnik.
Ich hab da bis jetzt nur theoretische Kenntnisse die schon etwas 
eingerostet sind seit der Uni...

"Trimm-Kaskadenregler" ist da vermutlich das richtige Stichwort.
Das muss ich mir mal anschauen ob ich das übertragen kann auf mein 
Problem.

von Pandur S. (jetztnicht)


Lesenswert?

Nicht vergessen. Nicht nur der Auftrieb ist abhaengig vom Anstellwinkel, 
sondern auch der Luftwiderstand.

von Der Andere (Gast)


Lesenswert?

Markus H. schrieb:
> Naja, die Simulation hat direkte Möglichkeiten den absoluten Pitch zu
> messen.

Geht es nur um die Simulation mit allen Fakes oder soll daraus was 
reales werden?

Der Regelungstechniker würde jetzt sagen: Modelliere erst mal die 
Strecke.

Der Amateur sagt dir: Das ist eine komplexe nichtlineare 
Mehrgrößenregelung, denn ausser der Höhe und dem Anstellwinkel geht da 
mindestens noch die Fluggeschwindigkeit ein. Lösung klassisch über 
mehrere gekoppelte und geschachtelte Regelkreise.

Ob das jetzt PID oder PI Regler sind muss man dann sehen.

von Patrick C. (pcrom)


Lesenswert?

Bestudiere dich mal die Fuzzy Logic reglung statt PI(D). 
Basis-Implementierung von Fuzzy Logic engine ist schwieriger als PID 
aber wenn man die basis hat, kann mann einfacher mehrere variabelen und 
wenn noetig auch mehrere outputs implementieren

von Karl (Gast)


Lesenswert?

Markus H. schrieb:
> Was ich aktuell mache ist, bei Erreichen des von mir vorgegebenen
> Maximal-Pitches den Stellwert zu invertieren und um einen gewissen
> Faktor abzuschwächen.

Das ist der Fehler. Warum Invertierst du den Wert? Setze Ihn auf 0!, 
dann wird er weniger stark nicken. Wenn du dann noch Kp, Ki und kd 
richtig einstellst sollte es laufen.

Markus H. schrieb:
> Nur hat das dann leider zur Folge, dass der Flieger zwar die Höhe
> einigermaßen hält,
> dabei ammer ständig am "Nicken" ist. Nase hoch bis zur Begrenzung ->
> Nase runter bis zur Begrenzung.

von Markus H. (cairol)


Lesenswert?

Der Andere schrieb:
> Markus H. schrieb:
>> Naja, die Simulation hat direkte Möglichkeiten den absoluten Pitch zu
>> messen.
>
> Geht es nur um die Simulation mit allen Fakes oder soll daraus was
> reales werden?
>
Es wird bei der Simulation bleiben.
Das ist nur ein Teil eines meiner Hobbies.
Und ich will auch keine Doktorarbeit darüber schreiben.
Ich suche nur nach Wegen die jetzige "80% Lösung" weiter zu verbesern,
weil es noch nicht so läuft wie ich es ursprünglich hinbekommen wollte.

Karl schrieb:
> Markus H. schrieb:
>> Was ich aktuell mache ist, bei Erreichen des von mir vorgegebenen
>> Maximal-Pitches den Stellwert zu invertieren und um einen gewissen
>> Faktor abzuschwächen.
>
> Das ist der Fehler. Warum Invertierst du den Wert? Setze Ihn auf 0!,
> dann wird er weniger stark nicken. Wenn du dann noch Kp, Ki und kd
> richtig einstellst sollte es laufen.

Nicht vergessen:
Mein Stellwert ist der Winkel vom Höhenruder und (leider) nicht der 
absolute Pitch.
D.h. der absolute Pitch (Winkel der Nase überm/unterm Horizont) ändert 
sich dabei leider nicht abrupt, sondern nur über die Zeit in der der 
Anstellwinkel vom Ruder anliegt.
Wenn ich den Stellwert nur kurz auf 0 setze an der Grenze, wird der 
Regler ihn beim nächsten Lauf sofort wieder mit seinem (Maximal-)Wert 
überschreiben, weil die Höhe ggf. noch lange nicht erreicht ist.
Der Pitch rennt mir dann unrettbar davon bis der Flieger schließlich 
abschmiert.
Deswegen übersteuere ich momentan den Regler an den Pitch-Grenzen eher 
unsanft, um die Nase wieder in den erlaubten Bereich zu bekommen, damit 
der Regler wieder übernehmen kann.
Das führt dann aber leider zur noch bestehenden Unschönheit, das der 
Flieger im Steig- oder Sinkflug "wippt".
Und wie schon erwähnt ist das aktuell gerade nur die grobschlächtige 
Übergangslösung, für die ich noch eine bessere ausarbeiten muss.

Der Ansatz der hier erwähnt wurde, mit dem zweiten Regler eine 
Kaskadenregelung zu bauen (um zusätzlich den absoluten Pitch zu regeln), 
hört sich für mich schlüssig an.
Das werd ich mir auf jeden Fall anschauen.

: Bearbeitet durch User
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.