Sandraarevalo / TFM-Sandra-Arevalo

MIT License
1 stars 0 forks source link

Usando el modelo del IIWA en Unity de @sheila implementar un esquema sencillo de ML aplicado al seguimiento de una bola que se mueve siguiendo una trayectoria predefinida #3

Open ajardon opened 2 years ago

Sandraarevalo commented 2 years ago

Vídeo del primer entrenamiento del robot IIWA siguiendo una bola que describe una trayectoria:

https://user-images.githubusercontent.com/93920380/162246743-8730ffa8-bfca-489e-a1a6-cc2626407a9b.mp4

-Rewards establecidos en el código: Reward 1 al tocar la bola (cambio de color de la bola al azul) Reward 0.8 cuando la distancia de tool0 a target menor de 1

Tutorial seguido: https://youtu.be/HOUPkBF-yv0

Sandraarevalo commented 2 years ago

Proyecto de Unity con el primer entrenamiento subido (revisión de código): https://github.com/Sandraarevalo/TFM-Sandra-Arevalo.git

@ajardon @jgvictores

Sheilasr12 commented 2 years ago

Hola Sandra, no sé si necesitas la escena con la maneta. Por si @ajardon te lo pide en algún momento, he actualizado la escena, añadiendo la maneta "handle" al modelo del robot (al urdf). Está aquí: https://github.com/Sheilasr12/TFM/tree/master/iiwa_controller

jgvictores commented 2 years ago

Hi @Sandraarevalo

Una herramienta muy empleada para observar la evolución del entrenamiento (loss, mean reward, etc) es tensorboard. Al parecer, ya hay integración con ml-agents.

Viendo: https://github.com/Unity-Technologies/ml-agents/blob/main/docs/Using-Tensorboard.md

Seguramente hayan más guías/tutoriales, pero los pasos serían:

  1. No sé si hay que activarlo en alguna configuración o algo, que sería importante
  2. Parece ser que lo guarda todo en una carpeta results
  3. En la carpeta que lo contiene, lanzas tensorboard --logdir results --port 6006
  4. Abres localhost:6006 en un navegador, y ves los resultados.
Sandraarevalo commented 2 years ago

Hola @jgvictores @ajardon, he usado la herramienta tensorboard que dijo @jgvictores y he observado la evolución del entrenamiento.

En este caso, lo he entrenado con la bola parada para que la alcance el robot, y he asignado reward solo cuando el robot toca la bola, exactamente como en el vídeo del tutorial. Os enseño las gráficas del entrenamiento, ya me decía qué opináis para ver si sería conveniente cambiar algo del código o encontrar alguna otra opción de tutorial que haga algo similar.

image image image image

Pd: el resultado obtenido con este entrenamiento es similar al obtenido anteriormente :upside_down_face:

jgvictores commented 2 years ago

Con esto se avanza!

Yo haría una de estas 2: 1) Refuerzo proporcional a distancia (p.ej. la euclídea). 2) Jugar con el discount factor.

Sandraarevalo commented 2 years ago

Hola @jgvictores @ajardon!

He terminado de exámenes y me he puesto de nuevo con el entrenamiento del robot. He modificado varias cosas y parece que pinta bien ya el entrenamiento, ha dejado de hacer movimientos locos y sigue la bola. Os enseño cómo va:

https://user-images.githubusercontent.com/93920380/172175051-3bd30b51-9837-4f27-88ed-719d210fb3fa.mp4

iwa_reward

He actualizado el repositorio con el nuevo proyecto de Unity por si lo queréis echar un vistazo

jgvictores commented 2 years ago

@Sandraarevalo ¡Muy buena pinta!

@ajardon ¿Por donde crees que es mejor tirar?

Aquí algunas ideas (no mutuamente excluyentes): a) Generar gráficas de comparativas de técnicas y/o parámetros b) Si esto es comandado en posición articular, cambiar a comandos de par articular c) (propuestas Alberto/Sandra)

ajardon commented 2 years ago

@Sandraarevalo muy bueno¡¡¡¡ Parece que ya tienes dominada la técnica de aprendizaje... Se me ocurren varias cosas, pero quizás, lo mas chulo sea forzar a que aprenda a alcanzar la esfera con una determinada orientación... se ocurre sustituir la esfera por un objeto con geometría definida, (por ej. la maneta que se acopla al IIWA) de manera que se fuerce la orientación que precisa el robot para alcanzarla.

@jgvictores ¿cómo lo ves?

Sandraarevalo commented 2 years ago

@ajardon @jgvictores yo también había pensado en que el siguiente paso sea alcanzar un objeto con una determinada orientación, lo veo buena idea, probaré con la maneta del robot.

@Sheilasr12 , ¿podrías volver a enviarme el enlace con la nueva escena con la maneta? Perdí el archivo y no puedo volver a acceder al link.

Lo de partir desde trayectorias reales puede ser bastante útil también.

Sheilasr12 commented 2 years ago

Aquí lo tienes: enlace escena con maneta

Te he enviado una invitación para darte acceso

Sandraarevalo commented 2 years ago

He probado a entrenar el robot para que alcance el objeto con una buena orientación, adquiriendo el reward solo cuando coinciden las orientaciones de la maneta y el objeto por encima de 0.5, por lo que el reward vale de 0.5-1, como hablamos @ajardon . Dejando los parámetros del entrenamiento sin tocar, igual que en el caso del robot sin maneta que seguía la bola, el robot intenta adaptarse a la posición correcta que se espera para alcanzar el objeto, sin embargo no sigue este, se queda como pillado:

https://user-images.githubusercontent.com/93920380/179753052-f3df6c3e-7c13-4379-95ea-cececd62907a.mp4

con este entrenamiento obtuve un reward máximo de 140 aproximadamente image

Probé a cambiar el num_layers de 2 a 3, como me sugeriste @ajardon , y el reward aumentó muchísimo, estabilizándose casi en 900 image

Sin embargo, el robot aunque si que sigue algo más le objeto, se queda como pillado en la siguiente posición: robotIwa

Yo creo que puede ser debido a alguno de los parámetros del entrenamiento, tal vez hidden_units o batch_size. ¿Qué opináis? Estos son los parámetros utilizados: image

4 He creado una guía con la instalación y los pasos seguidos para el entrenamiento.

jgvictores commented 2 years ago

¿Cómo verías/veríais, más bien, penalizar (dentro del refuerzo) un poco el hecho de que cada articulación se acerque a límites articulares?