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.

5 comentarios:

  1. Enhorabuena por tu proyecto!!! me parece magnifico.
    Por curiosidad, ¿como has diseñado la alimentación? es decir, los servos del sistema pan/tilt pueden ir acoplados a la cámara, y así usas la libreria pixy para gestionarlos. Pero ¿como has alimentado estos servos? ¿para alimentar la cámara+pantilt has usado los pines de alimentacion JP1 (conector blanco)?

    Estoy en plena faena con un pixypet con mecano y el diseño de la alimentación me está suponiendo un problema: Bateria 12V, Motores de 12V, servos pantilt 5V que piden demasiada corriente...

    Un saludo

    ResponderEliminar
    Respuestas
    1. Gracias Paco, me alegra que te guste el proyecto.

      En mi caso el robot está alimentado por 8 pilas AAA (1.5v) o sea 12 v en total. La cámara se alimenta desde la placa arduino a través del puerto que en la placa de la cámara marcado como "I/O port" utilizando el cable gris.

      En total el robot tiene dos servos de rotación continua para las ruedas y los dos que mueven la cámara.

      Un saludo

      Eliminar
  2. Gracias por contestar!! Esa configuración la he probado y tengo continuos reseteos de arduino. Por lo visto los servos que uso tienen unos picos de intensidad que la placa no puede suministrar con el I/O port.

    ¿que servos usas? ¿están alimentados desde la cámara? ¿el controlador es arduino uno?


    Gracias de nuevo

    ResponderEliminar
    Respuestas
    1. Los servos de rotación continua son estos https://goo.gl/Yf1DHb y los que mueven la cámara estos otros https://goo.gl/ArhkF2.

      Y si, los que mueven la cámara están alimentados desde ella.

      Seguramente vas a tener que alimentar la cámara individualmente.

      Yo creo que la ventaja la tengo en la placa arduino que es una BT-Zum de bq que da hasta 3.2A, suficiente para alimentar varios servos. Es una placa estupenda para este tipo de robots, el problema es que bq ya no la comercializa de forma individual, sino que tienes que comprar un kit de robótica para conseguir una.

      Te adjunto información de la placa:
      http://diwo.bq.com/zum-bt-328-especificaciones-tecnicas/

      Una comparativa con Arduino Uno
      https://aiglesias.com/?p=7314

      E información del kit donde está incluida:
      https://www.bq.com/es/zum-kit

      Eliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar