Vermeiden des Umlaufens beim Lenkverhalten

9

Ich habe eine Rakete, die Verfolgungsverhalten ausübt, um ihr (stationäres) Ziel zu verfolgen (und zu versuchen, es zu treffen).

Es funktioniert einwandfrei, solange Sie beim Abschuss der Rakete nicht straffen . Wenn Sie strafeln, neigt die Rakete dazu, ihr Ziel zu umkreisen.

Geben Sie hier die Bildbeschreibung ein

Ich habe dies behoben, indem ich zuerst tangential zum Ziel beschleunigte, zuerst die tangentiale Komponente der Geschwindigkeit tötete und dann nach dem Ziel suchte.

Geben Sie hier die Bildbeschreibung ein

Also beschleunige ich in -vT, bis vT fast 0 ist. Dann beschleunige ich in Richtung vN.

Während das funktioniert, suche ich nach einer eleganteren Lösung, bei der die Rakete das Ziel treffen kann, ohne zuerst die tangentiale Komponente explizit zu töten.

Bobobobo
quelle
Ich glaube nicht, dass Sie eine zufriedenstellende Antwort erhalten können, ohne zu erklären, was Ihr Lenkalgorithmus ist. Ich bin mir ziemlich sicher, dass das Problem in Ihren Heuristiken liegt.
Sam Hocevar
1
Eigentlich war dies die Antwort, die ich verwendet habe
Bobobobo
Mögliches Duplikat von So verhindern Sie, dass Zielsuchkräfte ihre Ziele umkreisen
Trevor Powell

Antworten:

5

Es sieht so aus, als ob das Problem darin besteht, dass die Rakete sich einfach auf das Ziel richtet, ohne Rücksicht auf die aktuelle Geschwindigkeit. Weisen Sie Ihrer Rakete einen maximalen Winkel zu, um den der Schub von der Bewegungslinie abweichen kann.

Bei jeder Führungsiteration berechnen Sie die Geschwindigkeit senkrecht zum Ziel. Finden Sie heraus, um wie viel es den Motor kippen muss, um diese Geschwindigkeitskomponente auf Null zu setzen, und schneiden Sie diese dann so weit ab, dass sie den Motor maximal kippen kann.

Während des ersten Teils seines Fluges wird es sich etwas rechts von der Geraden in Abbildung 2 bewegen, aber während des Fluges wird der Motor diese Komponente auf Null setzen und direkt auf das Ziel zusteuern.

Beachten Sie, dass es in diesem Szenario nur einen Rahmen gibt, in dem der Motor eine andere Auslenkung als Null oder max. Wenn Sie ein sich bewegendes Ziel verfolgen, können Sie bei jedem Zyklus geringere Ablenkungen erzielen, wenn sich das Ziel bewegt.

Loren Pechtel
quelle
4

Es ist vielleicht nicht die elegante Lösung, nach der Sie suchen, aber ich habe festgestellt, dass wenn ich die Rakete verlangsame, wenn sie verfehlt, wenn sie sich dem Ziel nähert, sie effektiv schneller verfolgt und dreht und das Ziel treffen kann. Sie könnten die Drehrate der Rakete erhöhen, wenn sie näher kommt, anstatt die Geschwindigkeit zu verringern, aber dies könnte den Spielern ein "Wow, ich bin sicher, das würde eine böse Überraschung verpassen" geben.

Das sieht vielleicht nicht so gut aus, aber es verhindert auf jeden Fall, dass die Raketen umkreisen und der Feind die Rakete umkreist, bis der Treibstoff ausgeht.

Hier ist eine Demo, die ich von meiner Implementierung zusammengestellt habe (die dritte oder vierte Rakete demonstriert dies und erneut um 1:05 Uhr): http://www.youtube.com/watch?v=9uiGMC_nH2w

Sie können auch die Genauigkeit der Rakete erhöhen, wenn sie sich dem Ziel nähert (da sie eine engere Signatur hat, an der sie sich festhalten kann). Dies wird auch im Video ungefähr eine Minute später gezeigt. Der rote Kreis zeigt das tatsächliche Ziel der Rakete. Dies gibt ihm eine chaotische Flugbahn, wenn er sich auf große Entfernung befindet, und richtet sich dann auf, je näher er kommt.

Wie ich schon sagte, es ist vielleicht nicht die Antwort, die Sie suchen, aber ich hoffe, es hilft, wenn auch nur ein wenig.

David K.
quelle
Es ist ziemlich cool. Ich gehe für maximale Beschleunigung, aber die Rakete langsamer zu machen ist ein ordentlicher Trick (und kann verwendet werden, wenn Sie sie "Trick-Raketen" nennen?)
Bobobobo
4

Intuition

Hier ist eine Möglichkeit: Lassen Sie uns Ihr Diagramm drehen.

eine Drehung der ursprünglichen Problemdarstellung

Jetzt ist die Rakete eine Kanonenkugel !

Physik

Es hat eine feste Beschleunigung "nach unten", dh senkrecht zum Vektor von seinem Schussort zu seinem Ziel. Ich habe es oben als gestrichelte grüne Linie gezeichnet. Nennen wir das den Referenzhorizont . (Beachten Sie, dass dieser Referenzhorizont konstant ist! Die Rakete wurde von einer festen Position mit einer festen Position als Ziel abgefeuert.)

Wir wissen (aus Wikipedia ) für eine Kanonenkugel ohne Luftwiderstand, dass d = v^2 * sin(2 * theta) / g, wo

  • d ist die zurückgelegte horizontale Entfernung (Entfernung zwischen Schussort und Ziel)
  • v ist die Geschwindigkeit, mit der das Projektil abgefeuert wurde
  • thetaist der Winkel zum Horizont, unter dem das Projektil abgefeuert wurde ( Winkel des Feuerrichtungsvektors vom Referenzhorizont )

Neuanordnung der Gleichung für ggibt g = v^2 * sin(2 * theta) / d.

Die Konstante in der Kanonenkugelgleichung gist die Erdbeschleunigung . Wir können es als Beschleunigung aufgrund von Raketenantrieb verstehen . Das ist auch in Ordnung - es ist immer noch eine konstante Beschleunigung in eine konstante Richtung .

Was jetzt?

Führen Sie diese Gleichung aus, gwenn Sie die Rakete abfeuern. Hier erfahren Sie, um wie viel die Rakete senkrecht zum Referenzhorizont beschleunigt werden muss, um das Ziel zu treffen. Da die Richtung dieser Beschleunigung konstant ist, bildet sich keine Umlaufbahn.

Boom.

Anko
quelle
Dies ist ein ordentlicher Ansatz. Ich denke, dies wird dazu führen, dass die Rakete einen Kreis verfolgt . Sie liefern die Zentripetalkraft, die erforderlich ist, um einen Kreis zu umkreisen, der zufällig auf das Ziel auftrifft. Ich glaube, dass dies der Ansatz für rote Muscheln in Mario Kart gewesen sein könnte , weil ich immer dachte, dass sie dazu neigen, kreisförmig zu sein
Bobobobo
Die hier ausgeübte Kraft ist nicht zentripetal. Die Richtung der Kraft ist senkrecht zum Referenzhorizont, der sich nicht ändert, wenn das Ziel stationär ist. Dies bedeutet, dass kein Umlaufverhalten auftreten kann.
Anko
Ich habe die Antwort bearbeitet, um dies klarer zu machen.
Anko
@Anko: Ich bin nicht sicher, ob Ihre Mathematik hier für ein sich bewegendes Ziel funktioniert, da dies der Auslöser für den OP-Fall zu sein scheint.
Mooing Duck
@Mooing Sie haben Recht, dies würde nur für sich bewegende Ziele funktionieren, wenn sie sich vorhersehbar bewegen und Sie auf die Vorhersage zielen. In der Frage wird im ersten Satz ausdrücklich erwähnt, dass das Ziel stationär ist.
Anko