Evitar la órbita en el comportamiento de dirección de búsqueda

9

Tengo un misil que persigue el comportamiento para rastrear (y tratar de impactar) su objetivo (estacionario).

Funciona bien, siempre y cuando no estés atacando cuando lanzas el misil. Si estás atacando, el misil tiende a orbitar a su objetivo.

ingrese la descripción de la imagen aquí

Arreglé esto acelerando tangencialmente al objetivo primero , matando primero el componente tangencial de la velocidad y luego dirigiéndome hacia el objetivo.

ingrese la descripción de la imagen aquí

Así que aceleré en -vT hasta que vT sea casi 0. Luego aceleré en la dirección de vN.

Mientras eso funciona, estoy buscando una solución más elegante donde el misil pueda impactar al objetivo sin matar explícitamente el componente tangencial primero.

bobobobo
fuente
No creo que pueda obtener una respuesta satisfactoria sin explicar cuál es su algoritmo de dirección. Estoy bastante seguro de que el problema radica en su heurística allí.
sam hocevar
1
En realidad, esta fue la respuesta que usé
bobobobo

Respuestas:

5

Parece que el problema es que el misil simplemente apunta al objetivo sin tener en cuenta su velocidad actual. Asigne a su misil un ángulo máximo por el cual el empuje puede desviarse de la línea de movimiento.

En cada iteración de guía, calcula su velocidad perpendicular al objetivo. Calcule cuánto debe inclinar su motor para poner a cero este componente de su velocidad y luego recorte esto al máximo que pueda inclinar su motor.

Durante la primera parte de su vuelo, se moverá un poco a la derecha de la línea recta en la figura # 2, pero a medida que vuela, el motor pondrá a cero este componente y terminará yendo directamente hacia el objetivo.

Tenga en cuenta que en este escenario solo habrá un cuadro en el que el motor tiene una desviación de cualquier cosa que no sea cero o máximo. Si seguías un objetivo en movimiento, podrías obtener desviaciones menores en cada ciclo a medida que el objetivo se movía.

Loren Pechtel
fuente
4

Puede que no sea la solución elegante que busca, pero descubrí que si ralentizo el misil, si va a fallar, a medida que se acerca al objetivo, efectivamente sigue y gira más rápido y puede golpear el objetivo. Podrías aumentar la velocidad de giro del misil a medida que se acerca, en lugar de reducir la velocidad, pero esto podría dar a los jugadores una sorpresa desagradable 'wow, estoy seguro de que iba a perder'.

Puede que esto no se vea tan bien, pero ciertamente evita que los misiles orbiten y que el enemigo aplaste el misil hasta que se agote el combustible.

Aquí hay una demostración que he reunido de mi implementación (el tercer o cuarto misil lo demuestra, y nuevamente a la 1:05): http://www.youtube.com/watch?v=9uiGMC_nH2w

También puede aumentar la precisión del misil a medida que se acerca al objetivo también (ya que tiene una firma más cercana para bloquear). Esto se muestra en el video también alrededor de un minuto. El círculo rojo muestra el objetivo real del misil. Esto le da una ruta de vuelo caótica cuando está a una distancia larga, y luego se endereza cuanto más se acerca.

Como digo, puede que no sea la respuesta que está buscando, pero espero que sea de ayuda un poco.

David K
fuente
Es muy bueno Voy por la aceleración máxima, pero hacer que el misil se ralentice es un buen truco (¿y se puede usar si los llamas "misiles truco"?)
bobobobo
4

Intuición

Aquí hay una manera: Rotemos su diagrama.

una rotación de la ilustración original del problema

¡Ahora el cohete es una bala de cañón !

Física

Tiene una aceleración fija "hacia abajo", es decir, perpendicular al vector desde su ubicación de disparo hasta su objetivo. Lo dibujé arriba como una línea verde discontinua. Llamemos a eso el horizonte de referencia . (¡Tenga en cuenta que este horizonte de referencia es constante! El cohete se disparó desde una posición fija con una posición fija como objetivo).

Sabemos (de Wikipedia ) para una bala de cañón sin resistencia del aire, que d = v^2 * sin(2 * theta) / g, donde

  • d es la distancia horizontal recorrida (distancia entre la ubicación de disparo y el objetivo)
  • v es la velocidad a la que se disparó el proyectil
  • thetaes el ángulo con respecto al horizonte al que se disparó el proyectil ( vector de ángulo de disparo desde el horizonte de referencia )

Reorganizando la ecuación para gdar g = v^2 * sin(2 * theta) / d.

La constante en la ecuación de bala de cañón g, es la aceleración debido a la gravedad . Podemos tomarlo como una aceleración debido a la propulsión del cohete . Eso también está bien: sigue siendo una aceleración constante en una dirección constante .

¿Ahora que?

Ejecuta esa ecuación para gcuando dispares el cohete. Te dirá cuánto acelerar el cohete perpendicularmente hacia el horizonte de referencia, para alcanzar el objetivo. Como la dirección de esa aceleración es constante, no se formará una órbita.

Auge.

Anko
fuente
Este es un enfoque ordenado. Creo que esto va a hacer que el cohete trace un círculo , usted está suministrando la fuerza centrípeta requerida para orbitar un círculo que impacta el objetivo. Creo que este podría haber sido el enfoque utilizado para los proyectiles rojos en Mario Kart , porque siempre pensé que tendían a
arquearse
La fuerza aplicada aquí no es centrípeta. La dirección de la fuerza es perpendicular al horizonte de referencia, que no cambia si el objetivo es estacionario. Esto significa que el comportamiento en órbita no puede suceder.
Anko
He editado la respuesta para aclarar eso.
Anko
@ Anko: No estoy seguro de que tus matemáticas aquí funcionen para un objetivo en movimiento, ya que parece ser el desencadenante del caso de los OP.
Mooing Duck
@Mooing Tienes razón, esto solo funcionaría para los objetivos en movimiento si se mueven de manera predecible y tu objetivo es la predicción. Sin embargo, la pregunta menciona específicamente que el objetivo es estacionario en la primera oración.
Anko