Showing posts with label BeagleBone_Black. Show all posts
Showing posts with label BeagleBone_Black. Show all posts

Wednesday, September 09, 2015

Fuego! (BeagleBone Black, WebCam, Missile Launcher y OpenCV)

Este post fué posteado originalmente en Firing Up (BeagleBone Black, WebCam, Missile Launcher and OpenCV).



Si eres un empleado de SAP, por favor siguenos en Jam.


Mi buen amigo John Astill vino a visitarnos al d-shop hace algún tiempo…y vió el Thunder Missile Launcher que compré como un regalo de navidad Christmas para la cena de mi equipo. El me dijo…”Blag…deberías hacer una aplicación que hace que el lanza misiles dispare cuando pones un color u objeto en frente de la camara”…eso me dejó pensándo por supuesto -;)

Así que John…este post es para ti...

Así que, vamos a comenzar…

Vamos a necesitar tener el OpenCV instalado…así que la manera regular debería funcionar…

sudo apt-get install opencv

Y OpenCV debería estar instalado y listo para usarse…

Después…necesitaba hackear el Missile Launcher para poder hacer que dispare…así que aquí es donde la diversión comienza…conecté el Missile Launcher a mi Linux en VMWare he hice un comando lsusb -vv para obtener la información del dispositivo USB…


Aquí podemos ver que el IdVendor es 0x2123 y que el idProduct es 0x1010. Esto en realidad no ayuda en nada puesto que no sabemos cual es la información que debemos pasar para hacer que esto funcione…así que el siguiente paso es "olfatear" el dispositivo para poder obtener los comandos USB…para esto utilicé el SnoopyPro un USB Sniffer para Windows…y me di cuenta de que no podía hacerlo funcionar bien en Windows 7, así que tuve que utilizar mi querido y ya viejo Windows XP en VMWare…e instalar el Dream Cheeky software...


Una vez que tuve el SnoopyPro ejecutándose, tuve que conectar el Missile Launcher y presionar en File --> Unpack Drivers…


Luego, tuve que buscar el IdVendor y IdProduct correctos y presionar click derecho y seleccionar Install and Restart.


Esto nos permite registrar todo lo que pasa cuando utilizámos el dispositivo USB. Por defecto, por lo menos para el Missile Launcher…va a hacer un log de 14 líneas que realmente no nos interesan mucho…pero cuando presionamos por el ejemplo el botón Up…entonces obtenemos información más interesánte…


Esto nos dice basicamente que para hacer que el lanza misiles se mueva para arriba, debemos pasar lo siguiente…

0x02 0x02 0x00 0x00 0x00 0x00 0x00 0x00

Ahora…la parte que nos interesa es la de disparar…así que vamos a explorarla…


Esta es

0x02 0x10 0x00 0x00 0x00 0x00 0x00 0x00

Perfecto!…ahora nos estamos acercándo…pero…hay una parte que nos está faltándo…como enviamos este comando? Fácil…solo debemos ver el comándo de transferencia…


Este comándo nos dice que debemos pasar la información así…

0x21 0x09 0 0

Seguido de la acción que queremos realizar…

Para poder utilizar este dispositivo en nuestro BeagleBone…debemos instalar algo primero…

pip install pysub

Esta librería nos permite conectárnos y más importánte, enviar comándos al dispositivo.

Como vamos a utilizar el lanza misilies y la camara, ambas al mismo tiempo…necesitamos un Hub USB con corriente externa…de otra manera, nunca va a funcionar…yo compré este de Amazon.

Así que…conectamos el Hub USB y conectamos la camara Web y el lanza misiles, conectamos el Hub al BeagleBone Black y luego conectamos el BeagleBone a nuestra laptop…

Utilicen Nano u otro editor de su preferencia y creen el archivo Thunder.py

Thunder.py
import cv2
import numpy as np
import usb.core

cam = cv2.VideoCapture(-1)
cam.set(3, 960)
cam.set(4,720)
s, img = cam.read()

dev = usb.core.find(idVendor=0x2123,idProduct=0x1010)
try:
            dev.detach_kernel_driver(0)
except Exception, e:
            pass

winName = "Thunder"
cv2.namedWindow(winName, cv2.CV_WINDOW_AUTOSIZE)
while s:
        s, img = cam.read()
        key = cv2.waitKey(10)
        if key == 27:
                cv.destroyWindow(winName)
                break
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
              lower_green = np.array([38, 100, 50])
              upper_green = np.array([75, 255, 255])

        mask = cv2.inRange(hsv, lower_green, upper_green)
        res = cv2.bitwise_and(img,img, mask=mask)
        cv2.imshow(winName, res)

        if cv2.countNonZero(mask) > 61000:
                dev.ctrl_transfer(0x21, 0x09, 0, 0,
                                  [0x02, 0x010, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])


Este código va a basicamente abrir la conexión de la camara, y mostrar un fondo negro para que solo el color que queremos sea mostrado. En este caso, queremos disparar el lanza misilies solamente cuando veamos algo “verde”. Como pueden ver estamos pasándo el comándo de transferecia como un parámetro simple pero el comando de fuego como un arreglo.

Ahora…el BeagleBone no tiene una pantalla…así que puedes agregar un monitor y un teclado o puedes hacer algo más interesánte y astuto…

Vamos a instalar el Tight VNC Server

sudo apt-get install tightvncserver

La primera vez que lo ejecutas, te va preguntar por un password para el usuario actual, así que proporcionale uno…

Y va a comenzar a ejecutarse…así que vamos a poder abrir una conexión de escritorio remoto para nuestro BeagleBone…ahora solo necesitamos un cliente para poder conectarnos...

Si estás utilizándo Windows puedes descargar el cleinte TightVNC de aquí…

http://www.tightvnc.com/download/2.7.10/tightvnc-2.7.10-setup-64bit.msi

http://www.tightvnc.com/download/2.7.10/tightvnc-2.7.10-setup-32bit.msi

Si estás utilizándo Linux simplemente puedes descargarlo utilizándo apt-get install así…

sudo apt-get install xtightvncviewer

Ejecútalo en el terminal...

Solo debes proporcionar el IP de tu BeagleBone que debería de ser 192.168.7.2:1 en la pequeña pantalla que va a aparecer, provee el password que creaste para el VNCServer en la pantalla siguiente y estaremos listos…




Si estás utilizándo Windows…simplemente haz doble click en el tightvnc-jviewer.jar e introduce la siguiente información…




Para poder probar esto, solo necesitamos imprimir una bonita caja verde…


Luego, podemos ejecutar la aplicación…


Y poner la caja verde en frente de la camara -;)


Disculpen por la foto media movida…pero el lanza misiles estaba disparándo y tenía mi celular en una mano y la hoja con la caja verde en la otra -;)

Saludos,

Blag.
Development Culture.

Wednesday, December 03, 2014

Continuámos con el BeagleBone Black - Pequeño Piano Midi

Parece ser que estoy en una racha ultimamente -;) Tengo un plan de construir lo más rápido y frecuentemente posibles prototipos con el BeagleBone Black...la mejor manera de aprender por supuesto -:)

Está vez he hecho un pequeño Piano Midi...y disculpen mi completa inhabilidad con el Piano -:(


Para esto utilicé Python, AdaFruit_BBIO, PyGame Timidity++.

Saludos,

Blag.
Development Culture.

Tuesday, December 02, 2014

DYI Simón Dice - Utilizándo BeagleBone Black

Hoy día...estaba pensándo en que más podría construir con el BeagleBone Black...y lo que se me ocurrió fué...hacer un juego de Simón Dice! -:D


Para esto simplemente utilicé Python y AdaFruit_BBIO -:)

Por supuesto...necesito agregarle música y poner un nuevo color de LED -;)

Saludos,

Blag.
Development Culture.

Tuesday, November 11, 2014

Comenzándo con el BeagleBone Black

Siempre he sido una persona de software...siempre inmerso en programación y buenos proyectos...pero hace un par de días comencé a trabajar con mi primer juguete de electrónica...un BeagleBone Black...

Me compré el The Ultimate BeagleBone Black Development Kit de Amazon el cual es muy bueno para comenzar...el único problema es que viene con un breadboard PTBB-170B que es bastante pequeño y no viene con los rieles de tierra y positivo...así que no tengo idea de como usarlo...aún -:(



Lo bueno es que...trabajo en el d-shop en SAP Labs Palo Alto...así que tenemos bastantes breadboard de tamaño normal y extra grandes -;)

En fín...comenzé a construir mis primeros proyectos simples y utilizándo el Adafruit BBIO en Python para programar...lo cual es realmente bueno -:)





Por supuesto...tengo un largo camino por andar...pero tengo un par de ideas en mente que podrían convertirse en proyectos muy interesántes...veamos que pasa con mi primera aventura con la electronica -;)

Saludos,

Blag.
Development Culture.