Blog de robótica e inteligencia artificial

1/30/2015

Euler tiene la culpa de que no te pases el vídeojuego

Para los que no lo conozcan, Doom Quake es un vídeojuego de hace ya unos cuantos años de disparos en primera persona. Para quien no tenga ni idea de lo que digo, el jugador sólo veía en la pantalla de su ordenador una mano sujetando un arma, y el escenario del juego se movía desde un punto de vista en primera persona.

Este vídeojuego tenia un motor de simulación de la física de juego llamado Id Tech, del cual hubo varias ediciones. Este motor lo llevaron otros juegos, como el Quake o Wolfenstein, Pero resulta curioso un fallo que tenía el Doom Quake1:

Una de las cosas básicas que hay que simular en todo juego donde hay que correr, saltar, matar criaturas, etc... es la gravedad del mundo (ya sea Tierra u otra). ¿Cómo programarías la gravedad en un vídeojuego? La gravedad es un valor concreto de aceleración, y constante. Por lo tanto, ¿cómo calcularíais la posición en cada instante a partir de la aceleración instantánea?

Quizás se os ocurra esto:



Fijémonos en la velocidad: La velocidad en un instante es igual a la velocidad en el instante anterior + la gravedad* un intervalo de tiempo. Este intervalo ha de ser pequeño, de décimas o centésimas de segundo

A esto se le llama integración numérica de Euler. Sirve para pasar de la aceleración del juego a la posición. Si graficamos la posición según la fórmula de arriba, tendremos:


Lo cual es totalmente incorrecto. La gráfica ideal que buscamos es la siguiente. 



De hecho, si el intervalo de tiempo (dt) es muy grande en la fórmula incorrecta, o las imágenes por segundo que es capaz de procesar el ordenador son bajas, nos encontraremos con que el protagonista de Doom no salta lo mismo. ¡Lo cual hacía que en algunos ordenadores se pudiera pasar el juego y en otros no!


Cuanto más grande es el dt, más corto o bajo era el salto. Este despropósito se puede corregir de una manera sencilla:



Y así, el área integrada es la siguiente. Este área es exactamente igual que la que hay dos más arriba (con lo cual, es la gráfica correcta). Debajo de la línea están encerradas las mismas áreas.



La integración de Euler es la manera más simple de pasar de integrar numéricamente. Se sigue usando mucho, pero no sirve para todos los procesos. De hecho, una de las expresiones más usadas al respecto es only idiots use Euler integration (fuente).

A la hora de implementar un algoritmo de integración en un videojuego o una simulación física, hay que tener en cuenta estas características (fuente):

- Precisión
- Conservación de la energía
- Estabilidad

Euler tiene un grave problema de precisión y tampoco conserva la energía. No lo hace tampoco una alternativa muy usada, el algoritmo de Runge-Kutta4. Sí que lo hacen el método de Verlet, Newmark y Gauss-Runge-Kutta implícito. Estos métodos que conservan la energía se denominan symplectic (en inglés).

De hecho, ahora mismo la mayoría de videojuegos y simuladores pueden usar un motor como Physx, cuyos algoritmos conservan la energía (fuente). 

Echemos un vistazo a qué hacen RK4 y qué hace Verlet.

El primero tiene fama de ser un algoritmo difícil de implementar (sobre todo en según qué industria y con qué objetivo):


La ecuación principal de Runge-Kutta es y(n+1) = y(n) + un incremento formado por k1, k2, k3, k4, cuyas fórmulas están descritas abajo. Estos coeficientes son el resultado de la función que estamos analizando para distintos valores de t, y.  

¿Y qué hay de Verlet? Estrictamente, no vamos a ver la integración de Verlet, sino la integración de velocidad de este matemático (fuente).


Y este algoritmo no depende de los fraps per second, tal y como demuestran aquí, comparando Euler vs Verlet.

¿No os parecen todos los métodos muy parecidos? Pues así es. Euler y Verlet forman parte de una familia de métodos llamados Runge Kutta (concretamente, son RK1 y RK2). 

No dejéis de ver los enlaces que cito abajo, y esta presentación donde se comparan gravedad, fricción y resistencia aerodinámica de una manera muy gráfica según distintos métodos.




Fuente: 
http://www.niksula.hut.fi/~hkankaan/Homepages/gravity.html
http://gafferongames.com/game-physics/integration-basics/
https://www.reddit.com/r/programming/comments/15f4qc/on_using_rk4_over_euler_to_integrate_for_physics/
http://www.adrianboeing.com/pal/papers/p281-boeing.pdf
http://codeflow.org/entries/2010/aug/28/integration-by-example-euler-vs-verlet-vs-runge-kutta/
https://news.ycombinator.com/item?id=4934855
http://www.niksula.hut.fi/~hkankaan/Homepages/gravity.html
http://www.richardlord.net/presentations/physics-for-flash-games
http://lolengine.net/blog/2011/12/14/understanding-motion-in-games
Comparte:

1/13/2015

Foucault y Napoleón III

Pensemos en un péndulo formado por una bolita de masa m y un hilo de longitud L. L es bastante grande. Este hilo está atado en su extremo libre al techo de una sala y describiendo un movimiento pendular en el espacio. Usamos el triedro X-Y-Z y consideramos que la velocidad angular del péndulo tiene dirección Y (ωy).

Supongamos que el ángulo del péndulo oscila entre ± 30º, y que ahora empieza a girar respecto al eje Z la sala entera de la que cuelga el péndulo. Su velocidad de giro es ωz.



En Mecánica Aplicada, este problema puede tratarse como un sistema de arrastre + relativo. Es decir, hay un sólido que tiene un movimiento propio (el péndulo), pero hay otro sólido superior a él en la cadena cinemática que afecta a la cinemática del péndulo.

La velocidad relativa del péndulo se calcula teniendo en cuenta solo ωy. Para una posición genérica, la velocidad de la bolita sería:

Vr = L · ωy · (sinφ i + cosφ k)

(ojo, que en algunos momentos la ωy toma valores positivos y a veces negativos)

Para la velocidad de arrastre, solo se cuenta la velocidad de giro de la sala. Para otra posición genérica, si pensamos que el péndulo está centrado en el eje Z:

Va = L · ωz· (sinθ i + cosθ j)

En este caso, consideramos la ωz que siempre gira en el mismo sentido, positiva. Por lo tanto, la velocidad total de la bolita del péndulo en un momento cualquiera es el sumatorio de la componente de arrastre + relativo. Es decir, por lo general, la velocidad de nuestro sistema va a tener las 3 componentes del espacio. El péndulo no se va a mover en un único plano.



¿Sigues sin verle la gracia? No te preocupes, en 1851 el gran físico francés Leon Foucault ya se la vio, ya que con este experimento demostró la rotación de la Tierra. Su experimento tuvo tanta repercusión, que Napoleón III lo llamó a su presencia para que realizase su trabajo en el Panteón de París. Hoy es una actividad habitual en cualquier museo de ciencia que se precie. No en vano, ha sido citado como uno de los 10 experimentos más bellos de la ciencia por el NY Times.

Por ejemplo, aquí tenéis un vídeo ilustrativo:





Artículo original aparecido en el blog de la Escuela Politécnica de San Sebastián
Comparte:

1/11/2015

¿Qué caballo vio Enzo Ferrari?

Enzo Ferrari, fundador de la escudería que lleva su apellido, vio las hazañas del soldado de la foto:



Se trata de Francesco Baracca, héroe de la aviación durante la Primera Guerra Mundial por parte de Italia, cómo no. Baracca tiene registrados 34 derribos en en el aire en 63 combates. Falleció en 1918 durante el transcurso de un ataque a objetivos de tierra, y dado que se le encontró cadáver con una pistola en la mano días más tarde, se piensa que prefirió suicidarse a ser atrapado prisionero.

La primera toma de contacto entre la familia Ferrari y Baracca ocurrió el 16 de junio de 1923 en Ravenna, cuando se encontró al padre de Francesco, Enricco. 

El emblema que portaba el piloto tiene su origen en la Piemonte Cavalleria, tal y como se puede ver en esta imagen, y lo eligió como su emblema personal para mostrar su origen militar y amor por los caballos.


De hecho, al principio el escudo en el avión era así un caballo plateado sobre fondo blanco, tal y como aparece en esta imagen a color real realizada en la época (fuente). 


Y es que, tal y como explica el fabricante Ferrari, el fondo amarillo se lo añadió el propio Enzo Ferrari por ser el color más identificativo de su región, Modena.






Nota final
Hace ya mucho tiempo, explicamos por aquí de dónde venían muchos más escudos de otros grandes fabricantes de automoción.



Fuentes:




Comparte:

1/06/2015

En Naukas: ¿Cuántos graduados del MIT hacen falta para encender una bombilla?

Aquí os dejo la primera entrada de 2015. Gracias por las lecturas y opiniones. El artículo original apareció aquí


Os invito a que veáis el siguiente vídeo:


Poco se imaginaban los recién graduados del MIT el curioso reto que se les iba a plantear: encender una bombilla con un trozo de cable y una pila. Y tal y como se aprecia, estos jóvenes tienen serias dificultades para superar un reto. Obviamente, lo que nos llama la atención es que mucha gente que conozcamos, sin necesariamente formación científico-técnica, podría haber entendido la simpleza del reto a primera vista. Y en segundo lugar, nos puede impactar que esa idea fundamental no la tengan los alumnos que han completado sus estudios en una de las universidades más prestigiosas del mundo: el MIT.

El vídeo es un extracto del documental sobre educación a niños titulado Minds of our own, en el que se muestra cómo parece que aprenden los más pequeños. Tranquilos, que nadie se tire de los pelos, ya que el vídeo se emitió entre 1997 y 1998 en Estados Unidos. Todavía hay secuelas de ese premiado documental (por ejemplo, aquí), y las cuestiones sobre las mejores manera de enseñar los conceptos científicos fundamentales a los más pequeños no es para nada un debate zanjado. Desde luego, el que escribe no es la voz más autorizada para opinar sobre un método u otro, y lo más probable es que hoy en día si se realizase el mismo experimento, el resultado fuese bastante distinto. Sí que el vídeo deja entrever que una de las maneras buenas de enseñar ciencia es que los alumnos descubran los fundamentos o resuelvan los problemas por ellos mismos. Hoy en día hay universidades famosas por la implantación de métodos pioneros de enseñanza, como la de Aalborg.



Tradicionalmente las ingenierías en el mundo anglosajón han sido mucho más prácticas que en España. Aquí se imparten un mayor número de horas y se trata mucho más ideas teóricas, por lo general. Probablemente, muchos de los estudiantes Leonardo y Erasmus que hayan cursado estudios en dos sistemas universitarios hayan notado diferencias sensibles (tipo de docencia, prestigio de las universidades y carreras, sistemas de evaluación, número de créditos de prácticas, etc).

Obviamente, hay puntos positivos en ambos sistemas y estas metodologías de enseñanza evolucionan con los tiempos. Prueba de ello es que ahora este pequeño experimento sería fácilmente resuelto por graduados actuales…
Comparte:

Sígueme en redes:

descripción descripción descripción

En mi mesilla

Blog Archive