Éviter l'orbite dans un comportement de direction de poursuite

9

J'ai un missile qui poursuit un comportement pour suivre (et essayer d'impact) sa cible (stationnaire).

Cela fonctionne très bien tant que vous ne mitraillez pas lorsque vous lancez le missile. Si vous mitraillez, le missile a tendance à orbiter autour de sa cible.

entrez la description de l'image ici

Je fixe ce par l' accélération tangentielle par rapport à la cible première , tuant la composante tangentielle de la vitesse d' abord, puis beelining pour la cible.

entrez la description de l'image ici

J'accélère donc en -vT jusqu'à ce que vT soit proche de 0. Accélère ensuite en direction de vN.

Pendant que cela fonctionne, je cherche une solution plus élégante où le missile est capable d'impact sur la cible sans tuer explicitement le composant tangentiel en premier.

bobobobo
la source
Je ne pense pas que vous puissiez obtenir une réponse satisfaisante sans expliquer quel est votre algorithme de pilotage. Je suis sûr que le problème réside dans vos heuristiques là-bas.
sam hocevar
1
En fait, c'est la réponse que j'ai utilisée
bobobobo

Réponses:

5

Il semble que le problème est que le missile se pointe simplement sur la cible sans tenir compte de sa vitesse actuelle. Attribuez à votre missile un angle maximum par lequel la poussée peut s'écarter de la ligne de mouvement.

À chaque itération de guidage, vous calculez sa vitesse perpendiculaire à la cible. Calculez combien il doit faire basculer son moteur afin de mettre à zéro cette composante de sa vitesse, puis coupez-la au maximum pour faire basculer son moteur.

Au cours de la première partie de son vol, il se déplacera quelque peu à droite de la ligne droite de la figure n ° 2, mais à mesure qu'il vole, le moteur mettra à zéro cette composante et finira par se diriger directement vers la cible.

Notez que dans ce scénario, il n'y aura qu'une seule trame dans laquelle le moteur aura une déviation de tout autre que zéro ou max. Si vous suiviez une cible en mouvement, vous pourriez obtenir des déviations moindres à chaque cycle lorsque la cible se déplaçait.

Loren Pechtel
la source
4

Ce n'est peut-être pas la solution élégante que vous recherchez, mais j'ai constaté que si je ralentis le missile, s'il va manquer, à mesure qu'il approche de la cible, il suit et tourne efficacement plus rapidement et peut toucher la cible. Vous pourriez augmenter la vitesse de rotation du missile à mesure qu'il se rapproche, plutôt que de réduire la vitesse, mais cela pourrait donner aux joueurs une "mauvaise surprise, je suis sûr que ça allait manquer".

Cela n'a peut-être pas l'air si beau, mais cela empêche certainement les missiles d'orbite et de l'ennemi mitraillant le missile jusqu'à épuisement du carburant.

Voici une démo que j'ai mise en place de mon implémentation (le troisième ou quatrième missile le démontre, et à nouveau à 1h05): http://www.youtube.com/watch?v=9uiGMC_nH2w

Vous pouvez également augmenter la précision du missile à l'approche de la cible (car il a une signature plus proche pour se verrouiller). Cela est également montré dans la vidéo environ une minute plus tard. Le cercle rouge montre la cible réelle du missile. Cela lui donne une trajectoire de vol chaotique à longue distance, puis se redresse plus il se rapproche.

Comme je l'ai dit, ce n'est peut-être pas la réponse que vous cherchez, mais j'espère que cela vous aidera un peu.

David K
la source
C'est plutôt cool. Je vais pour une accélération maximale, mais le ralentissement du missile est une astuce intéressante (et peut être utilisé si vous les appelez des "missiles
pièges
4

Intuition

Voici une façon: tournons votre diagramme.

une rotation de l'illustration du problème d'origine

Maintenant, la fusée est un boulet de canon !

La physique

Il a une accélération fixe "vers le bas" c'est-à-dire perpendiculaire au vecteur de son emplacement de tir à sa cible. Je l'ai dessiné ci-dessus comme une ligne verte en pointillés. Appelons cela l' horizon de référence . (Notez que cet horizon de référence est constant! La fusée a été tirée à partir d'une position fixe avec une position fixe comme cible.)

Nous savons (de wikipedia ) pour un boulet de canon sans résistance à l'air, que d = v^2 * sin(2 * theta) / g, où

  • d est la distance horizontale parcourue (distance entre le lieu de tir et la cible)
  • v est la vitesse à laquelle le projectile a été tiré
  • thetaest l'angle par rapport à l'horizon sur lequel le projectile a été tiré ( angle de vecteur de direction de tir par rapport à l' horizon de référence )

Réorganiser l'équation pour gdonne g = v^2 * sin(2 * theta) / d.

La constante de l'équation du boulet de canon,, gest l' accélération due à la gravité . On peut considérer qu'il s'agit d'une accélération due à la propulsion d'une fusée . C'est bien aussi - c'est toujours une accélération constante dans une direction constante .

Maintenant quoi?

Exécutez cette équation pour gquand vous tirez la fusée. Il vous dira combien d'accélérer la fusée perpendiculairement vers l'horizon de référence, afin de toucher la cible. Puisque la direction de cette accélération est constante, une orbite ne se formera pas.

Boom.

Anko
la source
Il s'agit d'une approche soignée. Je pense que cela va amener la fusée à tracer un cercle , vous fournissez la force centripète requise pour orbiter autour d'un cercle qui se trouve avoir un impact sur la cible. Je crois que cela a peut-être été l'approche utilisée pour les obus rouges dans Mario Kart , parce que j'ai toujours pensé qu'ils avaient tendance à arc en cercle
bobobobo
La force appliquée ici n'est pas centripète. La direction de la force est perpendiculaire à l'horizon de référence, qui ne change pas si la cible est immobile. Cela signifie qu'un comportement en orbite ne peut pas se produire.
Anko
J'ai édité la réponse pour que ce soit plus clair.
Anko
@Anko: Je ne suis pas certain que vos calculs fonctionnent ici pour une cible en mouvement, comme cela semble être le déclencheur du cas des PO.
Mooing Duck
@Mooing Vous avez raison, cela ne fonctionnera pour les cibles en mouvement que si elles se déplacent de manière prévisible et que vous ciblez la prédiction. La question mentionne cependant spécifiquement que la cible est immobile dans la première phrase.
Anko