RC Auto, autonom, PI Regler

Hey Leute,

Nun ist es doch mal soweit gekommen. Das erste Forum mit dem ich mal einen Vorstoß Richtung community versuche.

Grob gesagt brauche ich Hilfe bei der Einstellung eines PI Reglers. Zumindest soweit ich das alles einschätzen kann. Programmieren tu ich erst seit etwa drei bis vier Monaten weshalb ich meine Code Formulierung hoffentlich entschuldigen kann.

Das Auto soll sowohl per Fernsteuerung fahren als auch autonom. Hierbei ist eine schwarze Linie richtungsweisend.
Das Umschalten wie auch fahren per Fernbedienung funktioniert zufriedenstellend sodass ich da nichts ändern würde.

Mein Gedanke zur Lenkung war bisher, dass ich mittels 7 IR Sensoren erkennen kann wo die Linie derzeit ist. So kann ich, auch erfolgreich, verteilt über die 7 sensoren einen Winkel bestimmen.
Die Lenkung wird über einen linearservo gesteuert. So steht grob gesagt jeder sensor für eine Richtung die in einen entsprechenden Wert für den Servo also zwischen 0 und 180 (bzw 10 bis 170, da der maximale lenkausschlag etwas zu groß ist).
Würde man das aber auf den servo geben ist die lenkung alles andere als stabil.
Deswegen war meine Idee das vielleicht mit einem PI Regler zu stabilisieren. Hier aber bin ich alles andere als sicher und viele Verhaltensweisen beim ändern der p und i Koeffizienten sind mir nicht ganz klar.

Ich hoffe ich habe es in etwa in die Nähe eines Punktes gebracht sodass es halbwegs verständlich ist.

e-Beetle_v1.8.ino (23.4 KB)

Hallo,

ein PI regler lebt davon das er einen Sollwert bekommt und einen Istwert und das stetig. Die Stellgrösse kann dabei allerdings auch stufig geschaltete werden. Beispiel Heizung mit mehreren oder auch nur einer Heizstufe.(ZweipunktRegler als PID Regler). Das hast Du aber nicht dein Istwert hat bestenfalls 7 Stufen. Kannst Du also nicht gebrauchen.

was passiert denn jetzt , vermutlich sind die Lenkausschläge zu größ. Damit kommt es dazu das zu weit in in entgegengesetzte Richtung gefahren wird , und letzlich stellt sich ein Zick-zack Kurs ein.

7 heist der mittlere der 4 Sensor. bedeutet geradeaus fahren also 90° bezogen auf den Servo. ? Links und rechts sind jeweils 3 Sensoren. ? Und dazwischen ist auch mal kein Sensor belegt. ?

Du hast das jetzt vermutlich gleichmässig aufgeteilt, also 90° nach links auf 3 Sensoren jeweils 30°. Du must mit der Aufteilung spielen. z.B 1. linker sensor 10° nach rechts 2. Sensor 40° 3 Sensor 90° das Gleiche für die andere Seite. Damit hast Du bei kleinen Abweichungen von der Mitte erst mal kleine Lenkausschläge. Eventuell macht es auch Sinn den Servo langsamer laufen zu lassen.

ich könnte mir auch vorstellen das es auch mit 2 Sensoren klappen. Die schwarze Linie muss dazwischen bleiben, also nicht sichtbar. Wenn der linke sensor was sieht Merker-links setzen und der Servo fährt nach rechts. Wenn der rechte was sieht Merker-links zurücksetzen und Merker-rechts setzten und nach links lenken. Servo langsam fahren macht das ganze dann weicher.

Heinz

Im Moment fährt das Auto in etwa sinusförmig eine gerade linie entlang und nahezu gleichförmig einen Kreis
An sich also schon ganz gut aber manchmal wird die Schwingung aber scheinbar instabil sodass das Auto aus der Bahn fliegt.
Ich hatte vermutet, dass es nur daran liegt, dass ich die Koeffizienten nicht richtig eingestellt habe.
Klingt also nicht sonderlich vielversprechend was ich mir dachte.

Deine Vermutung über die Sensoren und deren Programmierung ist so richtig und die Idee die Winkel der Sensoren anders als nur linear zu skalieren gefällt mir sehr gut. Dadurch könnten die inneren Sensoren lediglich das gerade aus fahren stabilisieren, sobald eine Kurve kommt und die zb 10 Grad nicht mehr ausreichen und einer der äußeren eine Linie erkennt eben der volle lenkausschlag ausgegeben wird.
Das ist deutlich einfacher und könnte gut funktionieren.
Die andere Idee, die ansteuerzeit des servo zu reduzieren sollte ich auch im Kopf behalten. Das könnte ich gegebenenfalls als Dämpfung nutzen.

Ich bin ebenfalls der Meinung, dass du keinen PI-Regler brauchst. I-Anteile neigen ohnehin nur noch mehr zum Schwingen und das möchtest du ja wegbekommen. Momentan hast du ja quasi einen diskreten (und recht groben, da nur 7 Sensorwerte möglich) P-Regler. Wenn der sich aufschwingt ist deine Verstärkung zu groß. Ich würde daher ganz ähliches Vorschlagen wie mein Vorredner. Weise den Sensoren 3 und 5 einen kleineren Lenkwinkel zu. Bei den äußeren Sensoren kommt es eben darauf an wie eng deine engsten Kurven sind, vielleicht brauchst du auch da keinen maximalen Lenkausschlag, vielleicht aber auch doch, musst du ausprobieren.
Das langsamere Stellen der Servos kann natürlich zu einem sanfteren Eindruck des Lenkverhaltens führen, macht deine Regelung aber prinzipiell schlechter, da langsamer. Würde es damit nicht übertreiben oder ggf. langsamer fahren.
Noch ein Vorschlag: Wenn du aus der Kurve fliegst bzw. deinen Regler überforderst kann es auch sinnvoll sein die Geschwindigkeit des Fahrzeugs abhängig vom Lenkwinkel bzw. dem "positiven" Sensor zu drosseln. Macht man im PKW ja auch.

Edit: Ich möchte ergänzen: Ein PI-Regler macht bei dieser Anwendung evtl. schon Sinn, aber löst jedenfalls nicht direkt dein aktuelles Problem. PI-Regler würde am Beispiel erklärt bedeuten, dass dein Lenkwinkel bei Erkennung der Linie an Sensor 3 erstmal auf einen (relativ kleinen) Wert springt und dann mit der Zeit immer größer wird solange der Sensorwert dort bleibt.