Encoder

De Proyecto Butiá
Revisión del 20:50 24 nov 2015 de Terminator (Discusión | contribuciones) (Solución)

Saltar a: navegación, buscar

Integrantes

  • Pablo Anzorena anzorena.fing@gmail.com
  • Sebastián Lorenzo sebastianlorenzo88@gmail.com
  • Manuel Laguarda lag.manuel@gmail.com
  • Bruno Olivera bruno.olivera.dev@gmail.com

Tutor

  • Gonzalo Tejera - gtejera@fing.edu.uy.

Introducción

El presente trabajo tiene como objetivo principal extender las capacidades del butiá en lo que a movimiento refiere, permitiendole realizar desplazamientos y giros mas precisos. Ademas de poder determinar que el butia se desplace una distancia a cierta velocidad.

Objetivo

El objetivo del proyecto es dotar al butiá con la capacidad de conocer en cada instante de tiempo, cual fue su desplazamiento. Hasta el momento para mover el butiá, existe un comando que setea el valor de potencia de los motores. Quedando a cargo del “programador” la lógica de movimiento. Por ejemplo para avanzar una cierta distancia, hay que accionar los motores por un cierto tiempo a una potencia determinada.


Motivación

Extender las capacidades del kit butiá, permitiendo tener más precisión en los movimientos. Vimos que existía un problema al momento de programar un movimiento con precisión solamente con la potencia de los motores y esperas, por eso es que nos interesó mejorar este aspecto.

Investigación

Posibles soluciones:

  • Algoritmo flujo óptico: Este algoritmo lo que hace es tomar datos del entorno mediante la cámara y comparar el desfazaje entre imágenes sucesivas.

La complejidad de este algoritmo esta dada por averiguar que pixeles entre imágenes consecutivas comparar y como determinar una distancia a partir de los cambios en los mismos. Para este caso el ambiente por el cual se mueve el robot es vasto y diverso lo cual resulta mas difícil el como interpretar las imágenes. Por otro lado creímos que la curva de aprendizaje sobre el algoritmo era grande como para terminar la solución en tiempo y forma.

  • Utilizar Mouse Óptico Como Sensor: La idea consiste en ir sensando con un mouse óptico ubicado en la parte inferior del butiá y de acuerdo a las coordenadas x e y determinar el movimiento.

En esta etapa decidimos descartar esta opción ya que para hacer el giro sobre el eje, las coordenadas x e y se mantienen.

  • Motores CC sin escobillas: Los motores de corriente continua tienen sensores de hall para determinar la posición en donde se encuentra la rueda mediante la medición de campos magnéticos, pudiendo mediante esto establecer la distancia recorrida y el sentido del giro.

Al momento de hacer el proyecto no habÍan estos motores, por lo que no pudimos probarlos, pero usamos el mismo tipo de algoritmo para la solución.

  • Sensor de Gris y Marcas en una Rueda: Esta idea consiste en marcar una rueda e ir sensando con un sensor de grises las marcas. Estas marcas las utilizamos para medir la distancia recorrida, dichas marcas se encuentran equidistantes en la rueda.

Solución

La solución elegida es la de utilizar el sensor de grises con la rueda marcada. Se decidió realizar esta implementación debido a que se podia realizar con un bajo costo, ademas el algoritmo realizado se puede utilizar para implementar la solución de Motores CC sin escobillas cambiando el sensado de los grises por el sensado de los campos magnéticos.

20150629 171226.jpg

20150629 170942.jpg

El diametro de la rueda es de 7.8 cm, por lo que el perimetro es d * Pi = 7.8 cm * Pi = 24.7 cm. En base al perimetro, se intento dividir la rueda en la mayor cantidad de divisiones posibles (para disminuir el error), tomando en cuenta que la lectura del sensor de grises pueda determinar un cambio de color (negro, blanco) correctamente. Para realizar esto se dividió la rueda en 24 partes iguales. El arco de cada parte es de 1.03 cm. Como el rango de valores entre el color blanco y el negro para el sensor de grises es bastante grande, siempre cuenta correctamente las marcas, el problema con la precisión esta dado por el ambiente sobre el cual se desplaza, a la vez de la mecánica de las ruedas. Suponiendo un ambiente optimo y las ruedas correctamente posicionadas, el margen de error es de +/- 1.03 cm.

El diseño de la rueda es el siguiente:


Imagen butia.png

Para poder implementar el modulo de velocidad se calcula dinamicamente que distancia se desplaza por tiempo entre marca y marca. Si la velocidad es menor al rango objetivo (velocidad objetivo +/- (velocidad objetivo)*0.1) se aumenta la potencia de los motores y si es mayor se disminuye. Este comportamiento esta descripto en la siguiente maquina de estados.

Ejemplo.jpg

Posibles mejoras

Como posible trabajo futuro, se puede integrar el sensor de grises al motor que ya está en el butiá. Así como que el sensor esté conectado directamente con la placa y liberar un puerto. También aislar el sensor para reducir el ruido producido por la iluminación ambiente.

Trabajos futuros

Ya que contamos con una buena precisión para determinar el desplazamiento, la idea es poder determinar la velocidad dado el desplazamiento y el tiempo. Crear un algoritmo que vaya ajustando su velocidad de acuerdo a la distancia desplazada por el tiempo transcurrido.

Materiales

Para la realizacion de este proyecto se utilizaron tornillos, tuercas y fichas de ensamblaje pertenecientes al kit butiá.

Paleta de Turtlebots

Se agregan los siguientes bloques de funciones para el programa Turtlebots en el codigo fuente butia.py:

  • Forward distance: Este bloque sirve para determinar que el butia avance cierta distancia con una cierta potencia configurable por el usuario.
  • Backward distance:Este bloque es igual al Forward distance distance solo que en vez de avanzar retrocede.
  • Left degree: Este bloque esta hecho para poder determinar cuantos grados gira a la izquierda el robot con una cierta potencia.
  • Right degree: Este bloque esta hecho para poder determinar cuantos grados gira a la derecha el robot con una cierta potencia.
  • Calibrate grey: Este bloque realiza un giro completo de la rueda modificada para poder determinar el valor del sensor de grises para los colores blanco y negro. Evitando que la calibracion la realice el usuario.
  • DistanceSpeed: Este bloque se utiliza para que el butia se desplace a una velocidad determinada en una distancia dada

Paleta encoder.png

Video demostrativo:

https://www.youtube.com/watch?v=MduiTJ4rryA&feature=youtu.be

Conclusiones

Si bien se logro construir un algoritmo eficiente el cual permite al butia realizar movimientos precisos, el mismo se puede mejorar y extender para brindar mas funcionalidades. Como por ejemplo poder asignarle al robot butia que se mueva a una velocidad constante.

Cabe recalcar que el costo para la realización del proyecto fue mínimo en comparación a las otras posibles soluciones(las mencionadas mas arriba), los únicos materiales utilizados son los que se detallan mas abajo. Por lo tanto es una funcionalidad que se puede agregar fácilmente.

Materiales utilizados para el proyecto:

  • 1 Sensor de grises
  • 1 Adhesivo con el diseño para la rueda
  • 1 Pieza de acrílico para colocar el sensor de grises cerca de la rueda

Código

Media:Butia_(1).zip‎