lunes, 8 de febrero de 2016

Poliphemo empieza a andar (y a buscar)


Ha pasado ya un tiempo desde que os presenté a Poliphemo. En aquel entonces, solo mostré imágenes de su diseño creado con  Freecad (un estupendo software libre para diseño) hoy ya es hora de mostrar su cara real y de mostraros su avance.

Os presento a Poliphemo


Poliphemo





Si recordáis, en la entrada anterior os conté partíamos de unas premisas iniciales a la hora de enfrentarnos al diseño y como ahora veréis, creo que vamos cumpliendo.

Sistema motriz de tipo oruga

Ya os dije que esta premisa no era por ninguna razón en particular, simplemente me gustan, me parecen muy molones los prinbots con este sistema y me apetecía mucho diseñar algo así,  sobre todo para estudiar y aprender a calcular, diseñar  y montar las ruedas y correas.

Además, es complicado encontrar correas del tamaño apropiado para nuestros robots, pero con materiales como el Filaflex (plástico flexible para impresoras 3D) tenía ante mi el reto de realizar el proceso completo: calculo, diseño, prototipo y pruebas ¡¡¡Genial!!!



 



Dejaremos para una entrada posterior el detalle de como realicé todo el proceso del diseño de ruedas y correas. Ademáscomo estoy convencido que me he complicado la vida un montón (falta de conocimientos y experiencia), espero que algún alma caritativa, nos ilumine con un método mas eficiente e ingenieril :-)

Robot polifacético y con fines educativos

Y esto...¿que es lo que es?



Lo que quiero decir con ésto es que mi intención era en primer lugar, diseñar un robot de principio a fin.  Es todo un placer poder decir: "este lo he hecho yo enterito".


Pero el robot que quería diseñar, debería servir para aprender tanto a mi, como a cualquier persona le guste y se decida a hacerlo y debe servir para poder estudiar el uso de distintos tipos de sensores, lo que nos lleva a la siguiente caracteristica.

Poliphemo es polifacético en el sentido de que es posible incorporarle de forma sencilla distintos tipos de sensores y actuadores y así experimentar con los mismos.

Con el sistema de anclaje de los portasensores, no es necesario diseñar robots distintos para sensores distintos, sino que realizando el cambio de una o dos piezas y la programación, puedas pasar de un robot con cámara a uno que evite obstáculos mediante ultrasonidos o a un robot siguelíneas.






Ahí tenéis a Poliphemo luciendo un bonito sensor de ultrasonidos y un hermoso par de sensores de infrarrojos (IR) que lo convierten en un siguelíneas evita obstaculos.



Pixy CMU5Cam

Aprovechando que había adquirido una cámara/sensor últimamente, me pareció una gran idea explorar el uso de la misma en un robot, y como el diseño de Poliphemo es "polifacetico" (mucho "poli" suelto en esta entrada), pues, blanco y en botella...

La primera prueba que hemos realizado ha sido copiada de un robot que hicieron en Adafruit. Los únicos cambios han sido que ellos utilizaban motores DC y Poliphemo tiene servos de rotación continua, por lo que hemos adaptado el código a su uso.

A partir de aquí, y después de haber aprendido un montón en cuanto al uso de la cámara, la API, etc. se nos ocurren muchas mas ideas para explorar la utilización de la misma: Siguelíneas visual, recoge objetos, etc..

Aquí os dejo un video de las primeras pruebas de Poliphemo usando ese hermoso ojo (no dejéis de verlo hasta el fina):




Funcionamiento

Vamos a ver como funciona el código de seguimiento de objetos:

Básicamente, el funcionamiento general del robot, sigue el siguiente diagrama







O sea, si encuentra un objeto que se adapta a lo que se ha programado anteriormente en la cámara, lo sigue, si no, se pone en modo búsqueda hasta que encuentra uno, sencillo ¿no?

Realmente, hay tres módulos fundamentales en el código:

  • La búsqueda del objeto
  • La posicionamiento del objeto una vez encontrado
  • El seguimiento del objeto

La función de búsqueda, lo que hace es posicionar la cámara en una posición y hace girar a Poliphemo hasta que identifica un objeto.

El código que se encarga del posicionamiento del objeto (funcion TrackBlock) lo que hace es tomar el desplazamiento del centro del objeto respecto del centro de la "pantalla" o zona de visualización y mueve los servos que dirigen la cámara para hacer coincidir ambos centros. O sea, mueve la cámara arriba/abajo, derecha/izquierda para centrarla en el objeto.

Y por último, la función que se ocupa del seguimiento del objeto. Esta función controla el desplazamiento horizontal de la cámara (una vez posicionada) con respecto a la posición central del servo. Este desplazamiento determina la dirección que ha de tomar Poliphemo. El tamaño con que detecta la cámara el objeto, nos indica la proximidad del mismo y en función de éste, calculamos la velocidad con la que nos acercamos al mismo, pudiendo detener al robot a una cierta distancia o incluso, hacerlo retroceder si el objeto se acerca de más a Poliphemo.



Código Fuente y diseños

Como siempre, todo el robot es patrimonio tecnológico de la humanidad, por lo que,  en mi cuenta de GitHub iré colgando todo lo referente a este Robot, tanto diseños, piezas y código.
Solo añadir que este es un proyecto vivo, ya tengo detectados algunas mejoras en el diseño que se irán haciendo poco a poco, por lo que los ficheros pueden sufrir modificaciones.

Espero que os guste.

No hay comentarios:

Publicar un comentario en la entrada