PID-Regler NXT-G, EV3-G

grafische Programmiersprachen für den EV3/NXT.
NXT-G, Robolab, LabView und was noch so schön bunt ist...

Moderator: Moderatoren

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 2. Jan 2016 22:29

ich meinte eigentlich, dass du ein paar erklärende Worte schreibst über dein Modell und auch ein bisschen was erklärst zum Programm, und wenn du kein Foto hast, dann vielleicht einen Screenshot vom fertigen LDD Modell?
Dass die, die es interessiert, einen leichteren Einstieg haben, sowohl was das Aussehen des Modells bzw. des Versuchsaufbaus angeht als auch eine Verständnishilfe für das Programm.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: PID-Regler NXT-G, EV3-G

Beitragvon Peter28 » 2. Jan 2016 22:51

Habe ja schon geschrieben, dass kein Foto existiert. Binaber gern bereit Fragen zum Programm zu beantworten.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 2. Jan 2016 23:41

ich meinte eigentlich, dass du ein paar erklärende Worte schreibst über dein Modell und auch ein bisschen was erklärst zum Programm


und wenn du kein Foto hast, dann vielleicht einen Screenshot vom fertigen LDD Modell?
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 3. Jan 2016 10:54

- habs zusammengeführt, danke! -

ein PID-Regler braucht ja einen Zielwert, der erreicht werden soll (sog. Führungsgröße oder "setpoint"), z.B. einen Sensor-Zielwert,

er berechnet dann den Fehler (err) zwischen Ziel und augenblicklichen Wert,
err = ZielWert - JetztWert

dann daraus die neue Summe über alle bisherigen Fehler (für den Integral-Term)
errsum = olderrsum + err

und daraus den PID-Regel-Term (für die sog. "Stellgröße") nach
r = Kp*err + Ki*errsum*dt + Kd*(err – erralt)/dt

und dieses Ergebnis verwendet er, um irgendwas anderes (z.B. Motor-pwms oder einen Lenkeinschlag) zu "stellen".

Erklärst du vlt bitte kurz, was bei dir die Stell- und Regelgrößen sind und wie dann die Regelung an sich funktioniert?
Und welche Kp, Ki und Kd-Werte du dann als beste herausgefunden hast?
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Hobbes
Schreibt viel
Schreibt viel
Beiträge: 76
Registriert: 31. Jan 2014 11:21

Re: PID-Regler NXT-G, EV3-G

Beitragvon Hobbes » 3. Jan 2016 12:36

@HaWe: Ich glaube, dein Integralterm ist so nicht ganz richtig.

Ich würde es so berechnen:
errsum=olderrsum + err*dt
oder
errsum=olderrsum+((err+errold)/2)*dt

Und dann :
Y=Kp*err+Ki*errsum+Kd*(err-erralt)/dt

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 3. Jan 2016 12:45

der Integral-Term ist das Integral (also i.P. die Summe) über alle Fehler multipliziert mit der infenitesimal kleinen dt (oder sehr kleinen delta-t), und alles multipliziert mit dem Ki-Faktor,
also

I_Term =
= Ki · ( (t)(errt ·dt) )

≈ Ki · ( (t)Σ(errt ·Δt) )

= Ki · ( (t)Σ(errt) ·Δt)

in Algorithmen-Schreibweise

errsum=errsum+err
und somit

= Ki * (errsum*dt )
= Ki * errsum * dt

das dt wird also einfach nur aus der Summe ausgeklammert:

(e1*dt) + (e2*dt) + (e3*dt) + (e4*dt) +(e5*dt) + (e6*dt) = (e1+e2+e3+e4+e5+e6)*dt

aber so oder so - es kommt bei konstanten (sehr kleinen) dt das gleiche raus.
Dennoch, wenn sich dt ändert, summiert man tatsächlich besser immer das Produkt aus error und aktueller delta-t auf, insoweit wäre das dann "optimierter Code".

(CMIIW)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: PID-Regler NXT-G, EV3-G

Beitragvon Peter28 » 3. Jan 2016 13:06

Sage ja, habe rumexperimentiert. Den PID-Regler gab es in vielen Beiträgen und unterschiedlichen Ausführungen. Falls es sich nur um die Formeln handelt, kannst Du ja mal einstellen: statt "alt" lieber "neu" verwenden. Bzw. die Blöcke mal ändern und einstellen. Vielleicht schaffe ich es dann, das Ding ruhiger und schneller laufen zu lassen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 3. Jan 2016 13:12

ich selber benutze die grafische Software überhaupt nicht - Blöcke sind mir selber völlig fremd.

ich meinte auch etwas anderes:
um deinen PID-Regler zu erklären (bei dem es sich ja nicht um einen allgemeinen Fall sondern eine sehr spezielle Anwendung handelt), wäre es gut, wenn du deine Anwendung erstmal erklärst (z.B. einen Balancier-Gyroboy oder einen Linienfolger oder einen Motorencoder-Zielpositions-Steller oder ein Schiffsruder-Lenkprogramm).
Diese grundlegende Beschreibung gehört in den Projekt-Vorstellungs-Post hinein.

Und dann erklären, welche Werte in deinem PID-Regler vorkommen,
und dann, wie du dafür den PID-Regler programmiert hast.

Mit einem Programm und einem Modell ohne weitere Erklärungen wird niemand viel damit anfangen können, fürchte ich.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Hobbes
Schreibt viel
Schreibt viel
Beiträge: 76
Registriert: 31. Jan 2014 11:21

Re: PID-Regler NXT-G, EV3-G

Beitragvon Hobbes » 3. Jan 2016 13:47

@HaWe: Nein, deine Erklärung ist falsch.

Der Integralteil ändert sich relativ langsam. Es ist ja die Fläche unter der Kurve.
Das bedeutet theoretisch die Fläche von Anfang an. Meistens nimmt man aber beim PID Regler nicht die ganze Kurve, sondern nur eine gewisse Zeit hinter der letzten Messung.
Dein Wert kann sich aber sehr stark und schnell ändern, weil du am Ende mit dt multipliziert.
Das dt bezieht sich aber doch nur auf die letzten beiden Messungen. Wenn dt sehr klein ist darf sich errsum kaum ändern. Bei deiner Rechnung aber sehr stark

Hobbes
Schreibt viel
Schreibt viel
Beiträge: 76
Registriert: 31. Jan 2014 11:21

Re: PID-Regler NXT-G, EV3-G

Beitragvon Hobbes » 3. Jan 2016 14:18

@Peter: Hast du deine Regelparameter (Kp, Ki, Kd) wirklich durch ausprobieren ermittelt?
Bei mir und meinem linefollower, hat das nämlich gar nicht funktioniert.
Habe dann mal die Kenngrößen mit der Ziegler/Nichols Methode berechnet und sofort ein tolles Ergebnis gehabt.

Gruß Hobbes

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 3. Jan 2016 14:21

@Hobbes:
Meistens nimmt man aber beim PID Regler nicht die ganze Kurve, sondern nur eine gewisse Zeit hinter der letzten Messung.
dann verwendest du einen abgewandelten Algorithmus, und nicht die original definierte Funktionsgleichung.

PID-Formel.jpg
PID-Formel.jpg (5.65 KiB) 2178 mal betrachtet
(die erste Konstante sieht hier wie ein R aus, muss aber P heißen)
http://www.chemgapedia.de/vsengine/vlu/vsc/de/ch/7/tc/regelung/grundlagen/regelung_grundlagen.vlu/Page/vsc/de/ch/7/tc/regelung/grundlagen/regler/pid_ctrl.vscml.html

PID-Formel2.jpg
PID-Formel2.jpg (3.4 KiB) 2174 mal betrachtet
https://de.wikipedia.org/wiki/Regler#I-Regler_.28I-Anteil.29


Tatsächlich verwenden viele "praktische" PID-Implementierungen einen zusätzlichen sog. "damp" (Vergessens-) Faktor für das Integral-Glied, aber auch das ist eine praktische Optimierung für eine spezielle Implementierung, nicht das Original.

Ich wollte oben zunächst auf die klassische, einfache, originale Definition hinweisen.
Selber verwendet habe ich für meinen NXC-PID-Regler allerdings ebenfalls das "damp" Glied.
viewtopic.php?f=25&t=7521&p=62136#p61930
https://mindboards.org/viewtopic.php?f= ... 435b839d8c
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Hobbes
Schreibt viel
Schreibt viel
Beiträge: 76
Registriert: 31. Jan 2014 11:21

Re: PID-Regler NXT-G, EV3-G

Beitragvon Hobbes » 3. Jan 2016 14:41

Das glaube ich nicht.
Ich hatte meinen linefollower mit einer Lenkung gebaut und somit war mein maximaler Lenkeinschlag begrenzt und somit meine Stellgröße. Wenn der Wagen dann z.B. in einer engen Kurve gefahren ist, aber die Linie wegen seinem begrenzten Anschlag nicht sofort wieder erreicht hat, wurde der Integralteil sehr hoch, Ich glaube man nennt es Wind up Effekt. Dann muss man denn Integralteil eine Obergrenze geben oder halt die Zeit über dem Integral beschränken, damit der Wert nicht zu groß werden kann.
Es ist dennoch ein Standard PID-Regler.

Der I-Anteil ist doch immer das Integral über die Regalabweichung multipliziert mit einem Faktor.
Mit errsum=(errsumalt+err)*dt
Berechnet du aber nicht das Integral.
Es muss doch errsum=errsumalt+err*dt sein.
Zuletzt geändert von Hobbes am 3. Jan 2016 14:48, insgesamt 1-mal geändert.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: PID-Regler NXT-G, EV3-G

Beitragvon HaWe » 3. Jan 2016 14:47

Das, was die grundlegende mathematische Theorie der PID-Regelung besagt, ist ganz sicher eine Sache (siehe Wiki-Referenzen - die Herleitung Integralrechnung aus infinitesimal kleinen Einzel-Summen muss ich doch wohl nicht erklären?),
und was du in deiner speziellen Implementierung irgendwie "hingebogen" hast, dass es dann doch funktioniert, offenbar eine andere.
8-)

Was du aber glaubst oder nicht ist ganz allein deine persönliche Sache. :mrgreen:

(e1*dt) + (e2*dt) + (e3*dt) + (e4*dt) +(e5*dt) + (e6*dt) = (e1+e2+e3+e4+e5+e6)*dt

aber so oder so - es kommt bei konstanten (sehr kleinen) dt das gleiche raus.
Dennoch, wenn sich dt ändert, summiert man tatsächlich besser immer das Produkt aus error und aktueller delta-t auf, insoweit wäre das dann "optimierter Code".

ps, soll heißen: eigentlich rechnen wir sogar mit den gleichen Werten!
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Hobbes
Schreibt viel
Schreibt viel
Beiträge: 76
Registriert: 31. Jan 2014 11:21

Re: PID-Regler NXT-G, EV3-G

Beitragvon Hobbes » 3. Jan 2016 15:19

kommt nicht das bei deiner Rechnung raus?
1). e1*dt
2) e1*dt^2+e2*dt. =(e1*dt+e2)*dt
3). e1*dt^3+e2*dt^2+e3*dt. =((e1*dt+e2)*dt+e3)*dt
Usw usw

Dann sind unsere Rechnungen doch wieder sehr unterschiedlich, auch bei einem konstanten dt.
Man sieht, dass je älter die Werte sind, desto geringer werden sie berücksichtigt. Du hast mit der falschen Berechnung des Integral, also auch dem Integral eigentlich so etwas wie eine Obergrenze gegeben.
Aber dein Integral liefert dennoch andere Werte. Somit kannst du z.b. Ki nicht über irgendwelche Standardmethoden (Ziegler) bestimmen.
Zuletzt geändert von Hobbes am 3. Jan 2016 15:37, insgesamt 1-mal geändert.

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: PID-Regler NXT-G, EV3-G

Beitragvon Peter28 » 3. Jan 2016 15:27

Muß mal noch kurz etwas dazu schreiben. Also Gyro kann weg. Wollte erreichen, dass bei bei zu großer Änderungen der Drehgeschwindigkeit das Tempo gedrosselt wird, damit auch scharfe Kurven möglich sind. War aber eine haarige Angelegenheit. Die 3 P,I und D-Blöcke sind so programmiert, wie ich es an Beispielen im Internet für richtig empfand. Bei der Umsetzung einer Formel (Integral, Differenzial) in eine Rechenanweisung ist mir u.U. nicht so gelungen wie es hätte sein müssen. Bin kein Mathegenie was das anbelangt. Die k-Werte sind wirklich empirisch entstanden. Ich habe als Linie einen 3mm Edding benutzt und Radien ab etwa 11 cm aufwärts. Bei zu kleinen Radien spielte das Teil ab und zu verrückt. Deshalb schrieb ich ja schon, dass wenn jemand für die 3 Glieder einen besseren oder richtigen Algorithmus hat, immer her damit. Kann man ja schnell Blöcke erstellen und sie mit den alten austauschen.
Da tauchte noch die Frage nach dem Sollwert auf. Das ist derMittelwert zw. ermitteltem hellsten und dunkelsten Wert. Also eigentlich eine Helligkeitsstufe, die garnicht existiert, aber fortlaufend gesucht wird.


Zurück zu „grafische Programmiersoftware“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss