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.
Druckbare Version
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. :-(Zitat:
Zitat von -skunk-
Gruß Richard
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.Zitat:
Zitat von -skunk-
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.Zitat:
Zitat von -skunk-
1) In meinem Controller läuft ein Timer 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, 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 Getriebeü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?
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. :-(Zitat:
Zitat von oberallgeier
Gruß Richard
Nix nur Brutalo. Beim WALL R habe ich KEINE Geschwindigkeitsregelung - schaut euch mal dazu das Video an, wie gut das geht. Dort wird die Geschwindigkeit nur gesteuert durch Vorgabe von PWM-Werten ohne Rückkopplung auf den Antrieb. Angetrieben wird über die Hinterachse (der Z4 hat eben KEINEN Vorderradantrieb) und die Richtung wird mittels Servo und Spurstange in konventioneller Automobiltechnik beeinflusst. Aufbau siehe hier. 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.Zitat:
Zitat von Richard
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).
@oberallgeier: Erst mal vielen Dank für deinen Sarkasmus. Das lockert den Umgang hier doch auf :\
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.Zitat:
Zitat von oberallgeier
Sicherlich habe ich deine Posts gelesen. Dass nach dem Lesen noch nicht alle Fragen geklärt sind, ist doch aber okay. Oder? :-bZitat:
Zitat von oberallgeier
Danke!Zitat:
Zitat von oberallgeier
GENAU hier hakt's (vll hackt's auch) bei mir.Zitat:
Zitat von oberallgeier
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).Zitat:
Zitat von ranke
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?
Immer doch \:D/Zitat:
Zitat von oberallgeier
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.Zitat:
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.
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).
Deswegen kapier ichs vielleicht auch nicht :) Bzw. habe ich die dynamische Sollwertbestimmung noch nicht so raus.Zitat:
Zitat von ranke
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!!!
((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.