Schnellstmöglich wenden



  • Hi,

    gegeben sind 2 Punkte P1, P2.
    Ich möchte von P1 nach P2 fahren, dabei kann ich an den Parametern Drehgeschwindigkeit und Beschleunigung(negativ falls gebremst wird) drehen.

    Wenn meine Ausrichtung nun engegen der von P2 ist und ich bereits Geschwindikeit besitze, dann sollte ich ja bremsen und mich Richtung P2 drehen. Die Frage nun Bremse ich bis 0 m/s Runter, warte bis ich auf P2 ausgerichtet bin und beschleunige dann wieder? Oder Kann ich schon eher wieder Beschleunigen?


  • Mod

    Hast du denn keine weiteren Randbedingungen? Wenn Drehgeschwindigkeit und Beschleunigung frei wählbar sind, was hält dich dann davon ab, schlagartig zu bremsen, dich mit einem Schlag auf das Ziel auszurichten und dann wieder unendlich zu beschleunigen? Dann bist du quasi sofort da. Prinzipiell ist sogar der genaue Weg egal.



  • Sorry, das habe ich unglücklich formuliert.
    Randbedingung sollte "realistisch" sein:
    Maximal Geschwindikeit,
    Beschleunigen/Bremsen ist Konstant, jedoch kann z.B. stärker gebremst als beschleundigt werden.
    Maximale drehgeschwindikeit Konstant.

    Die Parameter sind dann nicht Beschleunigung und Drehgeschwindigkeit, sondern
    "Soll beschleundigt werden", "Soll gebremst werden" und "Soll ich mich drehen".



  • Realistischer wäre ja eher, dass die Ableitung der Rotationsgeschwindigkeit begrenzt ist, aber das auch abhängig von der Geschwindigkeit und gleichzeitig der Absolutwert durch die Geschwindigkeit begrenzt wird 😉 Wird halt immer einfacher, das Modell 😉


  • Mod

    Willst du eigentlich eine konkrete Lösung? Oder willst du bloß wissen, ob der optimale Weg nicht vollständiges Abbremsen, Drehen, dann Beschleunigen ist? Denn die Antwort ist dann ziemlich offensichtlich, dass dies nicht die optimale Methode (bei "realistischen" Bedingungen) ist, wie du leicht experimentell nachvollziehen kannst.



  • Ich möchte schon eine implentierbare Lösung haben, nur sieht es mmn. doof aus wenn ich einfach abbremse(auf 0), drehe(auf Ziel) und dann erst beschleunige. Ich möchte, bremsen/beschleunigen und drehen gleichzeitig in einem Logigschritt machen, sofern es sinnvoll(komme schneller ans Ziel) ist.

    Mal ein bischen (naiven) Code:

    Vector2f DirectionBeforeMoving(calcDiff(m_DesiredDestination, Position));
    				Vector2f DirectionAfterMoving(calcDiff(m_DesiredDestination, PosAfterMoving));
    				//Decelerate, if continue speeding would increase the Distance
    				if(calcLength(DirectionAfterMoving) > calcLength(DirectionBeforeMoving)) {					
    					if(m_Velocity - m_Deceleration > 0.f) {
    						m_Velocity -= m_Deceleration;
    					} else {
    						m_Velocity = 0.f;
    					}
    				} else {					
    					if(m_Velocity + m_Acceleration <  m_MaxVelocity) {
    						m_Velocity += m_Acceleration;
    					} else {
    						m_Velocity = m_MaxVelocity;
    					}
    				}
    

    wenn man kurz darüber nachdenkt, stellt man fest, das ein "Orbiten" um das Ziel schnell das Ergebnis ist, das möchte ich natürlich nicht.


  • Mod

    Jetzt ist es auch noch implementierbar. Man kann dir schlecht helfen, wenn du so schüchtern mit Informationen bist. Was treibst du überhaupt? Was soll das werden? Was sind wirklich die genauen Nebenbedingungen?



  • Ich möchte Ein Objekt von Punkt 1 nach Punkt 2 bewegen.
    In möglichst kurzer Zeit.

    Ich habe eine Orientierung, die ich nur durch Drehung ändern kann, dabei kann ich mich pro Zeitschritt zwischen um einen Wert \in [-d\phi..d\phi] drehen.
    Ich habe eine Geschwindigkeit (dv_x,dv_y)(dv\_x, dv\_y), welche ich nur durch bremsen und beschleunigen beinflussen kann. Dabei ist Bremsen und Beschleunigung jeweils Konstant, aber nicht unendlich o.ä..

    In jedem Zeitschritt bewege ich mich um ein Stück (dv_x,dv_y)(dv\_x, dv\_y).
    (dv_x,dv_y)(dv\_x, dv\_y) ist beschränkt(Maximale geschwindigkeit).
    Wie berechne ich nun in einem einzelnen Zeitschritt dϕd\phi und ob ich beschleunigen sollte oder nicht,
    um in möglichst wenig Zeitschritten an P2 zu kommen?

    Beispiel: ein Punktförmiges Auto will von P1(eigene Position) nach P2.
    Dabei kann ich das Auto ein Stück drehen und ein stück beschleunigen xor ein stück abbremsen. Aber um wieviel soll ich drehen, abbremsen/beschleunigen?



  • Das klingt nach einem Variationsproblem (Variationsrechnung).
    Du musst deine Trajektorie bestimmen und dann darauf regeln diese entlang fahren, womit wir dann bei optimaler Steuerung wären. Ist aber wohl bissl oversized für dich, oder?



  • Hört sich für mich nach Bahnplanung/Interpolation/Approximation mit Nebenbedingungen an:

    Im Grund hast du eine unbekannte Funktion f(x, y, z, roll, pitch, yaw) und willst diese zwischen den Punkten P1 und P2 unter Nebenbedingungen interpolieren. Das Ganze ergibt ein lineares Gleichungssystem aus denen du die Koeffizienten von f bestimmen kannst. Erst dann wird die resultierende Kurve f diskretisiert, also in deltaT Schritten abgetastet.

    Nebenbedingungen wie die Position P1, P2, Geschwindigkeiten, Beschleunigungen sind da kein Problem. Wie man da jetzt die Nebenbedingung "in möglichst kurzer Zeit" da hineinbaut, ist mir jetzt im moment auch unklar.



  • Bitte ein Bit schrieb:

    Wie man da jetzt die Nebenbedingung "in möglichst kurzer Zeit" da hineinbaut, ist mir jetzt im moment auch unklar.

    Genau das macht die Variationsrechnung für dich. Wäre ich nicht so Latex faul, würden ich nen kleines Beispiel mit Herleitung tippen 🙂

    Wenn du zwei Punkte P1 und P2 hast, ist die Pfadlänge dazwischen S(y) = Int(Sqrt(1+y'(x)^2)) und bei konstanter Geschw. die Zeit zwischen den zwei Punkten S(y) = Int(Sqrt(1+y'(x)2)/c2). Jetzt suchst du ein y(x), dass dieses Funktional minimiert, nach ein bisschen Variationsrechnung landest du bei der Euler-Lagrange-Gleichung: http://en.wikipedia.org/wiki/Calculus_of_variations#Euler.E2.80.93Lagrange_equation (letzter Kasten). Diese Lösen und du solltest für y(x), y(x) = m*x+b, also die Gerade rauskriegen.

    Wenn du jetzt noch Nebenbedingungen (Zwangsbedingungen) hast, musst du da noch http://en.wikipedia.org/wiki/Lagrange_multiplier hineinbringen danach ... blablabalbalaa ... Irgendwann landest du dann bei der optimalen Steuerung.

    Im deutschen Wiki http://de.wikipedia.org/wiki/Optimale_Steuerung steht sogar:

    Zum Beispiel könnte ein Autofahrer versuchen, ein Ziel in möglichst geringer Zeit zu erreichen. Wann schaltet der Autofahrer am besten? Möglicherweise müssen gewisse Nebenbedingungen, z. B. Geschwindigkeitsbegrenzungen, eingehalten werden. Ein anderer Autofahrer versucht dagegen vielleicht, den Benzinverbrauch zu minimieren, d. h., er wählt eine andere Zielfunktion.


  • Mod

    @KasF: Du minimierst gerade die Pfadlänge, nicht die Zeit. Die Geschwindigkeit ist nicht konstant und die Wirkung braucht auch nicht stationär zu sein. Aber prinzipiell ist das der Ansatz, ja, bloß andere Gleichungen.



  • SeppJ schrieb:

    Du minimierst gerade die Pfadlänge, nicht die Zeit.

    S(y,y') = Int(Sqrt(1+y'(x)2)/c2) , da hinten ist noch ein geteilt c^2.

    SeppJ schrieb:

    Die Geschwindigkeit ist nicht konstant

    KasF schrieb:

    bei konstanter Geschw.

    -> habe ich mal der einfachheit halber so gewählt 🙂 Normal taucht dort noch irgendwo ein weiteres y' auf.

    SeppJ schrieb:

    nd die Wirkung braucht auch nicht stationär zu sein

    Wieso? Muss es doch, er will doch die Zeit minimieren.


  • Mod

    KasF schrieb:

    SeppJ schrieb:

    Du minimierst gerade die Pfadlänge, nicht die Zeit.

    S(y,y') = Int(Sqrt(1+y'(x)2)/c2) , da hinten ist noch ein geteilt c^2.

    Schon, aber mit konstanter Geschwindigkeit ist das trotzdem eine Minimierung des Weges. Der Witz an der Aufgabe ist doch gerade, dass die Geschwindigkeit nicht konstant ist.

    SeppJ schrieb:

    nd die Wirkung braucht auch nicht stationär zu sein

    Wieso? Muss es doch, er will doch die Zeit minimieren.

    Und? Minimierung der Zeit ist keine notwendige Bedingung für Konstanz der Wirkung.

    (Nur damit das klar ist: Wenn man am Ende das Gesamtsystem aus der Punktmasse und den auf sie wirkenden Kräften betrachtet, dann ist die Wirkung auf der Bahn natürlich schon minimal. Aber wir wollen hier ja wissen, welche Kräfte aufgebracht werden müssen, damit die Bahn eine bestimmte Bedingung erfüllt. Das heißt, Minimierung der Wirkung gibt uns nur die Bahn zu einer Kraftfunktion, wir wollen aber die Kraftfunktion variieren, so dass die Bahn minimale Zeit benötigt.
    )



  • SeppJ schrieb:

    Schon, aber mit konstanter Geschwindigkeit ist das trotzdem eine Minimierung des Weges.

    Schon klar, aber nur weil wir in R^2, hier kommt für beides eben die Gerade raus.

    SeppJ schrieb:

    Und? Minimierung der Zeit ist keine notwendige Bedingung für Konstanz der Wirkung.

    Damit ich das richtig verstehe, wir reden schon beide vom Funktional/Wirkung S(y) = Int(L(y,y',t)). S(y) beschreibt mir jetzt , wie sich die Fahrtzeit, für y Ort und y' Geschwindigkeit verhält. Dann muss ich ein y so finden, sodass die Variation δS = 0, also stationär ist und meine Wirkung minimiert wurde und ich so dir kürzeste Fahrzeit gefunden habe. ( http://en.wikipedia.org/wiki/Principle_of_least_action ) ... oder bringe ich etwas durcheinander. Lerne mich gerade auch erst in dieses Thema ein.



  • SeppJ schrieb:

    Der Witz an der Aufgabe ist doch gerade, dass die Geschwindigkeit nicht konstant ist.

    Ja, das war mir eben aber erstmals egal. Ich wollte es nur prinzipiell aufzeigen.


  • Mod

    KasF schrieb:

    Damit ich das richtig verstehe, wir reden schon beide vom Funktional/Wirkung S(y) = Int(L(y,y',t)). S(y) beschreibt mir jetzt , wie sich die Fahrtzeit, für y Ort und y' Geschwindigkeit verhält. Dann muss ich ein y so finden, sodass die Variation δS = 0, also stationär ist und meine Wirkung minimiert wurde und ich so dir kürzeste Fahrzeit gefunden habe. ( http://en.wikipedia.org/wiki/Principle_of_least_action ) ... oder bringe ich etwas durcheinander. Lerne mich gerade auch erst in dieses Thema ein.

    Wirkung ist nicht Fahrzeit. Wenn du die Wirkung minimierst, hast du die Wirkung minimiert, nicht die Fahrzeit.



  • SeppJ schrieb:

    Wirkung ist nicht Fahrzeit. Wenn du die Wirkung minimierst, hast du die Wirkung minimiert, nicht die Fahrzeit.

    Ich denk drüber nach 🙂


Anmelden zum Antworten