Semana 33. Concluyendo la aplicación y Rematando la memoria
Las tareas de esta semana, básicamente eran 2:
- Terminar la apliación GreenNao
- Escribir la memoria oficial del TFG
Las cuales eran las últimas para poder completar este proyecto. A continuación se explica cómo las he abordado.
Escribir la memoria ofical del TFG
Para esta tarea, dejé finalizados los capítulos 1,2,3 y 5 de la memoria, para así tener una base sólida sobre la que trabajar (si me tocaba modificar cosas, esto es como una primera versión) y dejarla zanjada cuanto antes.
Me llevó bastante tiempo, pero era completamente necesario, para que en la próxima reunión con mi tutor me diese las pautas para retocar y así poder llegar al plazo de entrega del 30 de mayo al 6 de junio con tranquilidad.
Antes de la renunión, mi tutor me envió las pautas necesarias para editar mi memoria, por lo que las seguí y la dejé corregida, esperaría hasta la próxima reunión (que era al día siguiente de esto) para informar a mi tutir al respecto.
Terminar la aplicación GreenNao
Para poder terminar esta tarea, me toco modificar el escenario final y la caja, cambiando sus posiciones y el aspecto de esta última para que pareciese que tenía frutas dentro, en este caso, se han simulado manzanas, o tomates, ya que SDF no es tan potente como para detallar algo así. Dejo a continuación cómo quedó todo:
Tras hacer estos cambios, modifiqué el README.md del proyecto para que quedase acorde.
También, respecto al README, dejé escrito todo el apartado de la aplicación, para que cuando terminase el proyecto completo sólo fuera añadir el enlace a la memoria y a la presentación, además del vídeo final.
Después de eso, me puse manos a la obra con el código de la aplicación, el cual era bastante sencillo, ya que simplemente NAO debía ir hacia la mesa, coger la caja, dar la vuelta, ir hacia la otra mesa y dejar la caja. El código me quedó de la siguiente manera:
import CoordMovesLib
import time
CoordMovesLib.stand_still()
time.sleep(1)
CoordMovesLib.setArc(1, 0, 10)
time.sleep(1)
CoordMovesLib.grab_box()
time.sleep(1)
CoordMovesLib.setArc(-1, 0, 4)
time.sleep(1)
CoordMovesLib.setArc(0, 1, 10)
time.sleep(1)
CoordMovesLib.setArc(1, 0, 20)
time.sleep(1)
CoordMovesLib.release_box()
print("Caja movida con éxito")
Y el resultado de esta primera versión de la aplicación fue un desastre, no lo muestro porque sería perder el tiempo. Ya que otra vez se había descuadrado el rozamiento y NAO no andaba recto, se caía, etc. Así que intenté solucionarlo.
Para solucionarlo seguí editando las físicas del mundo, y arreglando errores que no sabía que tenía con respecto a las físicas. También me di cuenta que un gran problema era el número de pasos, ya que el patrón no terminaba de acabar la secuencia de forma que el paso a la siguiente repetición fuera suave, cosa que hacía que el movimeinto fuera extremadamente inestable, por lo que decidí volver a los mínimos de 10 pasos, ya que en una reunión, mi tutor me indicó que esto no era tan importante.
Mientras intentada dar con la solución, me di cuenta de que mi librería no estaba del todo bien implementada, ya que no se usaba rclpy correctamente ya que no se usaba rclpy.spin, necesario para lanzar nodos de ROS2, sino que las clases se llamaban directamente, esto llevaba a mucha fatiga y errores por problemas internos del pc a la hora de gestionar sus recursos (que fue justo lo que descubrí). Por lo que tuve que editar todas las clases de la librería (excepto la del IMU) para utilizar esta función de rclpy y que todo fuera correctamente.
Para ello, simplemente cambié los nombres a las clases por “nombreAntiguo_class”, y, a continuación, cree una función para cda una de ellas con la siguiente estructura:
def nombreAntiguodeClase(parámetros_de_la_clase):
rclpy.init()
node = clase_a_llamar(parámetros_de_la_clase)
rclpy.spin_once(node, timeout_sec=0.1)
node.destroy_node()
rclpy.shutdown()
Cosa que sí mejoró bastante el comportamiento (ya no caía, no hacía movimientos extraños, etc), aunque las físicas seguían estando mal.
También, tras un par de pruebas sueltas, me di cuenta de que la caja, además de entorpecer la simulacion al tener tantos elementos, hacía que NAO se cayera al suelo al cogerla, por lo que decidí dejarla como estaba al principio, sin manzanas, pero, añadiendo una textura para que pareciera que sí las tenía:
Cuando lo probé, NAO ya no se caía al sostenerla, y la caja se comportaba como es debido. Pero el suelo seguía haciendo que resbalase y no fuera una caminata recta del todo. Cosa que sigo solucionando.