Forum: Mikrocontroller und Digitale Elektronik PID Regler(Einer Spur folgen mit 2 Achsen)


von Hate M. (hate)


Angehängte Dateien:

Lesenswert?

Hallo,

bin momentan ein einer Fahrwerkssteuerung dran.
Es besteht aus 2 Reglern (Links und Rechtes Rad). Sind nicht über eine 
Mechanik oder ähnlichem gekoppelt.
Außerdem noch eine Kamera die leicht versetzt vor den Rädern montiert 
ist.
Diese Kamera scannt eine auf dem Boden markierte Spur (Farbband oder 
ähnlichem) und gibt einen X und Y Wert weiter.
X ist die Gradzahl der Kamera(Fahrwagen zum Mittelpunkt der Spur) Y die 
Entfernung zum Mittelpunkt der Spur.

Ich habe mir eine Funktion gebaut, die mir die Entfernung der Spur in 
eine Geschwindigkeit umrechnet und an die jeweilige Achse übergibt.
Die Idee ist folgende:
Am Anfang bekommen beide Achsen eine Soll Geschwindigkeit.
Je nach Kamera Auswertung wird die eine Achse dann abgebremst bzw. 
beschleunigt. Jedoch nicht schneller als die am Anfang vorgegeben nax 
Geschwindigkeit.

Der Fahrwagen ist recht "gut" unterwegs. Ein "schwingen" ist dennoch 
leicht sichtbar. Habe nichts brauchbares gefunden das mit weiterhelfen 
konnte eine saubere Regelung zum implementieren.

Im Anhang eine excel Datei meiner erstellen PID Regelung.
Der Regler selber sollte so passen. Jedoch fehlt mir die Umsetzung in 
den Code.
Der Regler bezieht sich eben auf einen Soll und Ist Wert. Da mir die 
Kamera aber 2 Werte liefert (X und Y) verstehe ich nicht ganz, das alles 
in einen zusammenhang zu bringen.

Evtl. kann mir jmd weiterhelfen
Grüße Hate

von Purzel H. (hacky)


Lesenswert?

Ein Streckenmodell hast du ?

Beitrag #5725335 wurde vom Autor gelöscht.
von Hate M. (hate)


Lesenswert?

Name H. schrieb:
> Ein Streckenmodell hast du ?

Was meinst du mit Streckenmodell. Einen Prüfstand ?.
Ich habe eine Teststrecke (Loop) mit jeweils einer ca 5m geraden.

von miau (Gast)


Lesenswert?

Was hacky wohl meinte:

Ein Regelkreis besteht aus einer Strecke und einem Regler (z.B. 
PID-Regler)

Die Strecke ist die ganze unangenehme Physik zwischen dem Ausgang deines 
Reglers und dem Eingang deiner Sensoren.

Und diese Strecke lässt sich in ein Modell packen, z.B. durch Aufnahme 
der Sprungantwort.

Hate M. schrieb:
> Da mir die
> Kamera aber 2 Werte liefert (X und Y) verstehe ich nicht ganz, das alles
> in einen zusammenhang zu bringen.

Na dann lass den Winkel doch erstmal links liegen und versuch nur mit 
der Position zu regeln.

Wenn das nicht zu zufriedenstellenden Ergebnissen führt, kann man 
immernoch weiterschauen.

von MiMa (Gast)


Lesenswert?

Du willst nur den Code?
Das ganze jeweils extra für jeden Motor.

e = soll-ist;
e_int += e;
e_diff = e-e_old;

y = kp*error + ki*e_int + kd*e_diff;
e_old=e;


Hate M. schrieb:
> Der Regler bezieht sich eben auf einen Soll und Ist Wert. Da mir die
> Kamera aber 2 Werte liefert (X und Y) verstehe ich nicht ganz, das alles
> in einen zusammenhang zu bringen.

Mit welchem Wert hast du denn den Regler entworfen? Genau den musst du 
auch dem Regler im Code geben.

von Hate M. (hate)


Lesenswert?

MiMa schrieb:
> Du willst nur den Code?
> Das ganze jeweils extra für jeden Motor.
>
> e = soll-ist;
> e_int += e;
> e_diff = e-e_old;
>
> y = kp*error + ki*e_int + kd*e_diff;
> e_old=e;
>
>
> Hate M. schrieb:
>> Der Regler bezieht sich eben auf einen Soll und Ist Wert. Da mir die
>> Kamera aber 2 Werte liefert (X und Y) verstehe ich nicht ganz, das alles
>> in einen zusammenhang zu bringen.
>
> Mit welchem Wert hast du denn den Regler entworfen? Genau den musst du
> auch dem Regler im Code geben.

Die Motoren haben ihre eignen Regler und sind soweit über die eigene 
Software "eingeregelt".
Somit gebe ich den Motoren nur die Drehzahl vor.

Auf die X Position achte ich eben nicht momentan. Es wird der Y Wert 
gelesen und fließt in den Regelkreis der unabhängig von Regelkreis der 
Achsen ist mit ein (PID-Regler).
Im Excel Sheet der im Anhang ist habe ich versucht das zu simulieren. 
Sollwert (w) ist mein Y Wert der Kamera. Hier sieht man, dass sich die 
Regelung "sauber" verhält dennoch ist bei schneller Geschwindkeit 
(ca.30m/min ein leichtes schwingen zu erkennen. Es reicht somit nicht 
aus rein die Position y zu benutzen. Sondern ich muss auch wissen in 
welcher Lage (x) sich der Fahrwagen befindet um gegenfalls Gegen zu 
steuern.

Grüße Hate

: Bearbeitet durch User
von MiMa (Gast)


Lesenswert?

Hate M. schrieb:
> Im Excel Sheet der im Anhang ist habe ich versucht das zu simulieren.
> Sollwert (w) ist mein Y Wert der Kamera. Hier sieht man, dass sich die
> Regelung "sauber" verhält dennoch ist bei schneller Geschwindkeit
> (ca.30m/min ein leichtes schwingen zu erkennen. Es reicht somit nicht
> aus rein die Position y zu benutzen.

Doch klar reicht das, dein Modell scheint aber nicht mit der Realität 
übereinzustimmen. Wie hast du denn deinen PID eingestellt? Würde es mal 
mit Ziegler Nichols versuchen.

Wie schnell können die Motoren? Kann es sein, dass der Regler gerne mehr 
Geschwindigkeit hätte als die Motoren können?

von jemand (Gast)


Lesenswert?

Hate M. schrieb:
> dennoch ist bei schneller Geschwindkeit
> (ca.30m/min ein leichtes schwingen zu erkennen.

Dann ist es Zeit einen Schritt zurück zu gehen und erstmal I- und 
D-Anteile ganz rauszunehmen.

Wenn dein P-Anteil mit 0,02 schon Wirkung zeigt, kann es durchaus sein, 
dass die 0,001 I und D Anteil mehr aus dem Ruder bringt, als man meint.


Erstmal das Überschwingen loswerden, dann über I Anteil nachdenken, dann 
über Verwendung des Winkels nachdenken.

von Hate M. (hate)


Lesenswert?

MiMa schrieb:
> Hate M. schrieb:
>> Im Excel Sheet der im Anhang ist habe ich versucht das zu simulieren.
>> Sollwert (w) ist mein Y Wert der Kamera. Hier sieht man, dass sich die
>> Regelung "sauber" verhält dennoch ist bei schneller Geschwindkeit
>> (ca.30m/min ein leichtes schwingen zu erkennen. Es reicht somit nicht
>> aus rein die Position y zu benutzen.
>
> Doch klar reicht das, dein Modell scheint aber nicht mit der Realität
> übereinzustimmen. Wie hast du denn deinen PID eingestellt? Würde es mal
> mit Ziegler Nichols versuchen.
>
> Wie schnell können die Motoren? Kann es sein, dass der Regler gerne mehr
> Geschwindigkeit hätte als die Motoren können?

Drehzahl Motoren max 4000 U/min

Die Werte stehen im excel sheet:

Kp  0,02
Ki  0,001
Ta  20
Kd  0,001

von MiMa (Gast)


Lesenswert?

Hate M. schrieb:
> Drehzahl Motoren max 4000 U/min

wie schnell drehen sie bei 30m/min?

von Hate M. (hate)


Lesenswert?

MiMa schrieb:
> Hate M. schrieb:
>> Drehzahl Motoren max 4000 U/min
>
> wie schnell drehen sie bei 30m/min?

3670 U/min sind ca 30m/min

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hate M. schrieb:
> Die Motoren haben ihre eignen Regler und sind soweit über die eigene
> Software "eingeregelt". Somit gebe ich den Motoren nur die Drehzahl vor.
Udn wie schnell reagieren die auf eine Änderung deiner Vorgabe? Hast du 
diese "Reaktionszeit" berücksichtigt?

Hate M. schrieb:
> Der Regler selber sollte so passen.
Wie ist dieser Regler implementiert? Ist er schnell genug? Hast du das 
Schwingen auch, wenn dein Fahrzeug langsam fährt?

von Hate M. (hate)


Lesenswert?

Lothar M. schrieb:
> Hate M. schrieb:
>> Die Motoren haben ihre eignen Regler und sind soweit über die eigene
>> Software "eingeregelt". Somit gebe ich den Motoren nur die Drehzahl vor.
> Udn wie schnell reagieren die auf eine Änderung deiner Vorgabe? Hast du
> diese "Reaktionszeit" berücksichtigt?
>
> Hate M. schrieb:
>> Der Regler selber sollte so passen.
> Wie ist dieser Regler implementiert? Ist er schnell genug? Hast du das
> Schwingen auch, wenn dein Fahrzeug langsam fährt?

Nein das habe ich nicht mit berücksichtig.
Ein schwingen bei langsamer fahrt ist nicht sichtbar.

von MiMa (Gast)


Lesenswert?

Hate M. schrieb:
> MiMa schrieb:
>> Hate M. schrieb:
>>> Drehzahl Motoren max 4000 U/min
>>
>> wie schnell drehen sie bei 30m/min?
>
> 3670 U/min sind ca 30m/min

Gut möglich, dass du durch deine Motoren schon eine 
Stellgrößenbegrenzung erreichst. Dann kann dein Regler nicht mehr 
funktionieren.

von RP6conrad (Gast)


Lesenswert?

Bei schnelle Linienfolger (>1m/s) ist die Reactionszeit sehr wichtig ! 
Diese ist naturlich die Summe von Messvorrichtung (camera), Regel 
Algoritmus und wie schnell ihre Antrieb reagieren kan. Wen die Motoren 
dann auch noch an ihre Obengrenze sind, wird es Schwierig. Eine 
Vorschlag ist diese Regelung unsymmetrisch zu machen : 80% abbremsen 
innerrad, 20% beschleunigen Aussenrad !

von Hate M. (hate)


Lesenswert?

RP6conrad schrieb:
> Bei schnelle Linienfolger (>1m/s) ist die Reactionszeit sehr wichtig !
> Diese ist naturlich die Summe von Messvorrichtung (camera), Regel
> Algoritmus und wie schnell ihre Antrieb reagieren kan. Wen die Motoren
> dann auch noch an ihre Obengrenze sind, wird es Schwierig. Eine
> Vorschlag ist diese Regelung unsymmetrisch zu machen : 80% abbremsen
> innerrad, 20% beschleunigen Aussenrad !

Danke für den Vorschlag. Sowas in der Art habe ich mir auch gedacht.
Die Mechanik wird nun so angepasst das wir noch oben (Geschwindigkeit 
4000 mehr Luft haben). Dann werde ich noch versuchen nicht ein Rad 
abzubremsen, sondern "beide" und das in einem bestimmten Prozensatz. Wie 
oben erwähnt 80/20

Grüße Hate

von Tom (Gast)


Lesenswert?

Für sowas sind andere Ansätze, die weiter nach vorne sehen und 
vorausplanen, einfacher umzusetzen als eine simple PID-Regelung von 
Querablage und Ausrichtung.

Pure Pursuit Path Tracking wäre ein Standard-Ansatz. Also immer 
periodisch einen Punkt auf der Bahn finden, der ein Stück L vor dem 
Fahrzeug liegt, und von der aktuellen Fahrzeugposition und -richtung aus 
eine Krümmung berechnen, mit der das Fahrzeug diesen Punkt trifft. Aus 
der Krümmung ergibt sich das einzustellende Geschwindigkeitsverhältnis 
der Räder. L macht man so lang, dass es stabil fährt, und so kurz, dass 
Kurven nicht übermäßig geschnitten werden, ggf auch abhängig von der 
Geschwindigkeit.

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.