jueves, 17 de noviembre de 2016

Network Virtual Enviroment with Flocks

Network Virtual Enviroment with Flocks


Introducción

Hace unos años me intereso el algoritmo que podría simular los movimientos de los pájaros, de grupos de pajaros. Esto es lo que se conoce como flocking algorithm

Estos algoritmos, pueden simular no solamente movimientos de pájaros, si no lo que sería de un grupo de objetos, individuos,...en este caso, yo elegí tanques, pero la implementación es general, no es siguiendo exactamente lo que haría un grupo de tanques.





Pero ahora, que hace pocos meses me he metido, por mi nuevo trabajo, en temas de simulación, donde un ordenador realiza una tarea, y se la comunica a otra por red,...y así, crear un simulador, y de hay lo que sería un Network Virtual Enviroment. Y entonces, quería aprender un poco más sobre esto, y que mejor que crear tu propio NVE.

NVE de Tanques

Y que mejor que para comprender mejor este mundo, que leer un buen libro. Y me leí el libro

"Networked Graphics Building Networked Games and Virtual Environments" de Anthony Steed, Manuel Fradinho Oliveira

Y vaya casualidad, que esos, usaron el movimiento de flocking para simular un NVE. Es decir, tener un flock (o grupo de objetos que deben moverse) en un ordenador y que los demás vean a ese grupo. Y asi crear un NVE.

Y entonces, me dije, de modificar el que ya había desarrollado. Abajo un pantallazo. Siento haberlo realizo con solo dos Flocks clientes, pero no me daba la memoria para tener dos maquinas virtuales corriendo :-( . Tengo que poner megas pero ya...



Arquitectura del NVE de Tanques

En el libro, se detallan varios tipos de arquitecturas, pero la que más me gusto implementar fue
la de peer to peer con servidor de entrada. Esta arquitectura, hay dos aplicaciciones, una el cliente que simula el flock y el servidor (otra aplicacion). El cliente solo debe saber la IP de donde está el servidor, y el servidor, le enviará las IPs de los demás clientes, y asi de esa forma, la configuración es un tanto más cómoda.






Aquí, los Flocks Client, al iniciar la ejecución se comunicaran con el servidor (en naranja) para que le envíe la lista de las ips de los otros ordenadores donde se simula y así entrar en el NVE. Una vez que tiene la lista, ya no se comunica más con el servidor y ya lo hace peer to peer con los demás ordenadores que están simulando los flocks.

Los pasos que se siguen a nivel general, son los siguientes en el Flock cliente cuando se esta simulando.

paso 1
- Actualizar el Flock Local (pero teniendo en cuenta los flocks remotos)
- Enviar la información de Flock Local a los demás flocks remotos.

Por otro lado, ¿como el cliente flock obtiene los flocks remotos?

Paso 2

Se define una clase RemoteSimulations, que representa a los flocks remotos, y internamente, está a la escucha de recibir información de los flocks remotos (por un puerto UDP ya predefinido entre los client flock), y cada vez que recibe uno, lo añade a la lista, que esta lista, la pedirá el paso 1, cuando el algoritmo de Flocking tenga que tomar en cuenta todos los flocks (local y remotos) para realizar el calculo del movimiento.

Y aquí dejo un video del NVE de tanques....


Futuro

En el libro anteriormente citado, se comenta los problemas que hay en los NVE, que surgen por la latencia de la red. Como que de repente un objeto se mueve más rápido, o parece que se para, o que vaya a tirones. Sería interesante simular estos problemas para así, poder desarrollar medidas que palíen en cierto grado estos problemas.


Félix Romo
felix.romo.sanchezseco@gmail.com