Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





IA para Coches

Iniciado por Jviruss, 05 de Octubre de 2008, 11:00:19 PM

« anterior - próximo »

Jviruss

Hola!,estoy haciendo un juego de coches.En el cual tengo un pad virtual para la IA.Esto quiere decir que lo unico que puedo hacer es girar izquierda,girar derecha,y frenar(no esta permitido frenar en este juego) y no se pueden hacer calculos de vectores etc...Bueno la pregunta es la siguiente:

1.-Como puedo seguir un camino de Waypoints????.Con el cross product puedo saber si el waipont esta a la izquierda o la derecha.Pero si mi sampleo de waypoint es elevado el coche empieza a ir en zig Zag.Como evitar esto????.

2.-Como puedo hacer que la IA frene en una curva???


Muchas Gracias por vuestras respuestas. 8o

Mars Attacks

#1
Puessssss si se pasara Drakkar, sé que en el Blast él consiguió una solución muy funcional.
Yo haría interpolaciones lineales entre la posición actual y la posición a alcanzar, intercambiando la posición a alcanzar por la siguiente una vez estuviera suficientemente cerca de la misma. Como rotación, haría también una interpolación al ángulo entre las rectas definidas por ambos tramos (en valor absoluto) o mi propia rotación y la del tramo siguiente (en relativo).

Vamos, que reduciría tu problema a seguir una secuencia numerada de puntos unidos por rectas. Para frenar en una curva, sólo tendrías que calcular el ángulo entre los waypoints (tendrías que colocar uno en donde fuera la curva) y, si sobre pasa los grados o radianes que consideres apropiados, que reduzca la velocidad en un porcentaje determinado hasta llegar a cierta distancia del punto de control de la curva, y luego la incremente hasta devolverla a la que tuviera.

Edito: Reyeléndote, creo que no he entendido bien cuáles son tus restricciones...

Jviruss

Imaginate que tienes un mando.En un incremento de tiempo(en un determinado momento)tu puedes pulsar el boton de freno por ejemplo y lo mantienes un tiempo hasta que ya ves que cojes bien la curva.Pues la IA igual,tiene un pad virtual como si fueras un jugador.Tienes ke mantener pulsado el freno hasta que ya pienses que no te sales.Estas son las restricciones.Lo mismo para derecha,izquierda.

Mars Attacks

Pues, efectivamente, no te había entendido. Lo malo es que sigo sin entenderte, supongo que es un estilo de IA que no he tocado nunca. ¿Es algo así como pregrabado de circuitos con el coche?

Jviruss

Jojo,me dice un compañero "Menos mal ke hablais español"jiji.
Vamos a ver,es simple.Se usa un pad virtual para poder hacer un motor de repeticiones.Pero aparte de eso es simple.
Imaginate que tu eres una de mis IA y ves una curva cerrada hacia la derecha,instantaneamente tu kojeras ese pad y le mandaras al coche que gire hacia la derecha al mismo tiempo si ves que estas derrapando entonces empezaras a pulsar el freno hasta ke no derrapes, y a demas al ser la curva demasiado cerrada antes de entrar en ella disminuiras la velocidad del coche.


Pues esta IA funciona igual solo que no se en que basarme para mantener pulsado el freno,bueno si se que tengo ke saber si la curva es cerrada o abierta pero de ahi a sacar un tiempo de pulsacion del freno o calcular la velocidad para que el coche no derrape es otra cosa.

Gracias Mars por tus respuestas aunque todavia no hayamos llegado a nada,jojo.

synchrnzr

¿Y no tienes en cuenta el trazado?

sync

Jviruss

#6
A que te refieres sync? Los Waypoints son mi informacion del trazado.

synchrnzr

CitarImaginate que tu eres una de mis IA y ves una curva cerrada hacia la derecha,instantaneamente tu kojeras ese pad y le mandaras al coche que gire hacia la derecha al mismo tiempo si ves que estas derrapando entonces empezaras a pulsar el freno hasta ke no derrapes, y a demas al ser la curva demasiado cerrada antes de entrar en ella disminuiras la velocidad del coche.

Bueno, lo decía porque al leer esto no me he sentido muy identificado. Yo, viniendo de una recta, me abriría primero hacia el lado contrario para luego poderla coger mejor (o anticipándome ya iría por la parte exterior, según de donde viniera) Y frenaría según lo cerrada que fuera, pero siempre antes de cogerla, no durante la curva, para luego poder acelerar dentro de la curva o saliendo, para mejorar el agarre de los neumáticos.

No soy un experto tampoco, pero es lo que yo haría... 0:-)

Pero bueno, respecto a lo que preguntabas originalmente, yo haría un trazado interpolando tus waypoints con splines e intentaría que el coche lo siguiera, ajustándose más o menos al trazado según los ajustes de dificultad u otros. El problema lo veo más bien a la hora tratar los adelantamientos, esquivar algun choque, etc... todo lo que sea salirse del trazado. En fin, en temas de IA, mi filosofía es que cuanto más se parece la IA que estás programando a la IN, más buena es, así que yo creo que la solución está en nuestros adentros, sólo hay que rebuscar un poco. ;)

De coches estuve muy enganchadillo al TrackMania, el gratuito. Qué vicio...

sync

Jviruss

Bueno se supone que el trazado es optimo por lo cual ya implica este tipo de comportamiento por si solo.

TiRSO

Se me ocurre una solución muy sencilla, aunque nada sofisticada: Puedes asignar a cada "waypoint" una velocidad máxima. Así solo tendrías que frenar cuando el coche se mueva a una velocidad que la asignada al siguiente waypoint.

Si no te vale, lo único que te queda es echar cuentas xD. Tendrías que ir comprobando si el coche es capaz de mantenerse (más o menos ) en el trazado "óptimo". Si no, frenas hasta que el coche pueda seguir bien ese trazado.

Daemon

Hola,

Jviruss perdona mi torpeza, pero no te sigo mucho. A ver si me aclaro con tu problema. Cuando dices que el trazado es óptimo, te estás refiriendo a que los "waypoints" que te dan son realmente el camino que tienes que seguir y que el coche no puede ni debe recorrer ningún espacio intermedio entre un "waypoint" y otro (si quiere realizar la mínima distancia), ¿no? ¿aparte de los "waypoints" que otra información recibes  (velocidad del coche, dirección...)? Es decir, ¿cómo recibe la IA los cambios que sus acciones producen? Cuando el coche gira a la derecha o a la izquierda, ¿cómo lo hace, gira un nº grados creciente dependiendo del tiempo o constante?

A ver si me entero... por que un poco más y entiendo que estabas intentando poner una camara y dos brazos robóticos delante del mando de la consola para jugar al Colin McRae  ^_^'
Imagina todo lo que puedes hacer. Despues hazlo.

kittie4man

Tal vez esto te sirva:

http://www.miata.net/sport/Physics/

Salu2
Juan Pablo desde Argentina

Ivanovich

#12
Yo estuve haciendo un juego de coches hace bastante tiempo, y para calcular cuando empezar a frenar, hacía lo siguiente:

Cada coche tiene 2 circumferencias, una a cada lado, que son el radio de giro:

O||O <- Esto, pero con las circumferencias más grandes.

La dos circumferencias pasan por el centro del coche, y determinan el máximo giro que puede hacer el coche, que depende de la velocidad. Cuando la velocidad se incrementa, el radio de las circumferencias se incrementa y, para que se cumpla que pasan por el centro del coche, se separan de él.

Me estoy explicando fatal, lo sé. Si descargas el juego, tiene opciones de debug con las teclas F9, F10 y F11 (si no recuerdo mal) que son para mostrar estas circumferencias, waypoints y no sé qué más.

Bueno, el caso es que gracias a esto, saber cuando frenar se transforma en algo tan simple como detectar la colisión entre cada circumferencia y el siguiente waypoint. Si chocan, es que estas por encima de tu radio de giro y debes empezar a frenar.

No sé si es de mucha ayuda ^_^'

[Edit] Link updateado

Prompt

Ivanovich el juego de coches tiene su aquel eh! basico, pero util! :)


Ivanovich

Sí, es el típico juego que parece mucho más fácil de lo que resulta ser. En concreto la IA de un juego así puede ser bastante complicada. Supongo que cada uno utiliza sus métodos, pero este de ir siguiendo "waypoints" es quizá el más sencillo y standard. Si después añades colisiones entre coches (con su física medio decente) y quieres tener en cuenta que se utilicen rutas alternativas para hacer adelantamientos o que cada coche siga un camino acorde a su estilo, la diversión programando todo esto está más que garantizada, yo creo.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.