Ändern der Ausrichtung durch Anlegen von Drehmomenten


9

Angenommen, Sie haben ein Objekt, das frei im Raum schwebt. Sie haben einen Vektor, auf den dieses Objekt zeigen soll, und einen Vektor, der die Richtung darstellt, in die es gerade zeigt. Aus diesen beiden können Sie die Rotation (Matrix, Quaternion, was auch immer) erhalten, die die Änderung der Ausrichtung darstellt, um die beiden Vektoren in Ausrichtung zu bringen.

Wenn Sie nur die Möglichkeit haben, ein Drehmoment (Ableitung der Winkelgeschwindigkeit) auf Ihr Objekt aufzubringen, was ist ein guter Algorithmus zum Aufbringen eines Drehmoments über die Zeit, der das Ziel nicht überschreitet / unterschreitet?

(In diesem Fall handelt es sich um ein Raumschiff, das sich mithilfe von Triebwerken automatisch in Fahrtrichtung ausrichten möchte. Das Rollen ist irrelevant.)


Versuchen Sie, den Kraftstoffverbrauch (Gesamtmoment) oder die Geschwindigkeit zu optimieren? Startet das Schiff zu Beginn dieses Vorgangs mit einer Winkelgeschwindigkeit von Null?
Justin L.

Eine Geschwindigkeitsoptimierung würde eine nahezu unendliche Beschleunigung bedeuten, und eine Optimierung für den Kraftstoffverbrauch würde eine Beschleunigung von nahezu Null bedeuten. In der Praxis werde ich also einen Kompromiss verwenden, der gut aussieht. Ich hoffe, dass ich die Winkelgeschwindigkeit auf natürliche Weise in die Berechnung einbeziehen kann.
Karantza

Antworten:


4

Dies kann wie der ähnliche Fall für die lineare Beschleunigung behandelt werden.

Erste zu beachtende Tatsache: Da das Schiff mit einer Winkelgeschwindigkeit von Null startet und Sie möchten, dass es mit einer Winkelgeschwindigkeit von Null endet, bedeutet dies, dass die gesamte Geschwindigkeitsänderung gleich Null sein muss.

Daraus können wir erkennen, dass das Integral der Beschleunigung über die Zeit gleich Null sein muss - es muss genau so viel positive Beschleunigung wie negative Beschleunigung geben.

Daher muss Ihre Lösung, was auch immer sie ist, auf diese Eigenschaft beschränkt sein: Gleiche "Gesamt" -Beschleunigung vorwärts und rückwärts.

Die Form Ihres Beschleunigungs-Zeit-Diagramms sollte folgendermaßen aussehen:

Diagramm der Beschleunigung über die Zeit

Wenn man das betrachtet, gibt es so viele mögliche Formen und Gestalten, in denen Ihre Beschleunigung sein könnte! Lassen Sie uns einige Annahmen für die gewünschte Beschleunigungsform treffen, um eine einfache / präzise Antwort zu geben.

Um eine einfache Antwort zu erhalten, muss die Beschleunigung in einem von drei Zuständen erfolgen: vorwärts, rückwärts oder null. Vorwärts und rückwärts sind gleich groß und die Zustände können sofort umgeschaltet werden. (Es gibt kein allmähliches Hochfahren der Beschleunigung)

Mit dieser Gleichung können Sie die Änderung der Entfernung für eine bestimmte Beschleunigung über einen bestimmten Zeitraum ermitteln:

s = 0.5*a*t^2

Die einfachste Lösung wäre hier, zu beschleunigen, bis Sie den halben Punkt erreicht haben, und dann den Rest des Weges abzubremsen.

Wir nehmen Pdie Gesamtstrecke, die Sie zurücklegen möchten:

s = P/2
P/2 = 0.5*a*t^2
P = a*t^2
t^2 = P/a
t = sqrt(P/a)

Also im Wesentlichen:

  1. Beschleunigen Sie afür sqrt(P/a)Zeiteinheiten (Einheiten basierend auf Ihren Einheiten für die Beschleunigung)
  2. Verzögern Sie mit der gleichen Größe für die gleiche Zeit

Dies ist nicht die einzige Lösung. Sie gelangen in kürzester Zeit dorthin ( 2*sqrt(P/a)). Aber was ist, wenn Sie eine entspanntere Version wünschen?

In diesem Fall können Sie 1/3 des Weges beschleunigen, für 1/3 ausrollen und den Rest des dritten abbremsen. Oder 1/4, rollen Sie für 1/2, bremsen Sie auch 1/4 ab.

Oder Sie könnten für eine festgelegte Zeit beschleunigen und dann für eine festgelegte Zeit abbremsen, aber warten Sie, bis Sie die genaue Position erreicht haben, bevor Sie mit dem Abbremsen beginnen.


Sie haben sehr Recht damit, dass dies bei linearen Bewegungen der Fall ist. Mein Hauptanliegen war die Verwendung eines solchen Algorithmus mit einer Physik-Engine, die mir nur eine Gier-, Nick- und Rollsteuerung für das Drehmoment bietet. Diese Achsen sind nicht orthogonal, sobald Sie anfangen, sich zu drehen, also hatte ich gehofft, dass es eine bessere Lösung gibt. Ihr Timing-Ansatz gilt jedoch weiterhin.
Karantza

Ah; Entschuldigung, ich muss Ihre Frage nicht verstanden haben. Ich bin mir nicht sicher, ob ich gründlicher antworten kann, ohne die technischen Daten Ihres Motors zu sehen. Aber gibt es doch eine Möglichkeit, ein konstantes Drehmoment in einer konstanten Richtung aufzubringen?
Justin L.

Ja, Ihre Antwort ist wahrscheinlich so nah wie möglich. Ich löste mein spezielles Problem, indem ich die Quaternionen hackte, bis ich etwas bekam, für das der lineare Algorithmus gelten würde. Vielen Dank!
Karantza
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.