Categorías
Informática Universitario Videojuego

Robot a la Fuga

El relato “Pequeño robot perdido”, publicado en 1947 por Isaac Asimov, nos habla de un robot llamado Néstor potencialmente peligroso para los seres humanos debido a una modificación de las Leyes de la Robótica que ha sido introducida en la programación de su “cerebro positrónico”. Ofendido por un investigador del complejo militar donde ha sido creado, Néstor decide ocultarse entre otros robots físicamente idénticos para tratar de escapar así complejo y demostrarle a sus creadores su superioridad intelectual. Los responsables del complejo ponen todo el sistema de seguridad en alerta para hallar al robot fugado… y destruirlo.

Porque, si se detiene usted a estudiarlas, verá que las tres Leyes de la Robótica no son más que los principios esenciales de una gran cantidad de sistemas éticos del mundo. Todo ser humano se supone dotado de un instinto de conservación. Es la Tercera Ley de la Robótica. Todo ser humano bueno, siendo la consecuencia social del sentido de responsabilidad, deberá someterse a la autoridad constituida; obedecer a su doctor, a su Gobierno, a su psiquiatra, a su compañero; incluso si son un obstáculo a su comodidad y seguridad. Es la Segunda Ley de la Robótica. Todo ser humano bueno, debe, además, amar a su prójimo como a sí mismo, arriesgar su vida para salvar a los demás. Esta es la Primera Ley de la Robótica.

La Prueba (Yo, Robot) – Isaac Asimov (1950)

Esta vez vamos a desarrollar un prototipo centrado en modelar la toma de decisiones tanto del robot protagonista, Néstor, como de sus mortales enemigos, los guardias robóticos de seguridad. Estos guardias simplemente se dedican a patrullar el complejo militar tratando de encontrar a Néstor para destruirlo. Si Néstor sobrevive a sus disparos y consigue salir de su campo de visión, los guardias volverán a su base. Por su parte, Néstor -controlado por la IA- tiene que ir pulsando una serie de botones para cambiar el estado (abierto/cerrado) de las puertas del color correspondiente y poder así avanzar hasta la salida, evitando en todo momento a los guardias, escondiéndose tras montones de robots similares, y cogiendo las cápsulas de energía si esta desciende demasiado a causa de los disparos enemigos.

Este prototipo sirve para poner a prueba los dos paradigmas de toma de decisiones más populares en la actualidad: tanto las máquinas de estado (para los guardias robot) como los árboles de comportamiento (la IA que controla a Néstor). Además se recurrirá a la búsqueda de caminos mediante mallas de navegación, comportamientos de dirección y hasta gestión sensorial, pero esta vez aprovechando todo lo posible las herramientas que Unity trae integradas.

Propuesta

La práctica consiste en desarrollar un prototipo de IA para Videojuegos, dentro de un entorno virtual que representa un complejo de investigación militar. En él tenemos a un agente inteligente (Néstor) capaz de decidir, navegar, moverse y actuar para tratar de escapar del complejo militar, siempre atendiendo a lo que encuentra en sus diferentes estancias (guardias, botones, puertas, robots similares, etc.). También hay otros agentes más simples (los guardias) que simplemente patrullan, atacan al protagonista cuando lo detectan y acuden a su base a recargar munición cuando se quedan sin ella. 

Esquema con la topología de las distintas estancias del complejo militar. Los nodos del grafo representan estancias cuyo contenido se indica con símbolos y abreviaturas, las aristas dirigidas representan visibilidad y navegabilidad entre ellas.

El punto de partida propuesto para esta práctica, con la documentación e implementación (código y recursos audiovisuales) necesaria, se encuentra en este repositorio de GitHub: IAV-Robot.

En el entorno virtual encontramos varias estancias, siendo estos los elementos más relevantes que podemos encontrar en ellas:

  • Néstor. El robot protagonista comienza a tope de energía en esta estancia (abajo del todo), marcada por un círculo negro, como suele hacerse en los diagramas UML. Su objetivo es llegar a la salida, que es la estancia marcada por un círculo negro con reborde blanco (arriba del todo).
  • Cápsulas de energía ( ). Con este símbolo se indica que hay una cápsula que el protagonista puede coger para aumentar su energía.
  • Botones (BA, BR, BV, BB…). Los botones se llaman según su color (BA = botón azul, BR = botón rojo, etc.) y cuando el protagonista los pulsa, cambian de estado (de abierto a cerrado y viceversa) todas la puerta del color correspondiente, que son esas barritas que hay justo en las transiciones del grafo. La barrita con línea discontinua representa una puerta que, al contrario que las otras, empieza abierta.
  • Guardias (G). Son robots más simples que patrullan y tratan de destruir al protagonista si lo detectan. Puede haber más de uno en una misma estancia y pueden de hecho moverse por todo el escenario. El primer punto de su recorrido es una “base”, al que regresan a recargar munición cuando esta se les acaba.
  • Escondites (X). En ciertas estancias hay montones de robots apilados, similares al protagonista, que sirven de escondite a este para no ser detectado por los guardias.

Las características principales del prototipo son:

A. Hay un mundo virtual (el complejo militar) con un esquema de división de malla de navegación proporcionado por Unity, donde se ubican las estancias y todos los elementos descritos anteriormente. La cámara principal está preparada para seguir al protagonista desde el comienzo, aunque es posible también hacer zoom para obtener una vista general del entorno.

B. Las puertas, cuando están cerradas, bloquean tanto la visibilidad de los guardias como el movimiento de todos los robots. Los escondites (montones de robots similares a Néstor) también bloquean la visibilidad de los guardias.

C. Los guardias son agentes inteligentes que permanecen en un estado de patrulla, recorriendo en círculo una serie de puntos del escenario, empezando y acabando en su “base”, hasta que detectan al protagonista con su sistema de visión. En ese caso pasan a perseguirlo y atacarle con disparos, hasta que consiguen acabar con él (reiniciando el juego tras unos segundos) o lo pierden de vista, lo que les hace volver al punto de patrulla más cercano para seguir realizando su recorrido. También puede ocurrir que se queden sin munición, lo que les obliga a volver a su “base” a recargar. Aunque la percepción, el movimiento y la navegación utilizan herramientas integradas en Unity, la toma de decisiones usará el código de una máquina de estados finita genérica programada íntegramente en C# (sin Visual Scripting ni árboles de comportamiento creados con Behavior Bricks).

D. El protagonista está controlado por la IA mediante un árbol de comportamiento complejo, programado mediante Behavior Bricks. Néstor trata de alcanzar la salida del complejo militar de la manera más óptima, utilizando alguna política en su diseño que le ayude a escoger el camino más corto y más seguro, evitando lo más posible compartir espacio con los guardias y sus conos de visión o tener un nivel de energía demasiado bajo. Aunque no de manera sencilla, la IA será capaz de sacar a Néstor del escenario de ejemplo con vida, para lo cual necesita tener información previa sobre dicho escenario.

E. El protagonista también cuenta con una memoria en forma de pizarra que le permite adaptarse a cualquier escenario de juego, porque trabaja sobre lo que recibe como información previa de cada escenario. Además se tendrá en cuenta lo que va recibiendo por su percepción después, que será -de alguna manera- la ubicación de los botones, los guardias, las puertas, etc. y posiblemente el orden en que visitarlos. Aunque no de manera sencilla, la IA será también capaz de sacar a Néstor con vida de al menos una modificación razonable del escenario de ejemplo (creada por vosotros).

Revisión

Tener el repositorio a disposición de los profesores con todos los entregables, preparados en tiempo y forma por todos los miembros del grupo de manera equitativa, supone un 10% de la nota de la práctica. Los profesores tendrá una lista con los datos de todos los grupos y los enlaces a las organizaciones en GitHub (por ejemplo IAV24-G02, la del grupo 2 del curso Inteligencia Artificial para Videojuegos 2023-2024) donde se encontrarán los repositorios de las prácticas (IAV24-G02-P1, IAV24-G02-P2 e IAV24-G02-P3).

Revisión de la documentación

En esta primera fase de revisión hay un único entregable:

  • Documento de producción según la estructura habitual, en el README.md. Supone un 10% de la nota.

Revisión del resultado

En esta segunda fase de revisión los entregables son estos:

  • Proyecto con todos los ficheros de código fuente y recursos del proyecto de Unity. Se incluirán enlaces a documentos compartidos en abierto (o con el profesor) mediante Google Drive, desde donde descargar todo lo que por peso o problemas de licencia no pueda mantenerse alojado en GitHub vía Git LFS. Supone un 20% de la nota.
  • Fichero con la versión ejecutable para Windows de 64bits (llamado por ejemplo IAV24-G02-P3 1.0.0.zip), publicada como lanzamiento (release) en el repositorio. Cada característica del prototipo (A, B, C, D y E) correctamente implementada supone un 10% de la nota, sumando un total de 50%. El ejecutable muestra por pantalla las métricas que permiten valorar la eficiencia de la implementación: en este caso, cantidad de estados en la máquina de estados y de tareas/nodos en el árbol de comportamiento, tareas ejecutadas con éxito y tareas ejecutadas con fracaso, tiempo tardado en completar con éxito la salida del escenario, cantidad de vida restante al terminar, número de objetos con los que se ha interactuado en total… y ratio de fotogramas por segundo.
  • Documental con las pruebas del juego, añadiendo al documento de producción el enlace a un video oculto en YouTube (llamado por ejemplo IAV24-G02-P3), de menos de 5 minutos de duración, donde queda documentado y comentado por voz y títulos de texto el banco de pruebas realizado. El documental tiene tantas secciones como características a probar (esto es A, B, C, D y E). Supone un 10% de la nota.

Más información

Además de la bibliografía recomendada, se pueden investigar las siguientes referencias. En ningún caso se debe replicar código de terceros sin entenderlo bien y “hacerlo nuestro”, y siempre asegurándonos de que funciona exactamente como se requiere en esta práctica.

Se pueden realizar ampliaciones para ir más allá en el aprendizaje.

  • Permite que al pulsar la barra espaciadora, el robot Néstor pueda ser controlado por el jugador mediante el ratón (clic izquierdo para moverse y clic derecho para interactuar con los elementos cercanos -botones y cápsulas de energía-).
  • Programa una máquina de estados jerárquica para los guardias de seguridad.
  • Crea un escenario con geometría 3D compleja, con portales que unen distintas zonas y saltos insertados en la malla de navegación. Plantea tener un cargador de niveles (construidos modularmente) desde fichero.
  • Crea un escenario con mecanismos más complejos, como puertas giratorias, ascensores o rampas controlados por temporizadores, etc.
  • Recrear la máquina de estados del guardia de manera visual utilizando Visual Scripting, herramienta integrada en Unity (el antiguo Bolt de Ludiq):
    https://docs.unity3d.com/bolt/1.4/manual/index.html
  • Recrear el árbol de comportamiento del protagonista utilizando Behavior Designer de la empresa Opsive:
    https://opsive.com/assets/behavior-designer/
  • Mejora el razonamiento del protagonista sobre el estado y la posición de los distintos elementos (las puertas y los guardias) de modo que pueda tomar decisiones más inteligentes, considerando los efectos causados por otros personajes (no tanto que los guardias puedan abrir puertas sino que puedan atravesarlas si las dejaste abiertas).
  • Mejora la gestión sensorial, de manera que el protagonista vea a los personajes no necesariamente compartiendo estancia, razonando también sobre el conocimiento que le aportan esas percepciones, y mostrando realimentación visual para que quede claro lo que ha visto.

Esta página está licenciada bajo CC BY-NC-SA 4.0 por Laboratorios Narratech.