Grupo 2

De Proyecto Butiá
Saltar a: navegación, buscar

Introducción:

El siguiente proyecto se basa en poner a disposición y funcionamiento los motores ax-12 para el robot Butiá por medio de la paleta 'Ax-12 motors'.

Objetivos:

Nuestro objetivo es agregarle al programa Turtlebots, una nueva paleta para poder extender el funcionamiento de los motores ax-12.

Integrantes:

  • Misael Mallada
  • Andrés Piñeyro
  • Sixto Martínez

Tutor:

  • Rodrigo Dearmas

Motivación:

El impulso de todo esto fue debido a la asignación del proyecto a nuestro grupo, que de todos los que había fue el que más nos atrapó. Nos pareció realmente interesante, ya que podríamos agregar una nueva funcionalidad al Turtlebots y además, aportar nuestro granito de arena a la evolución y crecimiento de la plataforma, ya que estos motores son de mayor precisión que los de corriente continua.

Investigación:

Como primer paso, buscamos información acerca de estos servomotores. Tratamos de interiorizarnos, ya que era la primera vez que teníamos contacto con ellos. Pasada esta etapa, que fue la más teórica, tuvimos una idea de que era lo que teníamos y necesitábamos. Procedimos a centrarnos en los archivos que nos servirían de ayuda, y además a crear nuestros propios archivos para poner en marcha la creación de la paleta con sus respectivos bloques.

Evolución:

En nuestra primer reunión tuvimos un pantallazo general de los motores AX-12. Por medio de un manual pudimos ver las funciones, que a la postre van ser útiles para implementar a la hora de armar los paquetes de datos. También vimos un ejemplo de su utilización como lo puede ser una pinza, y nos dio una idea de lo que vamos a proponer como proyecto. Para nuestra próxima reunión se acordaron objetivos puntuales para ir avanzando en el tema.


En la segunda reunión expusimos los objetivos que nos habíamos trazado anteriormente, que era poder armar una paleta en turtlebots con sus respectivos bloques. Estuvimos charlando sobre como realizar y de que forma el llamado a las funciones que van a utilizar posteriormente cada bloque, donde además tuvimos que clonar el git. Para la próxima reunión acordamos presentar las funciones que realmente vamos a necesitar para la paleta de AX-12.


En la reunión n°3 propusimos una selección de las funciones que vamos a utilizar para implementar cada bloque, donde el tutor nos explicó cada una de ellas. Además, nos proporcionó los materiales para comenzar a trabajar: el robot butía y un par de motores Ax-12. También hubo inconvenientes, ya que hubo que puentear la placa para que los motores de AX-12 puedan funcionar. Finalmente nos pusimos de acuerdo que para la próxima reunión no íbamos a poder avanzar mucho, y que de ser necesario concurriéramos al laboratorio para estar más al tanto con los nuevos materiales y así poder trabajar y familiarizarnos.


Al ir al laboratorio quisimos obtener información de los motores AX-12 por medio de telnet. Pedimos ayuda y pudimos charlar con Aylen, que básicamente nos explicó el funcionamiento general desde los bloques turtlebots hasta la placa, llegando a la conclusión de que falta grabar el firmware en dicha placa, por lo tanto se planea para la próxima reunión ver este último punto.


En la cuarta reunión el tutor grabó el firmware en la placa y soldó la placa de tal forma de que el butía pudiera tener acceso tanto a los motores de continua como ax-12. Gracias a esto pudimos realizar las primeras pruebas en el robot por medio de telnet. Cabe destacar que en los puntos recientemente mencionados el docente Santiago nos dió una mano para poder realizarlo y además nos brindo una guía, aclarando nuestras dudas e inquietudes a cerca de los motores. Probamos listar las funciones y además llamarlas, como por ejemplo setSpeed o getPosition. Además pudimos agregar 3 funciones a la paleta.


  • Fijar Posición
  • Obtener Posición
  • Fijar velocidad


Donde "Fijar velocidad" funcionó perfectamente. Para nuestra siguiente reunión debido al avance, fijamos como meta agregar más funciones a la paleta y a su vez poder implementarlas de forma tal de que funcione correctamente en el robot.


En la reunión número 5 llegamos con las siguientes funciones agregadas a la paleta con sus respectivas implementaciones:


  • Fijar Posición
  • Obtener Posición
  • Fijar velocidad
  • WheelMode
  • JointMode
  • ChangeID


Procedimos a depurarlas y probarlas, funcionando correctamente. Gracias a esto accedimos a la propuesta por parte del tutor, de agregar nuevas funciones, no solo a la paleta, sino también al driver de ax-12, como lo son encender led, obtener carga de batería y obtener temperatura. Nos manifestó que no es algo fundamental, pero que estaría bueno agregarlo, ya que le da una funcionalidad más amplia a los motores. Por lo tanto se planteó para próximas reuniones, seguir puliendo las funciones ya existentes para obtener un funcionamiento lo más óptimo posible, y además poder agregar funciones al driver de ser necesario.


En nuestra sexta reunión llegamos con las funciones depuradas que nos habíamos propuesto y agregamos la de encender led y obtener temperatura, objetivos que habíamos fijado en la última reunión. Procedimos a juntarnos con nuestro tutor para ajustar los últimos detalles para la posterior entrega. Nos recomendó eliminar 2 funciones: Wheelmode y JointMode, ya que entendió que no eran necesarias, y además nos propuso agregar 2 bloques más al TurtleBots: Cambiar ID y refrescar, este último se encarga de "teñir" en color verde los bloques de la paleta, en simples palabras: mostrarle al usuario que los motores ax-12 están disponibles para utilizar. Para finalizar se planteó asistir a una última reunión para hacer un relevamiento final de lo que tenemos hecho y ajustar algún detalle de ser necesario.


En la reunión n° 7 y última, le mostramos a nuestro tutor la finalización del proyecto, quien nos dio el ok para la entrega final. Además nos planteo agregar en forma breve y clara, videos explicativos sobre el funcionamiento de la paleta, los cuales serán publicados en la sección "Demostración".


Finalmente la paleta Ax-12 para Turtlebots quedó de la siguiente manera

Paletafinal.png

Desarrollo:

Lo primero que hicimos para comenzar a hacer la paleta fue ir al archivo Butia.py, que ya trae 3 paletas incorporadas. Al ver este panorama, hablamos con nuestro tutor y llegamos a la conclusión de agregar la paleta de ax-12, que dicho sea de paso sería lo más práctico y menos complicado. Esto nos sirvió de mucha ayuda, ya que en el archivo está la implementación de dichas paletas, y nos dio una base para poner en marcha el proyecto. A continuación se explicará brevemente nuestro proceder en la codificación, por medio de imágenes y una explicación de dicho código.


  • Butia.py

Aquí creamos la palette4 con el nombre 'ax'

Tortu1.jpg

Luego definimos la parte gráfica por cada bloque. A modo de ejemplo se mostrará un solo bloque, ya que el desarrollo para el resto de dichos bloques es análogo al que presentaremos a continuación. Se definió: el nombre del bloque, los argumentos (parámetros) necesarios, valores por defecto para dichos parámetros, un letrero de ayuda, la llamada a una función que luego será invocada y el color del bloque.

Tortu2.jpg

Como habíamos dicho anteriormente, se hizo una llamada a una función, que precisamente es la siguiente. Esta se encarga de establecer una relación entre los archivos Butia.py y Functions.py. Lo que va a realizar esta función es setear la velocidad de los motores, y para ello necesitamos un tipo de giro "wheelmode", y por supuesto, el id y la velocidad que se le va a poner a los ax-12


Tortu3.jpg


  • Functions.py

Dentro de Functions.py, nos encontramos con la siguiente función. Esta, sera la encargada de comunicarse con los drivers por medio del modulo "ax" para que este último le envíe mensajes a la placa, y de esta forma hacer funcionar los motores.

Tortu4.jpg


  • Ax.py

Finalmente, el módulo "ax" se comunica con la placa, envíando mensajes por medio de instrucciones hexadecimales y conversiones para obtener la velocidad (incluyendo también el modo de giro) de seteo deseada


Tortu5.jpg


Funcionalidades:

A continuación se describe de forma concisa cada bloque de la paleta ax-12:


  • Refresh.jpg

Se encarga de mostrar el estado de los motores, si los bloques se tiñen de color verde quiere decir que están conectados, de lo contrario aparecerán el color gris (desconectados).


  • GetID.jpg

Obtiene el id del motor, lo hace de forma individual.


  • ChangeID.jpg

Cambia el ID del motor, tiene que haber sólo un motor conectado.


  • Get position.jpg

Obtiene la posición en grados del motor


  • Set position.jpg

Le indica al motor por medio de la id y una cantidad de grados determinada (entre 30° y 330°) la posición deseada. Cabe destacar que el motor presenta una zona ciega, es decir gira de 0° a 300°, los 60° restantes no los proporciona. Por esta última razón es que se establecieron los valores entre 30 y 330 grados. Lo hace en modo jointMode.


  • Fijar velocidad.jpg

Su finalidad es indicarle una velocidad constante al motor para que funcione sin detenerse, dicha velocidad tiene q ser entre los valores 1 y 1023. Lo hace en modo wheelMode.


  • Stop ax.jpg

Sirve para detener el motor, indicándole el ID.


  • Set axled.jpg

Enciende el led que trae incorporado cada Motor, por medio del ID y un valor action (0 para apagar y 1 para encender)


  • Get temperature.jpg

Devuelve la temperatura en grados celsius.


  • Get voltage.jpg

Obtiene el voltaje del motor en volts.

Demostración:

A continuación se presentan 2 videos:


El primer video con una explicación sobre el funcionamiento de cada bloque



Y el segundo con un ejemplo, donde se ejecutan varias instrucciones

Conclusión:

Lo que nos dejó este proyecto fue una experiencia interesante y una adquisición de conocimientos muy rica. Aprendimos a utilizar un lenguaje totalmente nuevo para nosotros como lo es python. Además pudimos comprender el funcionamiento y la estructura del Turtlebots, programa que sabíamos utilizar, pero no teníamos una idea clara de su andamiaje. También aprendimos a usar los servomotores ax-12 a partir de lo mencionado anteriormente. Con estos 3 puntos sobre la mesa, más una fase de investigación pudimos progresar hasta lograr tener el proyecto lo más completo posible. Creemos haber hecho todo lo que se nos propuso, y dejamos una puerta abierta para que se siga mejorando y añadiendo funcionalidades a dicho proyecto.


Archivos:

  • plugins/butia/pybot/functions.py

Se corrigió la línea 81: Donde decía "writeInfo" se cambió por "readInfo"


  • plugins/butia/pybot/drivers/ax12

Se cambió la línea 25 por la siguiente:

return raw[2] + raw[1] * 256
  • plugins/butia/butia.py

Este es el principal archivo donde se encuentra la plaeta agregada con su contenido. Se sugiere sustituir el archivo por el siguiente:

Archivo probado en Versión 23:

https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/images/5/5c/Butia.zip

Archivo probado en Versión 25:

https://www.fing.edu.uy/inco/proyectos/butia/mediawiki/images/7/7c/Butia25amd64.zip