Open ajardon opened 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
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
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:
results
tensorboard --logdir results --port 6006
localhost:6006
en un navegador, y ves los resultados.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.
Pd: el resultado obtenido con este entrenamiento es similar al obtenido anteriormente :upside_down_face:
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.
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:
He actualizado el repositorio con el nuevo proyecto de Unity por si lo queréis echar un vistazo
@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)
@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?
@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.
Aquí lo tienes: enlace escena con maneta
Te he enviado una invitación para darte acceso
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:
con este entrenamiento obtuve un reward máximo de 140 aproximadamente
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
Sin embargo, el robot aunque si que sigue algo más le objeto, se queda como pillado en la siguiente posición:
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:
¿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?
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