A lo largo de este curso hemos realizado una investigación en Second Life para descubrir sus posibilidades como entorno de simulación y las capacidades de su lenguaje de script para desarrollar Agentes Inteligentes.
Para comprobar todo esto decidimos desarrollar una simplificación de un sistema real ya existente como es la RoboCup.
La RoboCup es una competición anual en la que equipos de robots se enfrentan en un partido de fútbol. Existen distintas categorías dependiendo del tipo de robots usados: De dimensiones reducidas, de bípedos, de perros Aibo, etc. Para nuestra prueba hemos adaptado las reglas a las posibilidades que ofrece Second Life.
Lo primero fue diseñar un campo que nos permitiese realizar las primeras pruebas. Este campo es un campo normal de fútbol, pero rodeado de paredes para que la pelota no se escape fuera. A parte se le añadieron dos esferas sobre las porterías como objetos independientes que permiten a los bots guiarse.
Lo siguiente fue desarrollar la primera versión de nuestro robot. Esta sin duda fue la tarea más ardua de nuestro proyecto que nos ha llevado a estudiar con detalle algunas de las capacidades del Lindel Script.
Nuestros robots son cilindros achatados lo que simplifica mucho los cálculos para las colisiones. Son objetos "físicos" del Second Life, esto quiere decir que les afectan la gravedad y otras fuerzas.
Para detectar objetos Lindel Script permite manejar "sensores" que devuelven los objetos que se sitúan a una distancia máxima y dentro de cierto ángulo cada x milisegundos. De esta forma detectamos la posición de las porterías y de la pelota.
Necesitábamos alguna forma para configurar algunos de los datos de los bots por lo que tuvimos que usar "comandos de voz", estos en realidad son comandos escritos por el chat local que son interpretados por el bot. Funciona muy parecido a los sensores, solo que en este caso se interpretan de forma inmediata y no cada x milisegundos.
Una vez teníamos un bot jugando necesitábamos formar un equipo y para tener un equipo hace falta comunicación. Para ello usamos el chat, al igual que para los comandos de configuración, los bots se mandan comandos entre sí. Para que no saturasen la pantalla del chat los bots utilizan otros canales que no son visibles.
Los bots que hemos desarrollado presentan algunos problemas a la hora de jugar, debido principalmente a su programación simple. Debido a la forma en que es calculada la trayectoria para enviar la pelota hacia una portería es posible que el resultado sea enviarlo justo a la contraria ya que no son capaces de rodearla para situarse correctamente. También pueden quedarse bloqueados contra una pared al no tenerlas en cuenta en el cálculo de trayectorias.
Second Life parece ser un sitio apto para la simulación de algunas tareas aunque la visualización puede fallar por momentos parece que las simulaciones físicas son más o menos fieles. Esto puede ser un incentivo para el uso de Second Life, aunque existen entornos más aptos para este tipo de tareas.
Está disponible en Google Code la última versión del código desarrollado para los bots. Siempre podéis visitar el proyecto en la Isla de la ESEI en Second Life.
jueves 19 de junio de 2008
miércoles 28 de mayo de 2008
Un lugar para probar

Al fin tenemos un lugar permanente con un campo ya construido en el que se pueden hacer pruebas de los equipos o realizar partidos.
El lugar se haya en la isla de la ESEI.
Ahora mismo se encuentran todos los elementos que hemos desarrollado: El campo, la pelota y un equipo de dos bots con la última versión publicada del software. Estos bots se pueden manejar con los comandos que se han explicado en las normas del juego.
Si queréis probarlo solo os tenéis que acercar al campo y decir "begin" para que los bots empiecen a jugar, y "end" para pararlos.
Pronto esperamos tener un segundo equipo con el que realizar partidos completos.
martes 13 de mayo de 2008
Números del marcador
Para hacer el marcador he pensado en hacerlo con numeros digitales. He juntado 7 prims formando un ocho. A partir de ahí, hice un script en el que se le aplican transparencia a unos prims u otros según el número.

También había pensado en usar texturas de números colocandolas en 10 prims diferentes, pero me parece una forma mas liosa para cambiar el resultado.

Para terminar el marcador, tenemos que crear un mecanismo para saber cuando se ha marcado un gol, modificar el script del marcador y así cambiar el resultado.

También había pensado en usar texturas de números colocandolas en 10 prims diferentes, pero me parece una forma mas liosa para cambiar el resultado.

Para terminar el marcador, tenemos que crear un mecanismo para saber cuando se ha marcado un gol, modificar el script del marcador y así cambiar el resultado.
jueves 8 de mayo de 2008
Normas
Equipos:

Desarrollo del juego:
- Los equipos deben de estar formados por 2 bots.
- A cada equipo se le asignará un canal de comunicación y será el único en el que pueden emitir mensajes y el único en el cual estarán escuchando.
- Los bots deben de ser cilindros de dimensiones (0.5, 0.5 0.25) con la física activada y de material metálico.
- Una vez empezado el partido solo responderá a comandos dados por el árbitro.
- El único método válido de movimiento será llImpulse() y el vector no puede tener un módulo mayor de 2.
- El campo tendrá las dimensiones indicadas en el gráfico.
- Dispondrá de tres objetos que se podrán rastrear y que servirán para orientarse: LeftGoal, RightGoal y CenterField. (indicados por puntos rojos en el gráfico).

Desarrollo del juego:
- Antes de iniciar el juego el capitán del equipo debe de configurar a sus bots indicándoles su posición inicial, la portería donde deben marcar, cuales son sus compañeros de equipo y cuales son contrincantes y quien será el árbitro al que deben de obedecer para detener o reanudar el partido.
- Una vez configurados el árbitro indicará el inicio del partido.
- Cada vez que se meta un gol el juego se detendrá y los bots volverán a su posición inicial, así como la pelota al centro del campo.
- Si un bot bloquea la portería será amonestado y el juego se detendrá para volver a la posición inicial. Tras cinco amonestaciones el equipo pierde automáticamente el partido.
- Las irregularidades en los bots provocarán la eliminación del equipo.
- No atender a los comandos del árbitro descalificará al equipo.
- begin: empieza el partido
- end: termina el partido
- pause: se detiene temporalmente el partido
- continue: retoma el partido
- goal: indica que se ha marcado un gol y que los bots deben de volver a su punto de origen
- play: retoma el partido después de un gol
lunes 5 de mayo de 2008
Robots cooperativos
Durante este tiempo hemos estado desarrollando un robot cooperativo, esto es que pueda participar en un partido junto a otro robot formando un equipo.
El método empleado ha sido sencillo. Los dos robots están situados en el campo y comprueban su distancia a la pelota. Cada uno le comunica su distancia al otro, estos al recibirla la comparan con su propia distancia; si su distancia es menor golpean la pelota sino se dirigen a la portería para tomar la delantera.
Aunque la estrategia es extremadamente sencilla nos ha permitido descubrir las posibilidades de comunicación de Second Life. Los bots utilizan para comunicarse un canal específico para que no sea visible por la ventana de chat y la comunicación ha sido implementada como los comandos de voz que desarrollamos en la versión anterior.
A esta versión se le ha añadido más comandos de voz. Ahora el robot puede marcar su posición inicial y volver a ella cuando se marca un gol. También se le ha añadido un comando de ayuda.
Como siempre el código es descargable desde Google Code: SL Soccer Agent
Las siguientes tareas irán más orientadas al diseño del campo y del sistema de juego.
El método empleado ha sido sencillo. Los dos robots están situados en el campo y comprueban su distancia a la pelota. Cada uno le comunica su distancia al otro, estos al recibirla la comparan con su propia distancia; si su distancia es menor golpean la pelota sino se dirigen a la portería para tomar la delantera.
Aunque la estrategia es extremadamente sencilla nos ha permitido descubrir las posibilidades de comunicación de Second Life. Los bots utilizan para comunicarse un canal específico para que no sea visible por la ventana de chat y la comunicación ha sido implementada como los comandos de voz que desarrollamos en la versión anterior.
A esta versión se le ha añadido más comandos de voz. Ahora el robot puede marcar su posición inicial y volver a ella cuando se marca un gol. También se le ha añadido un comando de ayuda.
Como siempre el código es descargable desde Google Code: SL Soccer Agent
Las siguientes tareas irán más orientadas al diseño del campo y del sistema de juego.
domingo 20 de abril de 2008
Comandos de voz y estados
Esta semana hemos estado probando el uso de comandos de voz para indicarle a los bots cuando deben de empezar el partido, cuando deben detenerse o cuando ha finalizado el partido.
Hemos programado nuestro bot para que empiece a jugar cuando alguien pronuncie la palabra "begin" y se detenga al pronunciar la palabra "end", también reacciona a los comandos "pause" y "continue". Así que ahora nuestro bot comienza a golpear la pelota sin descanso hasta que lo detengamos.
Nuestro bot se divide ahora en un conjunto de estados: default, init, playing y paused; y las transicciones entre estados se ejecutan por determinados comandos de voz, o de forma automática.
Esto nos permitirá automatizar el desarrollo del partido. La idea es que algún componente del campo tenga una lista de los robots que están jugando y de esta manera se comunique con ellos para indicarles cuando ha comenzado el partido, cuando se ha metido un gol y deben irse a sus posiciones iniciales o cuando el partido ha finalizado.
También nos ha permitido conocer como se pueden comunicar los robots del equipo entre ellos.
El código se puede descargar desde Google Code: SL Soccer Agent, (versión 0.0.4). El código está comentado y puede servir como base para vuestros propios desarrollos.
El próximo paso será permitir la comunicación entre dos robots para decidir estrategias.
Hemos programado nuestro bot para que empiece a jugar cuando alguien pronuncie la palabra "begin" y se detenga al pronunciar la palabra "end", también reacciona a los comandos "pause" y "continue". Así que ahora nuestro bot comienza a golpear la pelota sin descanso hasta que lo detengamos.
Nuestro bot se divide ahora en un conjunto de estados: default, init, playing y paused; y las transicciones entre estados se ejecutan por determinados comandos de voz, o de forma automática.
Esto nos permitirá automatizar el desarrollo del partido. La idea es que algún componente del campo tenga una lista de los robots que están jugando y de esta manera se comunique con ellos para indicarles cuando ha comenzado el partido, cuando se ha metido un gol y deben irse a sus posiciones iniciales o cuando el partido ha finalizado.
También nos ha permitido conocer como se pueden comunicar los robots del equipo entre ellos.
El código se puede descargar desde Google Code: SL Soccer Agent, (versión 0.0.4). El código está comentado y puede servir como base para vuestros propios desarrollos.
El próximo paso será permitir la comunicación entre dos robots para decidir estrategias.
sábado 19 de abril de 2008
Descargar el código
Como nuestro proyecto se basa principalmente en el descubrimiento de las posibilidades de Second Life como sistema de simulación de física y programación de agentes hemos decidido compartir el código que vayamos escribiendo para que lo podáis ver y jugar con el.
Para ello hemos creado un proyecto en Google Code donde está disponible el código fuente bajo licencia GNU General Public License v3.
Second Life Soccer Agent
Toda colaboración es bienvenida ;)
Para ello hemos creado un proyecto en Google Code donde está disponible el código fuente bajo licencia GNU General Public License v3.
Second Life Soccer Agent
Toda colaboración es bienvenida ;)
Suscribirse a:
Entradas (Atom)