PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Regelungstechnik: Führungsgröße bestimmen



-skunk-
10.02.2011, 19:44
Hallo allerseits...

ich bin gerade an einem Projekt dran, bei dem ich einen Regelkreis digital implementieren möchte. Ich lese jetzt schon seit geraumer Zeit Regelungstechnik-Tutorials usw., aber irgendwie wird dort auf meine Frage nicht wirklich eingegangen. Vielleicht stehe ich aber auch total auf dem Schlauch. Daher würde ich mich sehr freuen, wenn ihr mir einen kleinen Wink mit dem Zaunpfahl geben würdet :)

Es geht um ein ferngesteuertes Auto, welches sich auf ein Hindernis zu bewegt. Die Entfernung messe ich mit dem SRF02, die Steuerung erfolgt mit einem ATmega. Die Fernbedienung liefert mir Werte von ca. 200 (100% Schub nach hinten) bis 300 (100% Schub nach vorn). Diese möchte ich entsprechend verändern, dass das Auto niemals gegen die Wand fährt. Also quasi: Je schneller das Auto fährt, desto mehr muss ich bremsen.

Hier mal ein Teil meiner bisherigen Gedanken dazu:
Aus zwei Messungen des SRF02 kann ich die Geschwindigkeit bestimmen, pro Messung den Abstand.

Der nächste Schritt wäre ja jetzt, aus diesen gegebenen Sachen eine Führungsgröße zu bestimmen, um anschließend die Regelstrecke zu bilden.

Aber irgendwie hakt es in meinem Kopf, diesen Schritt auszuführen.

Daher würde ich mich sehr über eure Hilfe freuen!!

021aet04
11.02.2011, 08:42
Hier habe ich es skizziert. Du rechnest den Wert der Fernbedienung mit dem Abstand zusammen. Das ist dein Sollwert. Diesen vergleicht der Regler mit der aktuellen Geschwindigkeit. Es könnte sein, dass du den Wert der FB bzw den Abstand anpassen musst. Die Geschwindigkeit musst du begrenzen, damit du nicht zu schnell wirst. Ich würde noch eine Zeile in das Programm einbinden: wenn Soll > Fernbedienung => Soll = Fernbedienung

Du musst aber auch beachten, dass sich die Werte fürs Rückwärtsfahren umdrehen.

MfG Hannes

ranke
11.02.2011, 09:38
Es ist günstig, wenn man sich erstmal klar macht, welche Schnittstellen man zum System hat und wie man das erwünschte Ziel (= nicht anstoßen) physikalisch definieren kann.
Nicht anstoßen heißt, dass der Abstand Fahrzeug - Hindernis nie Null (oder gar negativ) werden soll. Es soll also letztlich eine Strecke (Abstand) geregelt werden.
Eingreifen kann die Regelung über die Versorgung der Motoren mit Energie, die zum Beschleunigen oder Bremsen benützt werden kann. Genaues über diese Einflußnahme weiss man nicht, man könnte zum Beispiel annehmen, dass die Schubkraftvorgabe proportional zur Beschleunigung des Fahrzeugs ist (was sicherlich vereinfachend ist).
Als weitere Größe können wir die Geschwindigkeit des Fahrzeugs bestimmen.

Ziel des Reglers sollte sein, die (Brems-)Beschleunigung des Fahrzeugs in Abhängigkeit von der Fahrgeschwindigkeit so zu steuern, dass der Abstand niemals Null wird. Es wird dabei eine maximale Beschleunigung geben, die (bauartbedingt) nicht überschritten werden kann. Unterstellt man eine konstante Beschleunigung, dann ergibt sich ein quadratischer Zusammenhang zwischen Fahrgeschwindigkeit und notwendigem Bremsweg (so lernt man das auch in der Fahrschule als Faustformel für den Bremsweg (http://de.wikipedia.org/wiki/Bremsweg#Faustformel_.28F.C3.BChrerschein.29)). Der im Link angegebene Faktor k müsste für Dein Fahrzeug noch extra bestimmt werden.

Die Geschwindigkeitsbestimmung über die Differenz zweier US-Messungen ist eventuell kritisch. Möglicherweise kann es sinnvoll sein, wenn man die Geschwindigkeit anders misst (z.B. Zählen der Radumdrehungen pro Zeiteinheit). Vielleicht geht es aber auch so, wie Du es vorschlägst.

oberallgeier
11.02.2011, 09:41
... irgendwie hakt es in meinem Kopf ...Das ist ein typisches Symptom bei längerer Beschäftigung mit der Regelungstechnik; ich hatte mehrere Tage gebraucht, bis ich darin einigermassen fit war. Ich rate Dir, das hübsche Wiki dazu durchzulesen, klick hier. (http://www.rn-wissen.de/index.php/Regelungstechnik#Beispiel:_Drehzahlregelung) Knapp unter der verlinkten Stelle steht auch ein Codebeispiel für die Realisierung eines digitalen Reglers.

Parallel zum Lesen hatte ich mir meine Datenerfassung und Sizzen für die Software notiert, siehe hier:

............https://dl.dropbox.com/s/ubfvgqsrk2wrfpx/regel-notiz.jpg?dl=0

(M)Ein Codebeispiel ist hier zu sehen (klick). (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=451800#451800) Wichtig natürlich die Aufnahme der Sprungantwort, siehe z.B. bei meinem Beispiel hier (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=463986#463986) und daraus die Berechnung der Regelparameter nach dieser Vorschrift. (http://www.rn-wissen.de/index.php/Regelungstechnik#Dimensionierung_nach_Einstellrege ln) Und das Ergebnis funktioniert bei meinen Dosen (http://www.youtube.com/watch_popup?v=MjLqexH6fDQ) prima. Bei meinem WALL R, (https://www.roboternetz.de/phpBB2/viewtopic.php?t=45658) einem umgebauten RC-Car (ohne RC, nur die on-board-Sensorik) geht der Abstand seitlich und nach vorne an a) den Lenkservo und b) eine Geschwindigkeitsvorgabe, letztere aber ohne Rückführung.


Auch mit einer IR-Fernbedienung ausgelöst. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=533106#533106)

Richard
11.02.2011, 11:52
Ich rate Dir, das hübsche W iki dazu durchzulesen, klick hier. (http://www.rn-wissen.de/index.php/Regelungstechnik#Beispiel:_Drehzahlregelung) Knapp unter der verlinkten Stelle steht auch ein Codebeispiel für die Realisierung eines digitalen Reglers.



Na endlich einmal etwas brauchbares in D verfasst das auch noch gut nachvollziehbar ist!

Danke für den Link. :-)

Gruß Richard

-skunk-
11.02.2011, 17:51
Hui, vielen Dank für die Antworten. Ich werde das mal in Ruhe nachvollziehen. Daher entschuldigt, wenn ich nicht sofort zurückschreibe! Vermutlich werde ich erst Anfang nächster Woche dazu kommen...

-skunk-
15.02.2011, 10:12
Sodele...da bin ich wieder ^^
Ich habe mittlerweile herausgefunden, dass, wie ranke bereits sagte, die Geschwindigkeitsmessung aus 2 Abstandsmesswerten schon ziemlich beschissen ist :) Also lieber nur den reinen Abstand nehmen.

Trotzdem komme ich gedanklich nicht bei der Bestimmung von 'w' weiter. Im Endeffekt muss ich mir x und den Abstand angucken, daraus dann w errechnen, wenn ich das richtig verstanden habe.

@oberallgeier: Du gibt in deiner "Mitschrift" eine Formel zur Berechnung von w auf. Ich komme aber nicht dahinter, wie du das gemacht hast?!? Ich habs echt irgendwie noch nicht raus :\

Richard
15.02.2011, 11:02
Ich würde versuchen die Geschwindigkeit aus Radencodern zu berechnen und zusammen mit dem gemessenen Abstand zum Hindernis dann den Bremsweg b.z.w. die nötige Verzögerung zu ermitteln. Also je geringer der Abstand um so stärker Fahrt heraus nehmen b.w. bei sehr kleinen Abstand auch bremsen.

Bei x Geschwindigkeit und Y zur Verfügung stehender Wegstrecke sollte das doch machbar sein?

Gruß Richard

-skunk-
15.02.2011, 12:06
Naja, die Geschwindigkeit habe ich ja bei meinem Aufbau nicht. Wenn wir davon ausgehen, dass das auch so bleibt, habe ich nur den Abstand und das Signal von der Fernbedienung. Ich würde also auch sehen, wenn der "Fahrer" weniger Gas gibt und könnte das mit einbeziehen...

Richard
15.02.2011, 12:25
Naja, die Geschwindigkeit habe ich ja bei meinem Aufbau nicht. Wenn wir davon ausgehen, dass das auch so bleibt, habe ich nur den Abstand und das Signal von der Fernbedienung. Ich würde also auch sehen, wenn der "Fahrer" weniger Gas gibt und könnte das mit einbeziehen...

Hmm, das verstehe ich jetzt gerade nicht ganz. Wenn man etwas Regeln will braucht man auch Regel Parameter. Das muss jetzt nicht Geschwindigkeit sein, Tick's welche den zurück gelegten Weg beschreiben und mit dem zur Verfügung stehenden Weg vergleichen, könnten auch ausreichen.

Nur mit dem Abstand alleine wird es aber wahrscheinlich Probleme geben. :-(

Gruß Richard

-skunk-
15.02.2011, 12:37
Naja, die hab ich ja. Ich kann ja quasi fast beliebig viele Abstandswerte speichern und daraus den zurück gelegten und den verbleibenden Weg bestimmen.

Richard
15.02.2011, 14:46
Naja, die hab ich ja. Ich kann ja quasi fast beliebig viele Abstandswerte speichern und daraus den zurück gelegten und den verbleibenden Weg bestimmen.

Nur das so ein US gerät relativ langsam ist und viel Prozessor Zeit verschenkt. :-(

Gruß Richard

oberallgeier
15.02.2011, 16:18
... habe mittlerweile herausgefunden, dass, wie ranke bereits sagte, die Geschwindigkeitsmessung aus 2 Abstandsmesswerten schon ziemlich beschissen ist ...Ohhhh - das hatte ich noch nicht herausgefunden, danke für diesen nützlichen Hinweis. Vielleicht ist meine Unwissenheit der Grund, dass meine autonomen Dosen so genau geregelt laufen können? Spott beiseite - ich verstehe das Argument wirklich nicht. Weil es ziemlich einfach ist, eine Geschwindigkeit zur errechnen aus 2 Abstandsmesswerten.


... eine Formel zur Berechnung von w auf. Ich komme aber nicht dahinter, wie du das gemacht hast ... die Geschwindigkeit habe ich ja bei meinem Aufbau nicht ...Brrrr, die Geschwindigeit "habe" ich ja bei meinem Aufbau auch nicht. Und Du hast vermutlich weder mein verlinktes Posting gelesen und schon garnicht ein paar weiter vorgeschaut - da steht nämlich Alles.

1) In meinem Controller läuft ein Ti mer als eine Art Borduhr, der im 50µs-Takt einen Wert hochzählt; er ist für vielerlei Zeitmessaufgaben im System nützlich. Diese Zeitscheiben werden bei 20000 - entsprechend einer Sekunde - auf Null zurückgesetzt. Dieser Zeitwert heißt Izeit_1. Anmerkung: mein controller läuft mit 20 MHz, da habe ich von einem 50µs-Takt zum nächsten 1000 Maschinenzyklen zur Verfügung - das ist ziemlich reichlich.

2) Hier wird gezeigt, (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=437897#437897) wie ich die Encoder, je einer pro Motor, initialisiere damit sie einen Interrupt erzeugen wenn eine steigende Flanke erkannt wird. In dieser ISR werden die Encoderticks gezählt (gibt ne Wegmessung) und die aktuelle Bordzeit Izeit_1 zum Interruptzeitpunkt festgestellt.

3) Aus der Bordzeit des vorhergehenden Interrupts und der aktuellen Zeit ergibt sich eine Zeitdifferenz, die ich von einem Interrupt zum anderen gemessen habe.

4) Das Wunderbare ist jetzt, dass von einem Encodertick bis zum nächsten eine genau feststellbare Strecke gefahren wird - das gibt die Fahrzeuggeometrie und die Get riebeübersetzung her. Also kenne ich die Strecke und die dafür benötigte Zeit. Strecke pro Zeit ergibt also GENAU die gefahrene Geschwindigkeit. Diese Weisheit stammt noch aus frühen Schultagen (ich höre gleich auf zu ätzen).

Der Rest der Regelung (ich habe bei mir eine Geschwindigkeitsregelung) ist im Link vorgestellt.

So - nun habe ich beim WALL R eine ähnliche Aufgabe wie sie sich Dir stellt: ich muss nicht nur die Geschwindigkeit der beiden Räder regeln, damit ich einen Geradlauf habe - ich muss auch beizeiten langsamer werden, damit ich nicht in die Wand einbombe. Das hat Richard ja im Wesentlichen vorgestellt, es ist eine eher einfache Aufgabe/Lösung. Es wird einfach die Geschwindigkeitsvorgabe entsprechend dem Abstandswert ausgegeben.

Irgendetwas noch unklar?

Richard
15.02.2011, 16:56
[ Es wird einfach die Geschwindigkeitsvorgabe entsprechend dem Abstandswert ausgegeben.

Irgendetwas noch unklar?

So in der Art habe ich mir das auch vorgestellt. Wobei im Brutalo Fall auch aureicht Den Abstand zum Hindernis messen und nach Abstand/(Tick's_Weg) + ein paar ticks Sicherheit eine Vollbremsung hin zu legen. :-) Da fällt dann die Zeit bei der Berechnung weg, OK mit nen Moped gibt das Staßenflechte. :-(

Gruß Richard

oberallgeier
15.02.2011, 17:13
... im Brutalo Fall auch aureicht Den Abstand zum Hindernis messen und ...Nix nur Brutalo. Beim WALL R (https://www.roboternetz.de/phpBB2/viewtopic.php?t=45658) habe ich KEINE Geschwindigkeitsregelung - schaut euch mal dazu das Video an, wie gut das geht. Dort wird die Geschwindigkeit nur gesteuert durch Vorgabe von P WM-Werten ohne Rückkopplung auf den Antrieb. Angetrieben wird über die Hinterachse (der Z4 hat eben KEINEN Vorderradantrieb) und die Richtung wird mittels Se rvo und Spurstange in konventioneller Automobiltechnik beeinflusst. Aufbau siehe hier. (https://www.roboternetz.de/phpBB2/viewtopic.php?p=417039#417039) Die Geschwindigkeit ist in einer vier-, fünf- oder sechselementigen Tabelle. Abstand > 1,5 m heißt GibGummi, schrittweise runter bis etwa 30 cm, da heißt es dann Schleichfahrt. Die Stellung des Lenkservos pro Seite ist je nach seitlichem Abstand in einer ebenso kleinen Tabelle.

ranke
15.02.2011, 20:28
Nur mal kurz zur Verwirrung mit der Geschwindigkeitsmessung: Aus eigener Erfahrung (allerdings nicht mit dem SRF2) gibt es bei der US-Messung gerne mal ein paar Ausreisser bei den Messwerten. Wenn man dann mit so einem Signal versucht die Ist-Geschwindigkeit zu messen, wird das Ergebnis möglicherweise ziemlich verrauscht. Deshalb hatte ich vorgeschlagen zur Geschwindigkeitsermittlung eventuell einen Radencoder zu verwenden.

Der oberallgeier hat inzwischen überzeugend dargelegt, dass es eine Geschwindigkeitsmessung nicht unbedingt braucht. Das liegt auch daran, dass die typischen permanenterregten Gleichstrommotoren eine Kennlinie haben, die es (in Grenzen) erlaubt, vom PWM-Wert auf die Fahrgeschwindigkeit zu schließen. Da in oberallgeiers Kellerflur glatter, ebener Boden verlegt ist, sind auch die Störgrößen für Seinen Wall R recht gering gewesen. Wäre er mit der selben Reglereinstellung auf Flokkati gefahren, dann hätte der Wall R sicher unnötig große Bögen um die Hindernisse gemacht.

Nochmal zur Übersicht:
Erster Ansatz:
"Nicht anstoßen wollen" kann man mit einer Geschwindigkeitsregelung machen. Dabei wird die Ist-Geschwindigkeit mit einer Führungsgröße Soll-Geschwindigkeit verglichen (Differenzbildung), der Regler rechnet daraus ein PWM-Signal (also Dein Fernsteuersignal zwischen 200 und 300).
Die Führungsgröße muß mindestens eine Funktion des Abstands zum Hindernis sein, zusätzlich kann man z.B. auch die Ist-Geschwindigkeit mit hineinrechnen (je schneller, desto eher bremsen).

Zweiter Ansatz:
Man kann auf die Messung der Ist-Geschwindigkeit unter Umständen verzichten und nur ein Fernsteuersignal in Abhängigkeit vom Abstand zum Hindernis erzeugen. Will man zusätzlich noch den Einfluß der Fahrtgeschwindigkeit einfließen lassen, so kann man diese aus dem bisherigen zeitlichen Verlauf des Fernsteuersignals schätzen. Das wird dann zwar keine Geschwindigkeitsregelung mehr, aber doch eine Abstandsregelung (das entspricht auch der Aufgabenstellung). Formal ist die Führungsgröße bei dieser Lösung nicht so offensichtlich, sie sollte ein Soll- Abstand sein (nämlich der Abstand, bei der die Soll-Fahrgeschwindigkeit Null wird).

-skunk-
16.02.2011, 13:20
@oberallgeier: Erst mal vielen Dank für deinen Sarkasmus. Das lockert den Umgang hier doch auf :\


Weil es ziemlich einfach ist, eine Geschwindigkeit zur errechnen aus 2 Abstandsmesswerten.
Das ist richtig, wenn man die Zeit hat. Soweit bin ich in Mathe auch gekommen :) Mir ging es eher darum, dass ich mir bislang noch nicht sicher bin, wie genau die Zeit ist, in der ich die Messwerte bekomme. Momentan habe ich 70ms, die (laut Oszi) auch eingehalten werden. Ich befürchte nur, dass da vielleicht noch irgendwo Verzögerungen entstehen, wenn das Programm umfangreicher wird.


Brrrr, die Geschwindigeit "habe" ich ja bei meinem Aufbau auch nicht. Und Du hast vermutlich weder mein verlinktes Posting gelesen und schon garnicht ein paar weiter vorgeschaut - da steht nämlich Alles.
Sicherlich habe ich deine Posts gelesen. Dass nach dem Lesen noch nicht alle Fragen geklärt sind, ist doch aber okay. Oder? :-b


Diese Weisheit stammt noch aus frühen Schultagen (ich höre gleich auf zu ätzen). Danke!



Das hat Richard ja im Wesentlichen vorgestellt, es ist eine eher einfache Aufgabe/Lösung. Es wird einfach die Geschwindigkeitsvorgabe entsprechend dem Abstandswert ausgegeben.
GENAU hier hakt's (vll hackt's auch) bei mir.


Dabei wird die Ist-Geschwindigkeit mit einer Führungsgröße Soll-Geschwindigkeit verglichen (Differenzbildung), der Regler rechnet daraus ein PWM-Signal (also Dein Fernsteuersignal zwischen 200 und 300).
Die Führungsgröße muß mindestens eine Funktion des Abstands zum Hindernis sein, zusätzlich kann man z.B. auch die Ist-Geschwindigkeit mit hineinrechnen (je schneller, desto eher bremsen).
Hier liegt doch mein Problem, bzw. ist die der Knackpunkt. Ich habe meine Ist-Geschwindigkeit, die zwischen 200 und 300 liegt. Ab 250 fahre ich also nach vorn. Zur Berechnung der Sollgeschwindigkeit muss ich also die Faktoren Geschwindigkeit und/oder Abstand so skalieren, dass ich von der Ist-Geschwindigkeit Werte in einem von mir bestimmten Bereich abziehe. Nach dem Motto: Wenn du langsam und weit weg von der Wand bist, ziehe nur ein bisschen ab. Wenn du aber mit Vollgas kurz vor der Wand bist (was dann ja nie passieren würde) ziehe so viel ab, dass du bei fb_wert = 250 bist (evtl. auch rückwärts).
Dazu müsste ich also die Geschw.- und Abstandswerte nach Belieben skalieren, evtl. die Anteile gewichten und würde folgendes durchführen können:

fb_wert_soll = fb_wert_ist - ("v_auto skaliert" - "Abstand skaliert")

Wäre das (m)eine Sollwertberechnung?


Irgendetwas noch unklar? Immer doch \:D/

ranke
16.02.2011, 14:29
Zur Berechnung der Sollgeschwindigkeit muss ich also die Faktoren Geschwindigkeit und/oder Abstand so skalieren, dass ich von der Ist-Geschwindigkeit Werte in einem von mir bestimmten Bereich abziehe.


Das ist nicht richtig. Wenn der Regler arbeitet wird Ist-Geschwindigkeit gemessen und die Soll-Geschwindigkeit (Führungsgröße) muss von außen vorgegeben werden. Die Differenz der beiden nimmt der Regler, biegt mathematisch etwas herum und was dann herauskommt ist die Stellgröße.

Die "Erzeugung" der Führungsgröße wird im Regelkreis typischerweise nicht mehr dargestellt. Das könnte im einfachsten Fall eine Konstante sein (wenn man immer gleich schnell fahren will), in Deinem Fall ist die Führungsgröße eine Funktion von Abstandsmeßwert und Geschwindigkeit, muss also in Echtzeit ausgerechnet werden. Wie die Funktion ungefähr aussehen könnte ist anschaulich klar, wie sie genau aussieht hängt von Deinem Fahrzeug (wie stark soll/kann die Verzögerung sein, soll die Verzögerung über die Bremsstrecke konstant sein,...), Sicherheitszuschlägen (minimaler Abstand zum Hindernis, wenn Fahrzeug zum stehen kommt) ab.
Ein möglicher Algoritmus zur Erzeugung der Führungsgröße wäre bei Dir:
Wenn ((Geschwindigkeit^2/Abstand) > Konstante) dann Vollbremsung, sonst Vollgas. Der Wert für die Konstante errechnet sich aus der möglichen Bremsverzögerung. Sicherlich kann man das noch etwas verfeinern (man muss sich auch noch überlegen, wie das Fahrzeug, das vor dem Hindernis steht, wieder freikommt).

Auch die Rechenschritte des Reglers selbst (also der mathematische Weg zwischen der Differenz bis zur Stellgröße) hängen von der Mechanik/Physik der Fahrzeugs ab, da gibt es aber verschiedene Methoden so etwas zu optimieren, wenn man das Verhalten des Fahrzeugs mathematisch beschreiben kann (z.B. über die Messung der Sprungantwort, hat Oberallgeier so gemacht und weiter oben verlinkt).

-skunk-
16.02.2011, 14:54
Die "Erzeugung" der Führungsgröße wird im Regelkreis typischerweise nicht mehr dargestellt.
Deswegen kapier ichs vielleicht auch nicht :) Bzw. habe ich die dynamische Sollwertbestimmung noch nicht so raus.

Wenn ich einfach einen Sollwert vorgeben könnte, wäre ich schon um einiges Weiter :)

Dein Vorschlag wäre ja quasi eine Zweipunktregelung...da hatte ich mir eigentlich schon ein bisschen was dynamischeres vorgestellt ^^
Wenn ich deinen Vorschlag mal nehme:
((Geschwindigkeit^2/Abstand) > Konstante)
und nicht einfach nur "> Konstante" als Kriterium nehme, sondern "einfach" aus etwas wie (Geschwindigkeit^2/Abstand) eine Führungsgröße berechne, wäre das der Anfang eines dynamischeren Weges?

Wie das Auto da wieder weg kommt habe ich mir so vorgestellt, dass die Regelung nur greift, wenn die Geschwindigkeit > 0 ist und die FB auch Gas gibt. Wenn ich also irgendwann stehe und die FB nach hinten drücke, kann ich ganz normal "rückwärts ausparken".

Ich denke, ich sollte alle weiteren Schritte erst in Angriff nehmen, wenn ich mir klar bin, wie der Anfang funktioniert :)

Noch mal zwischendurch ein dickes Dankeschön für eure Hilfen!!!

ranke
16.02.2011, 15:26
((Geschwindigkeit^2/Abstand) > Konstante) war nicht als umsetzungsfähiger Vorschlag gemeint gewesen. Ich wollte damit nur andeuten, in welche Richtung es gehen könnte. Man kann ja auch Aspekte wie sparsamer Umgang mit Akkuenergie etc. mit einfließen lassen. Das führt dann zu Algorithmen, die schon frühzeitiger reagieren müssen. Die Grenze liegt dann bei der Reichweite des Sensors (die wieder von den Eigenschaften des Hindernis abhängt). In einem späteren Ansatz will man vielleicht auch noch eine Ausweichstrategie durch Lenken implementieren.
Soo schlecht muss ein Zweipunktregler übrigens nicht sein - die Trägheit des Fahrzeugs glättet ja die stotternde Fahrt.

-skunk-
16.02.2011, 18:02
Ja okay, das is klar. Die Frage war eher nur, ob das vom Sinn her passt. Meine Funktion zur Berechnung der Führungsgröße muss quasi nur als Endwertebereich Werte enthalten, die passend zum Ist-Wert sind. In meinem Beispiel, bei Ist-Werten zwischen 200 und 300, müssen die Sollwerte auch in diesem Bereich liegen (oder eben 250-300, wenn ich nicht rückwärts fahren möchte)...

ranke
17.02.2011, 09:26
Das wäre dann das lästige Skalierungsproblem. Ich würde das so (zu) lösen (versuchen), dass die Skalierung der Eingangswerte als erste Tätigkeit stattfindet und zwar auf ein Format, das sinnfällig ist und dem Rechenprozess angepasst. Bei einer 8-Bit Variablen für die Fahrgeschwindigkeit könnte man z.B. +127 für die Maximalgeschwindigkeit vorwärts, 0 für Stillstand, -128 für Maximalgeschwindigkeit rückwärts nehmen. Es sind aber beliebige andere Formate auch denkbar. Den gesamten Rechenprozess würde man in den sinnfälligen Formaten abwickeln und ganz am Schluß das Endergebnis (mittels Addition mit 250 und eventueller Multiplikation mit einer Konstanten) auf den vom Motortreiber nötigen Wert wandeln.
Den Vorteil sehe ich darin, dass man bei der Rechnerei den Prozessor gut ausnutzen kann und dass die Zwischenergebnisse auch leicht interpretierbar sind. Wenn Du in einer höheren Sprache als Assembler programmierst, sind Dir wahrscheinlich schon viele Überlegungen abgenommen, trotzdem halte ich es auch dort sinnvoll, wenn die Geschindigkeit Null auch dem Zahlenwert Null entspricht (sowohl beim Eingang des Messwerts, als auch bei der Führungsgröße, als auch bei allen beteiligten Berechnungen bis zur Steuergröße). So etwas macht wenig Mühe, ist aber eine großartige Hilfe, die Übersicht zu behalten, besonders wenn der Regelalgorithmus später komplizierter wird als man vorher denkt.

-skunk-
22.02.2011, 11:41
Hm na gut...so lästig ist es doch gar nicht :)

Also sähe es momentan so aus, dass ich als Istwert die momentane Stellung des Knüppels habe. Den Sollwert bestimme ich mit dem Abstand und der Geschwindigkeit. Die Differenz ergibt meine Regelabweichung, die in den Regler gebe.

Ich frage mich gerade allerdings, ob es nicht viel einfacher und sinnvoller ist, eine Steuerung zu verwenden. Denn die Knüppelstellung ist ja relativ unabhängig vom momentanen Abstand und der Geschwindigkeit. Ich kann ja mit der Fernbedienung schon "bremsen", während das Auto noch weiterrollt. Vielleicht wäre es da einfach sinnvoller, anhand von Abstand und Geschwindigkeit einen vorgegeben Steuerwert zu errechnen und unabhängig von den "Eingaben" des Fahrers zu steuern. Was meint ihr?

ranke
23.02.2011, 09:11
Vielleicht wäre es da einfach sinnvoller, anhand von Abstand und Geschwindigkeit einen vorgegeben Steuerwert zu errechnen und unabhängig von den "Eingaben" des Fahrers zu steuern. Was meint ihr?


Folgender Vorschlag:

Führungsgröße/Sollwert:
Aus der Abstandsmessung und der momentanen Geschwindigkeit errechnet man eine maximal zulässige Geschwindigkeit. Das ist auch die Führungsgröße, außer die Knüppelstellung gäbe eine geringere Geschwindigkeit vor, dann wäre die Knüppelstellung die Führungsgröße

Ist-Wert:
die momentan gemessene Fahrgeschwindigkeit. Wenn man die nicht messen kann oder will, dann kann man sich überlegen, ob man die auch aus sonst vorhandenen Werten abschätzen kann.

Regler:
rechnet die Differenz aus Soll-Wert und Ist-Wert. Die Regeldifferenz wird im einfachsten Fall noch mit einem (noch zu bestimmenden) Faktor multipliziert und wie weiter oben besprochen skaliert (P-Regler). Will man weiter optimieren, dann kann man auch etwas komplizierter rechnen (I- und D-Anteile).

-skunk-
28.02.2011, 12:49
Ja, fast genau so sehe ich das auch :)

Die von dir angesprochene, maximal zul. Geschwindigkeit ist also der Wert, um den ggf. "gekürzt" wird. Geregelt wird dann also nur, wenn meine Knüppelstellung diesen "Wert" überschreitet. (Nicht ganz so einfach, aber so in etwa :) )

Mein Ansatz wäre momentan die Zeit, um diesen Wert zu bestimmen. Wenn die Zeit, bis das Auto die Wand erreicht, konstant bleibt (per Definition), ist sie nach s=v*t abhängig von
a) meiner Geschwindigkeit v und
b) dem Abstand s zur Wand.

Wenn ich diesen Wert unterschreite, kann ich mit v = s/t die maximal zulässige Geschwindigkeit errechnen.

Wäre der Ansatz akzeptabel zum weiter verfolgen...oder gibt's da bessere Ansätze?

ranke
28.02.2011, 19:48
Wenn man eine bei gegebener Geschwindigkeit v eine konstante Bremsverzögerung a über die Bremsstrecke s annimmt dann gilt:
s = v^2/(2a)
für die Bremsstrecke bis zum Stillstand.
Selbstverständlich ist die konstante Bremsverzögerung nur eine willkürliche Annahme (aber vielleicht fürs erste einmal akzeptabel).

PICture
28.02.2011, 20:27
Hallo!

Sorry, dass ich mich einmische, aber das Problem scheint mir mit einfachen Regler unlösbar zu sein. Meine Meinung nach müsste man das Fahrzeug als Mealy-Automaten realisieren und die Eingabe vom Joystick nicht als Sollwert für Geschwindigkeit/Bremsen annehmen. ;)

MfG

-skunk-
28.02.2011, 21:37
@ranke:
Ja, die Bremsweg-Formel ist mir auch über den Weg gelaufen. Allerdings fehlt mir diese Bremsbeschleunigung so gänzlich...und wenn wir dann bei "irgendwas" annehmen sind, fällt mir wieder (zu) viel ein :\

@PICture:
Ja...das ist alles nichts Halbes und nichts Ganzes hier, das hab ich auch bemerkt :)

ranke
01.03.2011, 06:51
Allerdings fehlt mir diese Bremsbeschleunigung so gänzlich...und wenn wir dann bei "irgendwas" annehmen sind, fällt mir wieder (zu) viel ein :\


Wenn das Fahrzeug schon existiert, kann man die möglichen Bremsbeschleunigungen abschätzen. Denkbar wäre, die Auslaufstrecke ohne Antrieb (exakter: ohne dass durch den Antriebsmotor Strom fließt) aus einer bekannten Geschwindigkeit zu messen. Alternativ kann man auch den Rollwiderstand des Fahrzeugs messen (auch ohne Motorstrom).
Ein dritter möglicher Versuch wäre die Messung der Energieaufnahme des Fahrzeugs bei gleichmäßiger Geschwindigkeit.
Alle drei Versuche sollten zu einer (reibungsbedingten) Bremsbeschleunigung führen, die erreicht wird, wenn den Motoren keine elektrische Energie zugeführt wird. Durch Bestromung der Motoren kann die Bremsbeschleunigung dann entsprechend variiert werden. Auch diese Variation kann man abschätzen, weil man den Zusammenhang zwischen Bestromung und Moment am Reifen durchaus rechnen kann.
Sicherlich werden da keine Zahlenwerte mit Genauigkeiten auf vier Nachkommastellen herauskommen. Der Rollwiderstand ist auch stark vom Boden abhängig, für die Versuche sollte man einen glatten Boden mit wenig Rollwiderstand (worst case = längster Bremsweg) aussuchen.

@picture:
Ganz so negativ sehe ich es eigentlich nicht. Es gibt sicher Situationen, wo die Sache versagt (z.B. Einlenken auf ein Hindernis, das der Sensor nicht früher erfassen konnte, ...). Vermutlich ist auch alles andere als ein einfacher P-Regler Unsinn, weil ja die Anfangsbedingungen beim Reglereinsatz nicht stimmen. Ich werde trotzdem bei Gelegenheit mal googlen, was ein Mealy-Automat ist.

PICture
01.03.2011, 15:58
Hallo!

Ein Fahrzeug als Automaten, der vom Fahrer gesteuert wird, sehe ich eher positiv ... :)

Als Beispiel für Mealy-Automaten könnte man ein tagtäglich benutztes Auto sehen, wo mehrere innere Prozesse (z.B. Akkuaufladen, Kraftsoffdosierung) automatisch ablaufen und die Fahrt mit quasi Joystick (Lenkrad, zwei Pedale und Gangschaltung) gesteuert wird. Es ist sicher einfacher als vollautonomer Automat.

So wie du schon erwähnt hast, ohne exakter Kennung von Parameter allen verwendeten Objekten, Sensoren und Regler lässt sich die Steuerung leider nicht rein theoretisch durch Diskussion praktisch realisieren, da alles unbekanntes (was z.b. nicht gemessenen wurde) einfach fehlt ... :(

In der Praxis jede erfolgreiche Entwicklung fängt mit Sammeln von realen Daten an ...

MfG