Wie bewege ich ein Fahrzeug zu einem Punkt und halte an, ohne zu überschießen oder zu schwingen?


9

Ok, denken Sie daran, wir haben ein Fahrzeug wie das, das ich in meiner Antwort auf diese Frage beschrieben habe , mit einer 2D-Position, Geschwindigkeit, Winkelgeschwindigkeit und Widerstand / Reibung. Es kann um einen variablen Betrag beschleunigen und brechen, aber nicht sofort anhalten oder sofort die Höchstgeschwindigkeit erreichen. Wie kann ich es zu einem bestimmten Punkt bewegen und in der schnellstmöglichen Zeit anhalten, ohne zu überschießen oder zu schwingen?

Ich dachte so etwas wie:

  • in Richtung Zielposition drehen.
  • beschleunigen
  • Schauen Sie 1 Tick voraus und fragen Sie: "Wenn ich die Pausen beim nächsten Tick anwenden würde, würde ich das Ziel überschreiten?"
  • Wenn es zu einem Überschwingen kommen würde, wenden Sie die Pausen jetzt um einen gewissen Betrag an.

Ich bin sicher, dass dies ein gelöstes Problem ist und es wahrscheinlich eine bessere Methode als die von mir beschriebene gibt.

Antworten:


4

Lenkverhalten für autonome Zeichen . Check out Suche und Ankunft.


1
Ideal für Boids oder Raumschiffe, aber um sie auf die Fahrzeugphysik anzuwenden, müssen Sie den resultierenden Vektor interpretieren, und Sie kehren wieder zum ursprünglichen Problem zurück.
Tenpn

3

Wenn Sie mithilfe von Kalkül Ihre Geschwindigkeit und maximale Verzögerungsrate kennen, können Sie Ihren minimalen Bremsweg kennen. In diesem Sinne können Sie genau wissen, wann Sie die Bremsen betätigen müssen (abgesehen von Rundungs- / Quantisierungsfehlern), um an einem bestimmten Punkt anzuhalten.

Hoffentlich wird jemand, der besser in Mathematik ist als ich, die eigentliche Formel veröffentlichen ...


2
finalPositionDelta = -0.5 * sqr(currentSpeed) / maximumDecelerationDies setzt jedoch voraus, dass Ihre Verzögerung eine Konstante ist, was je nach Tiefe Ihrer Simulation möglicherweise nicht der Fall ist. Ich würde mit Ranieris Lösung gehen. (whoops sorry es ist DIV Verzögerung, nicht mul)
Tenpn

Ja, diese Methode ist auch dann noch nützlich, wenn Sie sie als Steuerungssystemproblem betrachten, da das Verständnis der beteiligten Gradienten dazu beitragen sollte, Instabilität oder Schwingungen bei der Fehlermessung zu vermeiden.
Kylotan


1

Manchmal müssen Sie in der Spieleentwicklung Verknüpfungen verwenden. Die Abkürzung wird hier als Impuls bezeichnet, was physikalisch gesehen eine sehr große Kraft ist, die in sehr kurzer Zeit ausgeübt wird. Anstatt es im Laufe der Zeit zu integrieren, wenden Sie es einfach als direkte Änderung auf den Parameter an: Setzen Sie die Geschwindigkeit auf 0.

Die Frage ist: Möchten Sie die Verknüpfung verwenden oder nicht?


2
Ich mache mir keine Sorgen um Abkürzungen, wenn diese für den Spieler unsichtbar sind, aber wenn ein Fahrzeug an Ort und Stelle stehen bleiben könnte, würde es sehr seltsam aussehen.
Iain

1
Das ist sicherlich richtig, aber es hilft, nach einer Verzögerung genau an dem Punkt anzuhalten, an dem Sie es möchten, um komplexe Berechnungen zu vermeiden und den Zeitschritt zu oft zu teilen.
ADB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.