domingo, 8 de mayo de 2011

icaro y servomotores (prueba)

Con una actualización del firmware de la placa np03 se puede manejar servomotores.
Los servomotores tienen ciertas características como su control de posición que los hace muy efectivos para proyectos de robótica, son precisos, potentes y relativamente baratos.


un servo Futaba s3003, muy usado en hobbies
Para poder trabajar con servos hay que modificar la placa np03 y eliminar el integrado UNL2803 (por la forma de trabajo del servo no la necesitamos), en este caso armamos un "adaptador" para poder conectar 3 servos futaba 3003, las salidas directas del pic 16F628A van al puerto de control de cada servo, mediante PWM generamos el pulso para controlar la posición del servo de 0 a 180 grados.




placa modificada con adaptador


 brazo echo con 3 servos futaba

 La camara es para hacer pruebas con TurtleArt

 detalle de la pinza abierta 

 Pinza cerrada

Vista general



robot en accion.



 otra vista

mediante TurtleArt controlamos los grados de cada servo del brazo robot y lo movemos, con una primitiva que nos permite seleccionar el servo y la posición (de 0 a 255 representando los 180 grados del servo)


Turtleart con opción para control de servo



barra de herramienta icaro en TurtleArt


Todavía el firmware es inestable y no puede manejar mas de un servo al mismo tiempo, ademas si no se hace una pausa de 1500 mili segundos el sistema se cuelga y hay que reiniciar al pic.

Link de descargas



firmware de prueba para manejar servomotores
 


plugin para TurtleArt (version 107) que agrega primitivas de icaro


lunes, 18 de abril de 2011

TurtleArt (sugar) + icaro = Tortucaro

Tortucaro es un plugin y una API escritos en python para usar con TurtleART.
TurtleArt Es un entorno de programación gráfico basado en el lenguaje LOGO, en el que se puede hacer pequeños programas y realizar diseños con una tortuga de forma gráfica.
La idea fue desarrollar como primera medida una API (usando python-serial) que permitiera trabajar directamente con python y la placa de control ICARO NP03 a través del puerto serie /dev/ttyUSB0. Luego desarrolle un plugin para Turtle Art para crear "primitivas" propias de icaro y poder interactuar con el software TurtleArt.
Las primitivas integradas a TurtleArt son para activar las salidas de la plca NP03, leer los 6 sensores digitales y un retardo en mili-segundos para hacer pausas.


pantalla de TurtleArt con ICARO




video del robot

En este video podemos ver el funcionamiento de TurtleArt con icaro, el programa activa el avance del robot y se queda en un bucle infinito esperando que los sensores 2 y 3 hagan contacto. Cuando eso pasa, el robot retrocede y gira para la derecha y vuelve a avanzar.


otro ejemplo de TurtleArt con icaro





video del robot con un sensor LDR para seguir una linterna


Con este programa, el robot gira constantemente a la derecha hasta que se activa el LDR (por el contacto con una fuente de luz). Cuando el sensor se pone en estado alto (hay luz) el robot avanza, si no, gira a las derecha.
cuando choca con el sensor 2, un boton del tipo "final de carrera", se para el programa.




control de un motor paso a paso con LDR


detalles de las primitivas icaro


barra de herramientas TurtleArt con icaro


para ver un tutorial de como hacer plugins para TurtleArt:

http://wiki.sugarlabs.org/go/Activities/TurtleArt/Plugins


codigo fuente de la API:

http://valentinbasel.fedorapeople.org/apicaro.py

codigo fuente del plugin:

http://valentinbasel.fedorapeople.org/icaro_plugin.py

version de TurtleArt 106 con icaro ya instalado:

http://valentinbasel.fedorapeople.org/turtleart.tar

martes, 14 de diciembre de 2010

Py-caro

Py-caro es una aplicación del tipo front-end para icaro.
La idea es tener un programa que permita de forma visual y simple hacer una primera aproximación a la manipulacion de mecanismos electricos sencillos (motores de corriente continua, paso a paso, leds).
Py-caro esta programado en python usando las librerías pygame para gestionar los gráficos, y ejecutando código icaro para mandar señales a la placa np03.
la version para descargar esta en estado BETA, funciona y mas o menos hace lo que tiene que hacer, pero le falta un gran trabajo de correccion de errores (sobre todo los errores en tiempo de ejecución tan dificiles de descubrir).
El sistema se basa en poner objetos (motores, leds) y mediante conectores y lineas, unirlos a las salidas correspondientes de la placa np03.

pantalla principal de Py-caro

el programa es bastante simple visualmente, a la derecha estan lo botones con los objetos que se pueden insertar, motores de corriente continua, motores paso a paso, un botón para encender un led o cualquier cosa que requiera un solo pin de la placa, un botón para activar hasta 4 pines a la ves y un jostick ara manejar u pequeño robot de 2 motores que muevan sus dos ruedas.
a la izquierda se encuentan los 8 pines de la placa de control (de color violeta) donde se conectan los objetos para controlar mecanismos físicos en la placa. los pines violetas estan ordenados de arriba a abajo, siendo el mas alto el pin numero 1 y el mas bajo el pin numero 8, en realidad son representaciones de un byte por lo tanto su orden seria:

pin 1 = 1
pin 2 = 2
pin 3 = 4
pin 4 = 8
pin 5 = 16
pin 6 = 32
pin 7 = 64
pin 8 = 128

Funcionamiento


Para empezar se elige el objeto en el menú de la derecha, el cual aparecerá en la pantalla .

controlador de motores de corriente continua

Con el boton derecho del mouse sobre el cuerpo nos permitira moverlo y acomodarlo en distintas partes de la pantalla.

detalle del controlador de motores C.C

Los botones verdes ejecutan código ICARO cuando se los aprieta (boton izquiero del mouse), para conectar el controlador con un pin violeta primero hay que hacer click con el boton del medio (generalmente la bolita que sirve para subir y bajar de pagina) o con los dos botones al mismo tiempo (en notebooks) sobre el conector amarillo, con eso aparecera una linea blanca que seguirá al puntero del mouse.

linea para unir el conector amarillo con el violeta


Para "fijar" la unión entre los dos conectores, llevar el mouse hasta uno de los pines violetas y apretar el botón izquierdo y se dibujara una linea roja que representa la unión y a cual pin controlara el objeto.


controlador de C.C conectado al pin 1 de la placa

una ves conectados todos los pines del controlador, al apretar sobre los botones verdes, se ejecuta código ICARO y activa un pin o los dos pines para mover para un lado o para el otro al motor c.c (usando un rele doble inversor o un puente H).
En el siguiente ejemplo se puede ver como controlar un motor paso a paso desde Py-caro, y ademas la integración con el entorno SUGAR para las OLPCs.


controlador de motores paso a paso (4 bobinas)




Video de Py-caro con SUGAR

En el video anterior se puede ver como Py-caro esta integrado con SUGAR y controla un pequeño motor paso a paso de una impresora vieja.


dos formas de controlar un motor paso a paso

También se puede controlar usando objetos "led" y activando una a una las bobinas del motor (presionando en secuencia en cada controlador led).

Para descargar el código fuente escrito de Py-caro:

http://valentinbasel.fedorapeople.org/pycaro.tar

todavia hay mucho por mejorar, pero ya se pueden grabar las sesiones y volverlas a abrir con los controladores para c.c, led y "paso a paso".
tambien hay un par mas de controladores para agregar como, semáforos, vayas que suben y bajan o controladores personalizados.
esta version trabaja con icaro-0.6.2.261110 y puerto serie, para usarla en puerto paralelo hay que modificar todos los icr que están en la carpeta icaro, pronto voy a subir una modificación que permita usar los dos puertos indistintamente

jueves, 25 de noviembre de 2010

robot con brazo actuador

Este robot usa el mismo chasis que el robot con cámara de vigilancia, solo que se sustituyo la cámara por un brazo de 1 grado de libertad (solamente en el eje Y) con una pinza hidráulica echa con 2 jeringas como mecanismo para abrir y cerrar la pinza.
La pinza es accionada por un motor con una varilla roscada que mueve un tornillo al que esta pegado el embolo de la primer jeringa. Cuando el motor se acciona el tornillo mueve el embolo haciendo que la jeringa empuje una columna de agua por el tubo hacia la otra jeringa que reacciona moviéndose en sentido contrario (efecto de pascal).


representación del efecto de pascal

En ese sentido el conjunto motor-varilla se convierte en un actuador lineal.
como es muy difícil saber cuantos segundos activar el motor para que mueva la jeringa hasta el tope y no se pase, se instalo dos sensores final de carrera, uno en la base del conjunto motor-varilla para que cuando el tornillo llegue hasta la base del motor se apague, y otro en la pinza.
Para controlarlo se uso dos camaras webs (una en la pinza y otra de navegación) y la interface gráfica fue echa en python con librerías pygtk, el control de los motores esta escrito con icaro 0.6 y la interface de hardware es la placa np03.
En este robot se usan 2 de las 5 entradas digitales de la placa np03 para determinar cuando la pinza esta cerrada o totalmente abierta, mediante icaro se activa el motor-varilla hasta que la pinza aprieta el sensor o el tornillo llega hasta la base del motor.

robot visto desde arriba



Vista de costado


Detalle de la pinza y la jeringa

Detalle del actuador lineal

Motor y sensor "final de carrera"


Vista general del actuador lineal con
la jeringa

Los videos siguientes muestran como funciona el robot para agarrar una pequeña flor de papel en una plataforma y mover lo hacia otra plataforma.
el sistema se controla desde VNC y la GUI esta escrita en python.
Los dos videos muestran la misma escena, uno filmando el robot y el otro es una captura de escritorio de la computadora que se uso para controlar remotamente al robot.





filmación del robot trabajando.





captura de escritorio VNC.



miércoles, 22 de septiembre de 2010

robot de vigilancia

La placa de conexión NP03 sirve de interface entre la computadora y los periféricos (sensores, actuadores) que queramos controlar con el lenguaje ICARO.

Se conecta a la computadora mediante un cable Serie o un adaptador Serie/USB y puede manejar hasta 8 dispositivos digitales (ON/OFF) simultáneos con una tension maxima de 12 V - 500 mA y la minima de 5 V - 500 mA

La parte mas importante del circuito es el microcontrolador PIC 16F628A que sirve de interface para demultiplexar los bytes enviados a traves del puerto serie, y para mandar informacion de los 6 sensores digitales que tiene.




Esquema de funcionamiento de la placa



diagrama esquemático del circuito

PCB de la placa


Este es un Robot con cámara de vigilancia aprovechando la placa np03 de puerto serie/usb, el sistema esta controlado por una netbook ASUS de 8 pulgadas y 2 gigas de disco duro.
en la netbook se instalo icaro (version 0.6), tkinter (para la ventana de control), opencv (para manejar las camras), vncserver (para controlar remotamente a la netbook) y python.
el mecanismo de funcionamiento es sencillo, se activa el servidor vnc y desde otra pc dentro de la misma red wifi se llama al cliente vnc (vncviewer) y se abre un usuario dentro de la netbook.
como ROOT (desde la terminal) se abre el programa ./gui.py que es una ventana echa en tkinter y python que contiene los botones para enviar la informacion a la placa de control.
cuando se apreta un boton, se graba un numero en el archivo variables.txt y se ejecuta el archivo .icr con icaro.
el software icaro lee variables.txt y en funcion del valor (que graba en una variable) del numero, activa los puertos y genera el voltaje que accionan los motores que controlan las dos ruedas y los dos ejes de la camara de vigilancia



detalle de la placa montada sobre el robot




la placa con los reles para controlar el giro de los motores


robot de costado


Vista de frente del robot



Otra vista

El siguiente es un video de 4 minutos donde se puede ver la vision del robot de vigilancia, usando sus dos camaras web (la propia de la netbook y la movil).
En el video se puede ver como desde la pc controlo el robot (mediante VNC) y lo muevo por el living de la casa.
como la computadora es de bajos recursos, los videos no son de la mejor calidad, pero sirve ara mostrar las posibilidades del sistema.




conferencia CNEISI

Estas son unas imagenes (cortesia de Matias Maceira) de la conferencia que di en el 4º Congreso Nacional de Estudiantes de Ingeniería en Sistemas de Información (CNEISI 2010) en la UTN Santa Fe.
La charla se trato sobre robótica educativa con software libre y fue una presentación de ICARO como alternativa libre a software de robótica educativa privativos.







Después de la presentación, mostré el funcionamiento de un pequeño robot controlado por una netbook (ASUS de 8 pulgadas) al cual comandaba desde otra netbook mediante una red inalambrica y un servidor VNC.
el robot esta construido con dos motores CC controlados con la placa icaro NP03 , un adaptador serie/usb que conectaba la placa a la netbook (de prestaciones similares a las XO del proyecto OLPC)
En el siguiente video se puede ver al robot navegando y mostrando las imagenes mediante su camara web en el proyector de la sala (también se puede ver como se cae tratando de cruzar un cable).




En este video, muestro el uso de librerias open-cv para reconocimiento de rostros y un proyecto de front-end para icaro escrito en python con librerías pygame.



Quería aprovechar este medio para mandar un saludo y nuestro agradecimiento a la gente que estuvo en la organización del evento que fueron muy amables en invitarnos a dar las charlas sobre software libre que se dieron en el congreso.

jueves, 19 de agosto de 2010

Nueva pagina web de ICARO

La gente de proyecto FEDORA mediante su sistema de redmine, dieron alojamiento para el codigo fuente de icaro y los planos PCB de las placas de control que estamos desarrollando.

para descargar el .tar con el código fuente de ICARO, planos, pdfs y demás información ir a la web de rpmdev:

http://rpmdev.proyectofedora.org/projects/icaro/wiki

Ahi se alojaran los paquetes actualizados del sistema he información tecnica.

jueves, 18 de marzo de 2010

camara de vigilancia

Este proyecto muestra como usar ICARO como un script para controlar dos motores CC (corriente continua) y rotar sobre sus ejes una camara web.
Se usa como interface de control un pequeño programa escrito en python usando las librerias graficas Tkinter (Tk) para generar una ventana con 4 botones (arriba, abajo, izquierda, derecha) y con otro programa en python usando librerias opencv para visualizar la camara web.
cuando se presiona un boton, el programa graba un valor en un archivo de texto (variable.txt) y ejecuta el archivo ICARO el cual toma el valor del archivo de texto y en funcion de eso, activa el motor correspondiente y su direccion.
pasandole mas datos a traves de "variable.txt" se puede aumentar o disminuir la velocidad de giro o sus tiempo de encedido.
De esta forma ICARO se vuelve un lenguaje de script y se puede controlar desde distintas interfaces como python o hasta PHP, con lo que se podria hacer una camara controlada por internet (mediante streamind de video).


Diagrama esquematico del proyecto


usando un par de motoreductores CC se controlan los dos ejes (x,y), se usan dos pines de la placa ICARO para controlar cada motor, un pin activa/desactiva la tension en el motor y el otro trabaja sobre un Rele que cambia el sentido de la direccion de giro del motor.


diseño de la camara
con los dos motores de control





Aca se puede ver como funciona el programa, primero se activa el archivo camara.py (programa python) con lo que se genera la ventana con los botones de control, despues se activa la camara web mediante opencv.
cada ves que se apreta un boton, se graba un valor numerico en un archivo de texto, luego se ejecuta ICARO mediante una llamada a sistema y abre el archivo de texto, lee el valor y activa los puerto en funcion de eso.




Imagen de la camara con el controlador





Detalle de la camara con
el motor de control eje Y

Motor eje X

placa controladora ICARO con dos reles
para cambiar la direccion de giro de los motores



Video de ejemplo de la camara

martes, 10 de noviembre de 2009

brazo robotico

Siguiendo con los proyectos para mostrar las posibilidades del sistema ICARO, desarrolle este brazo robotico de 3 grados de libertad fabricado con motores de lectoras de CD rotas.
La idea basica era fabricar de un brazo de costo casi cero con componentes recuperados de basura electronica, poco hardware y aprovechar los 8 conectores de la placa ICARO.
Basicamente, cada motor es controlado por un relé doble inversor, y este a su ves es controlado por 2 conectores del puerto paralelo (con este esquema se puede controlar hasta 4 motores).
un conector envia tension al motor prendiendolo y apagandolo; El otro motor controla el rele que al activarlo cambia la polaridad de la tension haciendo que el motor gire para un lado o para el otro.
de esta forma con los dos conectores de lpt se puede activar/desactivar el motor , cambiar su sentido de giro (derecha/izquierda) y controlando el encedido y apagado, se puede controlar la velocidad con la que gira prendiendolo y apagandolo en pulsos regulares (PWM).
Este pequeño brazo tiene muy poca presicion y es bastante debil para levantar objetos, pero mas que nada sta diseñado para demostrar como se pueden fabricar pequeños robots educativos con un bajo costo. Sin embargo, si se utilizaran componentes de buena calidad (motores mas pontentes con servomecanismos y una estructura mas estable) se con el mismo codigo ICARO, se podria usar un brazo robotico muchisimo mas estable y profesional.



En esta fotografia se aprecia los motores y los grados de libertad del brazo robot.
los motores y sus engranajes son del dispositivo de ejeccion de la bandeja de CD de lectoras rotas.

Para controlarlo uso los 5 conectores de sensores de la placa ICARO para manejar cada motor a modo de jostick. 4 conectores controlan el giro izquierda/derecha de 2 motores. el quinto boton, cambia a los otros dos motores para asi poder controlar el giro de los 4 motores en total.