Semana 16: Estudio del manager y uso del exercise.py con un brain.py
La tarea de esta semana ha sido estudiar el manager.py para saber como funciona y hacer uso del exercise.py con el brain hecho anteriormente.
Con respecto al manager, tras estudiarlo saco la siguiente idea general:
Al inicio se definen constantes como que versión del RADI se va a a usar, ejercicios o driver para renderizar.
La clase Commands se puede resumir como la que lee instrucciones y distintas variables, ya sea de Gazebo, de como ejecutar un ejercicio, de ROS. También inicia los elementos que componen la página, es decir, el Gazebo, la consola y el servidor VNC donde se mostrará la simulación, todos estos se ejecutan en un thread cada uno.
A la hora de correr un ejercicio se inicia también un thread, el manager intenta conectarse con el servidor constantemente hasta que lo consigue (salvo por los sleeps raros de 0.2 que entiendo que se usan para no llenar la pantalla de excepciones hasta que se conecta).
Se ven varias funciones dedicadas a la manipulación de las físicas de Gazebo y una función especial para resetear el dron. Y por último una función para cargarse todo lo que se ha podido ejecutar dentro de las posibilidades que se ofrecen en lo anterior descrito.
La clase Manager recoge el mensaje del websocket y de ahí se saca el comando y el ejercicio. Esta clase sí que inicia las partes fundamentales de la paǵina. Y en general no deja de ejecutar tener las mismas funciones que Commands en términos de iniciar y para gz, manipular la simulación pero aparte tiene el evaluador de código. Lo de que no deja de tener las mismas funciones es dado que tiene una variable Commands en el init.
Entonces al final este es el que recibe las órdenes, el Manager, y con el objeto Commands las acaba ejecutando dentro de este Manager.
Con respecto a la segunda tarea, esta ha sido meter en frio un brain.py, el cual solo hace que gire el robot sobre si mismo dentro del exercise.py dentro del docker.
He cambiado del exercise.py algunas cosas para hacer que funcione:
-Lo primero ha sido crear un fichero de ejecution que tenga el formato de Unibotics (parte secuencial y parte iterativa) para poder asemejarse a lo que le gusta al exercise.py. Básicamente he hecho en el while true un pass y en la zona iterativa un ros2 run metido con la libreria os para ejecutar el nodo.
-Dentro del exercise.py he leido el contenido de ese fichero a una variable y me he saltado el proceso de establecer el servidor para ir a la parte que nos interesa, que es el execute_thread, pasadole como argumento el codigo que acabamos de leer, con eso ya funciona el exercise.py
Video del resultado (mi ordenador estaba apunto de explotar de tanta cosa abierta, de ahí que el robot se mueva lento):