Esta es una prueba de un robot SCARA fabricado con 3 servos para el brazo actuador y 2 servos para controlar una cámara web.
Los brazos actuadores de tipo SCARA son un sistema muy eficiente para poner objetos en un espacio horizontal.
en esta pagina excelente se explica como calcular la cinematica inversa de de un brazo SCARA para obtener el angulo de os 2 servos que representan el brazo y ante brazo.
Este robot fue diseñado para hacer distintas pruebas, en este caso, se utilizo para "jugar" al clásico juego infantil TA-TE-TI, donde el robot usando visión artificial para determinar la jugada echa por el humano (los cuadrados naranjas) usando openCV con la función cv.SURF para detectar imágenes planas
una pequeña reseña de software que se puede encontrar en huayra-linux (la distribuycion linux del programa conectar igualdad). Obiamamente figura ICARO entre las aplicaciones:
En el transcurso del año di varias charlas sobre icaro en distintos eventos. Si bien considero que es fundamental contar de que se trata el proyecto, difundir el conocimiento y sumar gente al proyecto, Creo que el formato "charla uni direccional" donde uno habla y los demás escuchan tiene serias limitaciones. Por un lado es agotador siempre decir lo mismo (y por mas que uno trata de ser original con las presentaciones, a la larga se termina repitiendo), por otro lado "el que mucho aprieta, poco abarca", considero que el formato "pequeño taller" o grupo de trabajo especializado es mucho mas útil a nivel desarrollo.
En general, de las charlas informales (cerveza de por medio), logre mucho mejor resultado que solo pasando presentaciones en un caño proyector.
Supongo que la idea principal es poder organizar reuniones en formato hackathon donde un pequeño grupo se dedica a un problema concreto y puntual.
contando un poco sobre icaro
(fotos Romina Martino. Creative Commons Atribución-CompartirIgual 3.0 Unported)
siempre hay que llevar algo a una charla.
(fotos Romina Martino. Creative Commons Atribución-CompartirIgual 3.0 Unported)
Los pic 18f4550 tienen 8 puertos que pueden ser usados como conversores analogicos-digitales, lo que permite tomar valores discretos de diversos tipos de sensores.
Segun la wikipedia un conversor es un dispositivo electrónico capaz de convertir una entrada analógica de voltaje en un valor binario, los 8 conversores que tiene el pic le permiten tomar una señal de 0 a 5 volt y convertirlo en un valor binario de 10 bits (hasta 1023 valores enteros).
Con un potenciometro podemos probar un puerto de la placa np05 para ver como funciona el conversor analogico digital.
diagrama de conexión
Lo unico que tenemos que hacer es conectar el pin del medio del potenciometro a una entrada analogica de la placa y los pines de los costados, uno a masa y el otro a 5 volt. Con eso podemos medir la diferencia de voltaje que general el potenciometro con el incremento o decremento de la su resistencia
sensor analogico con un potenciometro
Los sensores analogicos son muy útiles, permiten medir temperatura, humedad, variación de luz y muchas cosas mas.
Gracias a la ayuda de Yader Velásquez (yaderv - nicaragua) y de Eduardo Javier Echeverria Alvarado (echevemaster - Venezuela) icaro esta en los repositorios oficiales de fedora.
Ahora para instalar icaro solamente hace falta hacer:
Yum install icaro
Esta versión de icaro esta preparada para trabajar a partir de fedora 17.
Un pequeño video de la instalación de icaro desde los repos oficiales de fedora!.
un saludo y muchisimas gracias a mis amigos de fedora LATAM que me ayudaron para lograr entrar con icaro dentro de fedora!
Taller de robótica para artistas en CASA13. Sensores y actuadores al alcance de un artista cualquiera. Por Valentín Basel y Federico Prystupczuk
La idea es generar dispositivos autónomos (a.k.a. robots)
aprendiendo conceptos básicos de programación y electrónica
aplicados a proyectos artísticos. La duración del taller será de dos meses y contará de 3 etapas:
* Jugar con TurtleArt comenzando a programar cosas sencillas. * Compilar y conectar lo programado a sensores y actuadores, electrónica sencilla. * Trabajar en proyectos de los participantes, en los cuales ustedes apliquen estas herramientas.
Requisitos: ser mayor de 18 años y traer una computadora (cualquier sistema operativo). Costo total: 400 pesos. La mitad ($200) se paga el primer día. Incluye: CD con sistema operativo y software necesario, disponibilidad de herramientas, placas y componentes reciclados.
Inicio: 18 de Marzo 2013
Horario: lunes de 20 a 22. Lugar: CASA13, Pje. Revol casi esquina Belgrano, Córdoba (Arg.)
CUPOS LIMITADÍSIMOSSi tenés dudas, consultas y/o te querés inscribir: tallerherramientaslibres@gmail.com ICARO es un proyecto de desarrollo de software y hardware libre para la ense- ñanza de robótica en colegios primarios y secundario. Se trata de acercar de forma transparente y sencilla los fundamentos de la robótica tratando de simplificar conceptos
técnicos complejos para que los docentes necesiten conocimientos mínimos para poder trabajar en el aula. Se compone de una serie de paquetes de software que trabajan con placas de hard- ware de bajo costo y fabricación, permitiendo investigar y diseñar pequeños robot pe-
dagógicos
Uno de los programas instalados por defecto dentro del sistema SUGAR es Turtleart1 , este es una tortuga gráfica inspirada en LOGO, que permite el dibujo artístico mediante el ensamblaje de funciones de programación. Se trata de una actualización del famo-
so lenguaje LOGO diseñado por Seymour Papert y adaptado para trabajar dentro del proyecto OLPC.
El año 2012 termino muy bien para el proyecto ICARO, las primeras pruebas de campo en colegios resultaron muy buenas, resolvimos varios problemas tecnicos importantes, tuve la posibilidad de conocer muchos embajadores del proyecto FEDORA y viaje bastante mostrando ICARO en diferentes congresos.
Para este 2013 tengo muchos planes pero el principal es lograr que ICARO logre entrar dentro de los repositorios oficiales de FEDORA, para eso hice una serie de cambios y re planteos dentro de ICARO, antes tenia 3 repositorios Git para cada parte de los paquetes de icaro (icaro-bloques, tortucaro y apicaro), ahora voy a englobar todo en un solo RPM que se llamara icaro-1.0.rpm.
Para eso, se unio todo mediante un lanzador que contiene el acceso a las tres formas de trabajo con ICARO (tortucaro para trbajar con LOGO, icaro-bloques para generar codigo C y python-tools para usar apicaro y python).
nuevo lanzador icaro.
Ahora, todo ICARO queda unificado en un solo repositorio GIT y con la instalacion del rpm se instala, turtleart mas tortucaro, icaro-bloques y apicaro con python-tools (idle).
Gracias a la ayuda de Yader Velásquez (Nicaragua) y de Eduardo Javier Echeverria Alvarado - a.k. Echevemaster - (Venezuela), estamos trabajando en el rpm de ICARO y, ¡ya hay uno listo!:
unos videos de una bobinadora automática echa por el alumno Sergio Secolo de la Escuela de Educación Secundaria Técnica Nº 2 "Ing. César Cipolletti" de bahia blanca.
Y aca los dos videos que me mandaron para subir al blog
Sorprende la calidad del armado de la maquina y el cableado de los componentes, realemente esta muy bien echo. FELICITACIONES!
pygame es una librería de python pensada para hacer vídeo juegos de una forma fácil, en sus ultimas versiones trae un modulo para manejar cámaras webs como las que podemos tener instaladas en una notebook.
Lo interesante, es que con esta librería podemos hacer cosas muy potentes para dotar de "inteligencia" a nuestro robot autonomo.
En este tutorial, voy a mostrar como manejar la libreria pygame.camera para levantar la camara web de una notebook y reconocer un umbral de color X y determinar su par ordenado (x,y) en la pantalla (con lo cual despues se puede tranquilamente mover nuestro robot).
ES IMPORTANTE TENER MINIMOS CONOCIMIENTOS DE PYTHON
Como recomendación instalar ipython y python-tools. ipython es un interprete python con múltiples opciones, la que mas me gusta es la de auto completado (me ahorra muchos dolores de cabeza). python-tools es una serie de herramientas para python, como idle, que es un interprete gráfico de python, con capacidad de auto completado y depuración de código que nos va a servir mucho para ir viendo el codigo.
Como podemos verlo principal es iniciar el pygame y pygame.camera, si todo arranca como corresponde, no debería pasar nada, todavía no declaramos nuestra pantalla ni capturamos las imágenes de la cámara.
#!/usr/bin/env python
import pygame
import pygame.camera
pygame.init()
pygame.camera.init()
######## declaro las variables necesarias ######################
# para manejar la ventana de pygame donde se mostraran las imagenes
Pantalla=pygame.display.set_mode((320,240),0)
# crea una tupla con las camaras reconocidas (el cero es la primer camara)
ListaCamaras=pygame.camera.list_cameras()
# instancia el objeto pygame.camera.Camera con la primer webcam
# y una matriz de 320x240 pixeles
camara=pygame.camera.Camera(ListaCamaras[0],(320,240))
# inicio la camara
camara.start()
Con este código nuestra cámara ya esta iniciada y debería aparecer una ventana de pygame. Sin embargo la ventana apenas aparece, esta toda en negro y al rato desaparece, eso pasa porque no hicimos el bucle principal para controlar la camara.
Para no complicar el codigo fuente no voy a poner lineas de código para controlar errores ni cosas por el estilo (por ejemplo determinar si ListaCamaras tiene alguna cámara, o si tira un error camara.start() o cosas de esas). Por lo tanto el codigo siguiente si bien funciona, no es optimo (por ejemplo para cerrar la ventana hay que matar el proceso python).
#!/usr/bin/env python
import pygame
import pygame.camera
pygame.init()
pygame.camera.init()
######## declaro las variables necesarias ######################
# para manejar la ventana de pygame donde se mostraran las imagenes
Pantalla=pygame.display.set_mode((320,240),0)
# crea una tupla con las camaras reconocidas (el cero es la primer camara)
ListaCamaras=pygame.camera.list_cameras()
# instancia el objeto pygame.camera.Camera con la primer webcam
# y una matriz de 320x240 pixeles
camara=pygame.camera.Camera(ListaCamaras[0],(320,240))
# inicio la camara
camara.start()
while True:
imagen=camara.get_image()
Pantalla.blit(imagen,(0,0))
pygame.display.update()
¡Ya tenemos nuestra cámara!... y VIVE! muajua jua jua jua (risa malevola de cientifico loco).
Ahora solo falta reconocer un umbral de color. Para ello agregamos una variable mas a nuestro programa:
La variable ccolor captura un umbral de color de la imagen delimitada en por un rectangulo de 10x10 pixeles en la posicion x,y de 160x120 pixeles.
Con esa variable nosotros podemos usar para crear una mascara con pygame.mask.from_threshold.
con nuestra mascara, ya podemos contar la cantidad de pixeles y ver si pasa de cierta cantidad (se puede calibrar para obtner mejores resultados), y en base a eso obtener el par (x,y) del centro de nuestra mascara.
#!/usr/bin/env python
#!/usr/bin/env python
import pygame
import pygame.camera
pygame.init()
pygame.camera.init()
Pantalla=pygame.display.set_mode((320,240),0)
ListaCamaras=pygame.camera.list_cameras()
camara=pygame.camera.Camera(ListaCamaras[0],(320,240))
camara.start()
imagen=camara.get_image()
#obtenemos el umbral de color del centro de la escena en el primer cuadro
ccolor = pygame.transform.average_color(imagen, (160,120,10,10))
while True:
imagen=camara.get_image()
Pantalla.blit(imagen,(0,0))
#creamos una mascara de la imagen con nuestro umbral
#(elimina todo menos el umbral)
mask = pygame.mask.from_threshold(imagen, ccolor, (30,30,30))
# se fija si la imagen tiene alguna conexion con nuestra mascara
connected = mask.connected_component()
# si los numeros de pixeles dentro de la mascara es mayor a 100
if mask.count() > 100:
# busca el centro
coord = mask.centroid()
#imprime el par ordenado x,y
print coord
# dibujo un circulo para poder ver las cordenadas que reconoce
pygame.draw.circle(Pantalla, (0,255,0), coord, 10,5)
pygame.display.flip()
pygame.display.update()
Con esto capturamos el primer umbral de la imagen, antes de iniciar el bucle while. Esto puede ser medio molesto, en caso de que querramos elegir un punto de la pantalla y que el circulito ver (y posiblemente nuestro robot) pueda seguir colores arbitrarios.
Para eso seguiremos con las opciones de pygame y vamos a usar sus funciones para manejo del mouse.
pygame.event.get()
mouse= pygame.mouse.get_pressed()
if mouse[0]==1:
x,y=pygame.mouse.get_pos()
ccolor = pygame.transform.average_color(imagen, (x,y,10,10))
Básicamente lo que hacemos es capturarlos eventos con pygame, gravar los "cliks" del raton en una lista y despues fijarnos si el boton esta presionado.
la variable mouse va a tener una lista de la siguiente forma : [0,0,0] donde cada cero es uno de los 3 botones del mouse (boton izquierdo, rueda del centro y boton derecho). Si el boton izquierdo esta presionado la lista quedaria: [1,0,0] enotnces con fijarnos en el primer elemento de la lista podemos saber si un boton del mouse fue presionado.
despues capturamos la posición x,y del puntero y volvemos a crear la variable ccolor con el umbral de color que queremos que siga nuestro robot.
el codigo completo quedaria asi:
Capturando el par ordenado x,y podemos hacer cualquier cosa con nuestro robot, como seguir el punto, usar trigonometria para determinar distancias (usando un laser y matematica sencillas).
En el proximo tutorial veremos de mover nuestro robot en funcion de las imagenes de la camara.
un robot usando el umbral de color para reconocer vasos de distintos colores
Bienvenidos al blog del proyecto ICARO. ICARO es un software desarrollado con la intención de acercar de una manera trasparente al usuario los fundamentos de la programación (iteraciones, repeticiones, recursividad, etc) aplicados a un contexto físico como puede ser un robot o cualquier sistema de automatización. Para ver los contenidos de forma ordenada, lo mejor es fijarse en las etiquetas donde se irá colocando la información de tutoriales, hardware etc.