top of page

Un juego que aprende a jugar solo

COMPONENTES Y SUMINISTROS

Arduino Nano R3                    1

MG-90s servos 2

MR105ZZ rodamiento 2

HERRAMIENTAS Y MAQUINAS NECESARIAS

impresora 3d

destornillador

ACERCA DE ESTE PROYECTO

Durante un tiempo he estado rebotando entre pasatiempos diferentes, pero de alguna manera relacionados, aprendizaje automático, mecatrónica y desarrollo de juegos.

Tuve la idea de crear un juego que aprenda a jugar solo con un buen viejo pad de juegos. Pensé que sería un proyecto divertido que combinaría tres cosas que me gustan.

Y antes de comenzar, sé cuán fútil e inútil es este proyecto, y que también podría resolverse de una manera mucho más eficiente utilizando sistemas de control 'clásicos' como controladores PID, LQR ... Pero me instalé en una red neuronal ya que estaba realmente interesado en ver cómo una red neuronal podría hacer frente a todos los inconvenientes que vienen con el hardware (juego en las partes, retraso en el movimiento, calibración imperfecta ...)

 

1.jpg

There is something that fascinate me about AI's that can interact with the real world. And event though it is just math, it always feels like magic when you see the model learn on its own before your eyes.

EL PLAN INICIAL.

Quería que este proyecto fuera bastante sencillo sin grandes incógnitas con las que lidiar, así que decidí reutilizar las habilidades que ya desarrollé en otros proyectos. Pensé que lo haría en 2 días ... jajaja

Para la parte del juego y el aprendizaje automático, decidí usar el motor del juego Unity junto con el kit de herramientas ML-agents también desarrollado por Unity, ya estaba familiarizado con este kit de herramientas, así que tenía una idea medio decente de en qué me estaba metiendo, incluso si evolucionó bastante desde la última vez que lo usé.

2.jpg

La elección del juego se hizo desde el principio, tenía que ser un juego que requiriera muy pocas entradas para poder mantener las partes mecánicas muy rápidas de diseñar.

El kit de herramientas ML-agent viene con algunos ejemplos preconstruidos, uno de ellos es un ejercicio de equilibrio de pelota, que fácilmente podría convertirse en un juego que requiere solo un joystick.

3.jpg

Ejercicio de equilibrio de balón / Imagen del repositorio Unity ML-agentGitHub

EL ROBOT.

 

Luego procedí a diseñar un brazo simple que accionara el joystick. Tenía algunos servos MG-90 y un Arduino Nano acumulando polvo en una estantería, así que rápidamente diseñé algunas piezas alrededor de esos componentes.

​

Lo único que tuve mucho cuidado fue tratar de mantener el punto de pivote del joystick alineado con el eje de rotación de los servos, ya que esto mantendría la programación más simple en una etapa posterior ... ¡llámame perezoso si quieres! ;)

4.jpg
5.jpg

El siguiente paso fue escribir un programa simple para el Arduino que le permitiera controlar el joystick.

 

Luego se creó una escena de unidad simple para ayudar a calibrar aproximadamente los movimientos del joystick.

5.jpg

Era hora de asegurarse de que la IA pudiera tomar el control del joystick. La simple escena de Unity se actualizó para permitir el control del joystick derecho utilizando el joystick izquierdo. El joystick izquierdo solo se usó para simular la salida de la red neuronal, esto me permitió asegurarme de que la comunicación entre la computadora en el Arduino funcionaba bien.

6.jpg

EL JUEGO.

​

 

En este punto, era hora de crear el juego. Como se mencionó anteriormente, recreé uno de los ejemplos incluidos en el kit de herramientas y agregué algunas dificultades adicionales. Una fue agregar un objetivo al que la pelota debe estar lo más cerca posible mientras se equilibra en la plataforma, la segunda fue lanzar la pelota a una velocidad aleatoria en dirección aleatoria al comienzo de cada juego.

​

 

También creé algunas texturas para una belleza extra (algo de ...).

7.jpg

FORMACIÓN.

 

Era hora de comenzar el proceso de capacitación.

 

Aquí hay una explicación extremadamente simplificada de los pasos que ocurren durante el entrenamiento.

 

1 - la IA, llamémosle agente, observa el estado del juego (observación), aquí recopila la información directamente en el juego. Busca la velocidad y la ubicación de la pelota y también el ángulo de la plataforma.

 

2 - después de sus observaciones tomará una acción (mover el joystick).

 

3 - dependiendo del resultado de esta acción, recibirá un castigo si la pelota cae (puntaje negativo) o una recompensa (puntaje positivo) si la pelota permanece en la plataforma, cuanto más cerca esté la pelota del objetivo, mayor será el la recompensa es

8.jpg

Luego, el ciclo se repite hasta que la IA aprende a tomar las decisiones necesarias para obtener una puntuación máxima.

 

En este punto, pensé que tendría que comenzar el entrenamiento y alejarme durante unas horas para luego volver a un robot completamente funcional.

9.jpg

Bueno, no fue el caso ... En la primera sesión de entrenamiento, la IA aprendió a jugar, pero fue extremadamente nervioso.

 

Luego decidí volver a entrenar al modelo e introducir una recompensa adicional por ser suave. Funcionó un poco mejor pero lejos de ser genial. Estaba bastante seguro de que podría sacarle más provecho.

 

Uno de los grandes problemas de incluir cualquier hardware durante el entrenamiento es que está limitado a entrenar a un solo agente a la vez en tiempo real.

 

Es por eso que opté por una nueva estrategia. Tomé la decisión de dividir el entrenamiento a la mitad. La primera mitad sucedería sin hardware. Esto significa que puedo entrenar múltiples IA a la vez y acelerar el tiempo 20 veces. Luego, introduzca el hardware en la segunda parte de la capacitación para asegurarse de que la IA se adapte al hardware. Esto ayudaría a ahorrar horas.

10.jpg

El entrenamiento con múltiples agentes totalmente digitales fue muy bueno y me permitió probar diferentes sistemas de recompensa / castigo, así como diferentes parámetros de la red neuronal (número de capas, número de neuronas ...). Desafortunadamente cuando reintroduje el hardware en la segunda parte del entrenamiento esperaba que la IA manejara el control de manera bastante decente ... No fue el caso. No estoy muy seguro de si se debió a un error en mi código o si el joystick 'virtual' no estaba simulando el real lo suficientemente bien, pero estaba claro que necesitaría mucha capacitación para llegar a un nivel de yo ser feliz

 

Ahora que sabía que tenía buenos parámetros de red y un sistema de recompensa / castigo decente, decidí morder la bala por última vez y volver a entrenar desde cero. Después de otras 10 horas de entrenamiento, estuve bastante contento con el resultado, todavía es un poco más nervioso que el modelo totalmente entrenado digitalmente, pero creo que es debido a que la red compensa la imperfección del hardware.

CONCLUSIÓN.

No creo que haya hecho ningún descubrimiento innovador trabajando en este proyecto, pero ciertamente fue un buen recordatorio de que la IA no es la solución para cada problema y ciertamente no es una herramienta mágica que pueda hacer todo por sí misma. También encontré muy interesante que en realidad es muy fácil introducir el sesgo humano en su comportamiento. ¿Quizás ser suave no es la mejor técnica? pero aun así decidió recompensarlo y lo obligó a desarrollar este comportamiento.

 

Y lo último que se debe sacar de este proyecto es que no se debe ignorar la cantidad de entrenamiento necesario, ya que terminó siendo la parte más lenta de esta aventura.

 

Todavía me divertí mucho con este pequeño proyecto y estoy seguro de que intentaré hacer algo como esto nuevamente en el futuro.

 

 

Contáctenos

5812 Cromo Dr El Paso Texas 79912

Tel: 915 777 3078

email de tekplaza.png

Servicio al Cliente

Contáctenos > / Envíos >

Devoluciones   > / Pago y Garantía>

Aceptamos

Arduino Original
  • Blanco Icono de YouTube
  • Blanco Icono Pinterest
  • Blanco Icono LinkedIn
  • White Twitter Icon
  • White Facebook Icon
  • Tekplaza

Visit our Privacy Policy, Terms and uses and Return Policies

© 2023 Tekplaza.store

bottom of page