miércoles, 17 de septiembre de 2014

controlando un robot con señales MIDI

El estándar MIDI (Musical Instrument Digital Interface) es un protocolo muy usado en la industria musical para transmitir información entre dispositivos musicales, como teclados, samplers, equipos para sincronizar dispositivos, etc etc. Si bien es un estándar bastante antiguo, sigue siendo valido y aun hoy es una de las formas mas común de controlar distintos equipos musicales.
En los sistemas GNU/LINUX, también implementan una forma de controlar distintos software y hardware a través de señales MIDI, de esa forma, uno puede tener un controlador MIDI o un teclado con salida MIDI  y controlar distintos programas de audio como LMMS, Hydrogen, Ardour o algunos sintes digitales como qsynth.
La forma de trabajar con auido en GNU/LINUX, puede ser un tanto complicadod e entender al principio, hay varios motores de sonido (OSS, ALSA) pero ademas, esta JACK, que se encarga de capturar el hardware y ser un buffer (o proxy si se quiere) que toma las entradas y salidas de los distintos software y los envía a la placa de audio, permitiendo hacer cosas como tomar la salida de LMMS y meterla dentro de un canal de Ardour y la salida maestra de Ardour derivarla a un multi efecto como Rakarrack, y después, todo eso a la salida de la paca de audio.


Ejemplo de Jack con su front-end qjackctl y LMMS

La idea del proyecto siguiente es poder hacer una interface que tome datos MIDI a traves de Jack y las re envié al puerto /dev/ttyACM0 para poder controlar un robot y hacer música. Para eso, use las librerías de pygame para control MIDI, que si bien son unas librerias gigantes, estan empaquetadas en casi todas las distribuciones GNU/LINUX (Y obviamente en FEDORA) y hay mucha documentación. Para el control del robot usao el modulo apicaro, que forma parte del proyecto ICARO y que me permite andar señales a la placa mediante python-serial y un firmware especial del lado del PIC (firmware tortucaro, que se carga desde la pantalla de icaro-bloques).

boton de carga para el firmware Tortucaro 
(para controlar la placa desde puerto /dev/ttyACMx)




Video de un robot que toca el xilofon, 
controlado mediante LMMS y tambien un teclado controlador MIDI.

 Aca el código fuente del robot, no es muy difícil de entender, básicamente son 2 clases que controlan el MIDI y el puerto serie (usando apicaro)
import pygame
import time
import pygame.midi
import apicaro


class ROBOT:
    """ clase robot, cotrola mediante apicaro los dos servomotores
    de moviento del robot (izquierda/derecha, arriba/abajo """
    escala={
            "c":30,
            "d":60,
            "e":80,
            "f":110,
            "g":130,
            "a":155,
            "b":180,
            "c2":205
            }
    golpe={
            "sube":60,
            "baja":29
            }
    
    def __init__ (self):
        """ Class initialiser """
        
        self.icaro=apicaro.puerto()
        self.band=self.icaro.iniciar()
    def mover(self,tecla):
        self.icaro.activar_servo(1,self.escala[tecla])
    def golpear(self):
        self.icaro.activar_servo(2,self.golpe["baja"])
        time.sleep(0.07)
        self.icaro.activar_servo(2,self.golpe["sube"])
        

class MIDI:
    """ inicia pygame.midi y tiene un diccionario con algunas notas MIDI """
    notas={
            60:"c",
            62:"d",
            64:"e",
            65:"f",
            67:"g",
            69:"a",
            71:"b",
            72:"c2"
            }
    def __init__ (self):
        """ Class initialiser """
        pygame.midi.init()
        print "set player"
        self.player= pygame.midi.Input(1)
        print "set instrument"

midi=MIDI()
robot=ROBOT()
while robot.band:
    # nos fijamos si hay datos en el buffer
    flag = midi.player.poll()
    if flag == True:
        data = midi.player.read(10)
        senal = data [0][0]
        nota = senal[1]
        volumen = senal[2]
        #~ print volumen
        # si la nota esta dentro del diccionario, muevo el robot
        if midi.notas.has_key(nota):
            if volumen <>0:
                robot.mover(midi.notas[nota])
                time.sleep(0.2)
                robot.golpear()

miércoles, 16 de julio de 2014

ICARO en Tucumán

Mateo Carabajal (http://losaparatos.net/) me invito para ir a dar unas charlas sobre icaro en la ciudad de San Miguel de Tucuman y aprovechar para capacitarlos para un proyecto de robotica educativa que estan usando.
Fue una experiencia hermosa que espero que se repita.

 Las 3 plaquitas de pruebas que armamos para poder hacer analisis y ver la factibilidad de fabricarlas en Tucuman.


Mateo y Natalia me mostraron su editorial de libros y aprovecho para publicitarlos:
http://dichosaeditorial.blogspot.com.ar/

Libros y electrónica, una excelente combinación

En pleno proceso de soldado 


El pizarron de Mateo


Una placa ya lista y andando en la netboook de Conectar igualdad


 Dando la charla

  publico

Publico mirando el robot que lleve para pruebas 

 Mateo Carabajal

Hubo una muy linda convocatoria


 Robot Cuadrupedo para demostraciones con la placa Np06

Fue una experiencia hermosa poder compartir con la gente de Tucuman el proyecto ICARO, y espero que podamos seguir dandole continuidad.

viernes, 16 de mayo de 2014

ICARO en FISL15

el foro internacional de software libre (FISL) es uno de los eventos mas grandes de latino américa en torno a la comunidad del software libre. Todos los años se hace en la ciudad de Porto alegre (Brasil). Este año, al giual que el año pasado, la comunidad de FEDORA auspicio el proyecto ICARO para poder ir a brasil a dar una charla en el espacio "Paulo Freire" sobre robotica educativa usando software libre y hardware de especificaciones abiertas.
Fueron cuatro dias de donde aproveche para mostrar el proyecto a varias personas y volver a ver a viejos amigos que estan muy metidos en al robotica usando software y hardware libre.
Este año note la gran cantidad de proyectos sobre robotica usando software libre y me pone muy contento porque significa que cada ves mas gente se da cuenta de las posibilidades pedagógicas en torno a los robots.


Demostración del robot BUTIA de Uruguay.


Usando Arduino y plastilina para fabricar sensores y botones 



Una tortuga echa con una impresora 3D para aprener a programar



Bloques de control de la tortuga (cada bloque es una resistencia y el harwdare mide ese valor y arma una matriz) 



Brazo de 5 grados de libertad, echo con servos motores y una impresora 3D



Otra vista del Brazo  robot en el stand de FEDORA, se puede ver la placa ICARO NP06 que controla los movimientos del robot.



El stand de la comunidad de FEDORA 



En el espacio Paulo Freire, dando la charla sobre ICARO



Una gran convocatoria del ámbito educativo, se nota como los docentes y capacitadores comienzan a ver el softwre libre como una alternativa ética y de calidad en la enseñanza.


lunes, 7 de octubre de 2013

ICARO en el Cusco

Del día 26 al 29 de setiembre, se desarrollo en la ciudad de cusco el FUDCON, Fedora Users and developers conference, el evento de la comunidad FEDORA mas grande de latino américa.
Este año participe de vuelta con proyecto ICARO, dando una charla introductoria, unos talleres iniciales en colegios de la zona y un taller de programación avanzado para chicos de la universidad.


Durante la inscripción al evento


una foto con los participantes del evento (aunque hubo mas personas)

Con respecto al taller de programación, armamos un grupito bien chico pero muy capacitado para armar varias placas icaro y desarrollar un software en python y usarlo dentro del proyecto.
La idea del Hackaton era básicamente encarar un proyecto concreto de software, y hacer todos los pasos del desarrollo, montar un git, hacer commits, parches, crear un Spec para armar un RPM, ver como es para lograr que el .RPM este en FEDORA. Por cuestiones de tiempo, no llegamos a terminar el RPM pero seguimos con el desarrollo. Los chicos diseñaron dos programas para hacer un cliente y un servidor que fuera capas de conectarse a al hardware de icaro y controlarlo remotamente desde otra computadora (una PC seria el servidor, donde estaría conectada la placa icaro y recibiría ordenes desde la red a traves de socket) .
aca estan los links de los dos programas, todavia no estasn 100% funcionales, pero pronto se los podra usar!:



 Nuestro hackaton incluyo ensamblado de un par de 
placas ICARO (aca probando con un pic 18f2550)

 Los chicos programando


se armaron 2 grupos, uno para desarrollar el cliente y otro para armar el servidor

Kiara navarro (panama) explicando como usar FEL (FEDORA Electronics Labs)

Fue un gran evento y la verdad que la pase espectacular, me traigo muchos nuevos amigos y un monton de trabajo para hacer.... como dicen:

KAUSACHUN CUSCO!!!!

martes, 3 de septiembre de 2013

¡¡¡¡¡¡ Nueva placa ICARO !!!!!

Si, después de mucho esperar, me entregaron las nuevas placas NP06 para el proyecto ICARO.
 La idea fue poder mejorar parte del hardware que venimos usando con ICARO, en base al feedback que recibí de los distintos profesores con los que participamos. Básicamente el hardware sigue siendo el mismo, las placas np05 y np06 son exactamente iguales y retro compatibles, la diferencia es mas del tipo utilitario.


Placa NP06 completamente ensamblada


Comparativa entre los dos PCBS (a la izquierda NP05 y la derecha NP06).

Nuevas funcionalidades:

  • Se redujo su tamaño  (9cm x 9cm).
  • Se puede optar entre usar un pic 18f4550  uno mucho mas barato como el 18f2250.
  • Una sola entrada para la alimentación con batería (las placas np05 tenian 2, una para el pic y otra para los motores).
  • Acceso directo a Todos los puertos del pic (para facilitar el hacking).
  • monitor de 8 leds para el PORTB (ideal para aprender calculo binario y la teoría del byte).
  • Se agrego un UNL2803 para manejar potencia (hasta 12 volt) a la salida del PORTB.
  • pines de alimentación para los sensores analógicos (también se pueden usar como extensión para manejar mas servos motores).
  • un selector de voltaje para el puente H L293D, permite usar los 5 volt de la fuente (lm7805) o la tensión directa de la batería (mas potencia para el motor, pero mas calor que disipar para el driver).
  • El chasis del puerto usb ahora esta soldado a la plaqueta (dándole estabilidad mecánica).
  • La fuente (lm7805) que antes eran 2 y estaban paradas, ahora es solo una y va acostada contra el pcb (menos posibilidad de que se quiebre o doble cuando se la traslada).


 los dos lados del PCB

Probablemente una de las utilidades mas interesantes agregadas es la posibilidad de tener 8 leds como "monitor de estado del PORTB",  que permite hacer practicas de lógica Booleana .



Detalle del UNL2803

Programa para un contador de leds


Probando los leds

También se mejoro la alimentación del puente H  L293B, se puede elegir  usar la corriente directa de la bateria (mas potencia, pero también mas peligro de quemar el driver) o seguir usando el LM7805 

Moviendo un motor CC


La placa tiene un error de diseño que descubrí recién cuando me las entregaron, las masas de la fuente (lm7805) esta separada de la masa del pcb (GND), eso da como error que no se podia alimentar el pic con baterias. Sin embargo con un pequeño "hacking" se puede puentear las dos masas para que esten unidas (en la próxima versión resolveré ese inconveniente) 

 El "parche" para resolver el problema de las dos masas que no se conectan



jueves, 4 de julio de 2013

ICARO en el FISL de Porto Alegre Brasil

Fui invitado a participar del FISL en la ciudad de Porto Alegre (Brasil) en el espacio asignado al grupo de usuario de FEDORA.
FISL es uno de los eventos mas grandes de Latino América en torno al software libre, donde se reunen miles de personas para ver las novedades en torno al movimiento GNU.
Para la ocasión lleve el robot que juega al TA-TE-TI (jogo da velha en portugués) ¡y fue un exito!.

 Había tanta gente, que el primer día estuvimos 3 horas para poder hacer la acreditación.


 Realmente mucha gente.
 

 Un novedoso articulo, los anteojos para alucinar con sonidos y colores estridentes, como escuchar pan-sonic con un reflector estereocópico en los ojos.


 Si, ¡soldar es fácil!

 Con los chicos de FEDORA-BRASIL


 el robotito jugo todo el día al TA-TE-TI y nunca perdió, claro que si iba perdiendo se colgaba el sistema.


 Yo, posando como si supiera


Un partido ganado en 3 movimientos.


domingo, 16 de junio de 2013

robot scara con openCV

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


vista del brazo actuador


cámara web para visión artificial


detalle de la placa ICARO




video de reconocimiento de las fichas naranjas.



jugando (y ganando) al ta-te-ti


viernes, 31 de mayo de 2013

icaro en huayra linux

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:

http://www.telam.com.ar/notas/201305/19632-huayra-software-libre-conectar-igualdad-animacion-programacion-diseno-3d.phphttp://www.telam.com.ar/notas/201305/19632-huayra-software-libre-conectar-igualdad-animacion-programacion-diseno-3d.php

charlas sobre icaro

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)

Alumnos del taller de robotica que di en casa13