jueves, 7 de marzo de 2013

[VISIÓN COMPUTACIONAL] Lab 5: Círculos con radios desconocidos

Para la tarea de laboratorio de esta semana se encargó detectar círculos con radios desconocidos. La tarea de clase fue detectar círculos con radios fijos. Por razones secundarias no entregué esa tarea, pero la idea era simple y traté de hacerla, hoy muestro el resultado final.

Para detectar un circulo, primero tengo que detectar un objeto, para así poder clasificarlo. Mi idea de detectar círculos se basa en el hecho de que podemos conocer el radio de cualquier circulo tan solo con saber el área del mismo.

Utilicé los centros de masa de cada objeto detectado para crear un circulo fantasma con un radio obtenido de cada área, en este caso la cantidad de pixeles que hay dentro del borde de cada objeto.

Utilicé la siguiente imagen para hacer pruebas:
Invertí el color de la imagen ya que la detección de bordes se basa en el color blanco.

Ahora lo que sigue es detectar los bordes y el área que existe dentro de ellos, para eso, use mi detección de objetos, el resultado es el siguiente:
Los bordes tienen un centro de masa muy similar a la figura, por lo tanto el borde del círculo contiene el centro de masa, con el cual saqué el radio con la siguiente formula:
Por lo tanto la raíz cuadrada de área entre π es el radio.

Conociendo los radios obtenidos con el área, dibujo un circulo fantasma en el centro de cada objeto detectado:
Estos círculos tienen un área aproximada a la de cada objeto.

Ahora lo que hago es calcular el porcentaje de error de cada circulo fantasma, es decir, si están ocupando la misma área que el objeto. El margen de error lo tengo en 6%, cualquier margen de error mayor no es un circulo, al menos desde mi punto de vista, pero puede variar con las imagenes, recordemos que en la pantalla los círculos no son círculos en si, sino que son polígonos con demasiadas caras que parece que tiene un solo lado curvo.

Finalmente coloqué un tag "Circulo" a cualquier cosa que me detectara como círculo.

Al correr el programa este fue el resultado final:
Código utilizado:

Liga del proyecto:
https://github.com/victoralex911/vision-computacional

martes, 5 de marzo de 2013

[REDES DE TELECOMUNICACIONES] Lab 5: Network Simulator

Para esta entrada realizaré una simulación en el NS-2, que es un simulador de redes que sirve para verificar, modificar o crear nuevos protocolos de red. NS-2 viene con un programa para crear una animación de la misma llamado NAM.

Encontré varios ejemplos y de ellos creé una simulación TCP con 5 nodos, 2 de los cuales son nodos TCP, 1 para administrar la cola de paquetes y 2 nodos destino.

El código es el siguiente:

El resultado fue una simulación como la siguiente:
Se puede observar que muchos de los paquetes se pierden al "caer".

Para un análisis mejor, observé los archivos de salida. El archivo con extinción .nam contiene la verdadera simulación realizada y son archivos con contenido parecido al siguiente:

r -t 0.01032 -s 0 -d 1 -p tcp -e 40 -c 0 -i 0 -a 0 -x {0.0 3.0 0 ------- null}
  • El primer elemento significa el estado del paquete:
    • "r" significa que el paquete fue recibido.
    • "h" significa que el paquete fue saltado.
    • "+" significa que esta dentro de la cola.
    • "-" significa que salió de la cola.
  • El segundo elemento "-t" es el tiempo en que se recibió el paquete.
  • El tercer elemento "-s" es el ID del nodo (de 0 a 4).
  • El cuarto elemento "-d" es el ID del nodo destino.
  • El quinto elemento "-p" es el protocolo.
  • El sexto elemento "-e" es la extinción.
  • El séptimo elemento "-i" es el numero de paquete.
  • El octavo elemento "-a" es el atributo.
  • El noveno elemento "-x" es el comentario realizado (información de paquete).
Con cada uno de los elementos analicé el desempeño mediante un pequeño script en python para obtener el total de paquetes enviados, cuales fueron recibidos, cuales se perdieron, el total de saltos dados y el retraso aproximado entre paquetes:

Los resultados son los siguientes:

Fuentes:
http://getch.wordpress.com/2010/11/20/manual-interpretation-of-ns2-trace-file/
http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats#NAM_Trace_Formats
http://www.cs.bu.edu/groups/itm/SATS/simulation.html
http://ceit.aut.ac.ir/~bakhshis/ns-2/NS-2.pdf

lunes, 4 de marzo de 2013

[CÓMPUTO UBICUO] Lab 5: Catálogo y Proveedores

Para este laboratorio se hará una lista de los proveedores de artículos que probablemente necesitemos además de tales artículos.

HARDWARE

El proyecto consiste en un garage automático que se abre vía smartphone o web service. Necesitaremos el siguiente hardware:

  • Smartphone para controlar el garage.
  • Adaptadores Bluetooth para comunicar el garage.
  • Computadora conectada al garage que lee el web service.
  • Servomotores (para simular el garage en una maqueta).
  • Arduino para interconectar todo.
Smartphone

La mayoría de nosotros cuenta con un smartphone con las características necesarias para el prototipo; Android 2.2 o mayor, WiFi, Bluetooth, etc.

Personalmente cuento con un celular chino con estas características, se trata del Star X12 (clon barato del Xperia X12) que me regaló mi papá.
Aunque no es muy rápido, me sacó de apuros en "Ingeniería de dispositivos móviles" además de que me ayuda en mi trabajo en algunas ocaciones. Desde luego esta solo es una de las varias terminales de prueba.

Bluetooth

Este es para conectarlo a un arduino que será el núcleo del garage. Servirá para comunicarse con el smartphone que correrá alguna aplicación para abrir el garage. La comunicación debe ser preferentemente de forma autónoma, es decir, el usuario lo único que tiene que hacer es acercarse con su móvil al garage dentro de su auto.

Para esto he visto algunas piezas por internet que pueden ser de interés:
  • Bluetooth serial converter UART interface 9600 bps.
  • Bluetooth Shield.
UART

Esta pieza permitiría comunicación bluetooth entre arduino y smartphone.
Tiene un precio de 28 dolares (envío no incluido) pero se puede encontrar hasta en 14 dolares si se busca bien.

La tienda EIO (Electronic Inventory Online) lo tiene, la cual se especializa en productos de electrónica. Cuentan con servicio al cliente y existe la capacidad de verificar el estado del pedido.

El enlace es el siguiente:

Bluetooth Shield

Se trata de un shield para arduino que cuenta con comunicación serial para establecer comunicación. Su precio en Seeedstudio es de 23 dolares. Lo curioso es que este shield contiene el UART, hace mucho más sencilla su programación.
Es compatible con Android e iOS, inclusive con otros dispositivos.

Seedstudio es una tienda de electrónica online especializada en microcontroladores, sobre todo porque tienen su propio clon de arduino con algunas mejoras (Seeeduino). Además venden todo tipo de electrónica, así como robótica entre otras cosas.

El enlace es el siguiente:

Computadora

Para este prototipo conectaremos el arduino directamente a una computadora para leer el web service. Podemos usar cualquier computadora, pero por motivos de comodidad es mejor usar una pequeña.

Se habló ligeramente de la posibilidad de conseguir una Raspberry Pi, una computadora con procesador ARM con poder suficiente para realizar esta tarea.
Los precios son variados dependiendo de la tienda, los envíos tardan hasta 6 semanas. Sin embargo se pueden conseguir vía mercadolibre a precios regulares.

Servomotores

Se planea hacer una versión miniatura de el garage, para ello necesitaremos motores para darle movimiento. Estos motores irán conectados al arduino quien los controlará.

Para esto busqué un poco más cerca, en 5hz-electrónica. Tienen el SM-S3317S, un pequeño servo de 360º de giro. Podría servir para levantar la puerta mediante una cadena.
Su precio es de 220 pesos en 5hz-electrónica.


Arduino

El centro de todo estará en el arduino, ya que es el que controlará el garage, recibirá la señal de abrir, etc. Y tampoco me fui lejos, 5hz también tiene arduinos y de varias versiones. Yo tengo mi propio arduino que compré en sexto semestre y aun no se quema. Pero como está expuesto a "accidentes" debemos contar con respaldo.
Este es el arduino UNO R3, el que compré y el que sigue funcionando. Se adquiere por un precio de 370 pesos y es muy práctico.


SOFTWARE

Para el software se utilizarán las herramientas habituales:
  • Python, para escribir (tentativamente) los web services y parte de la comunicación entre arduino y la computadora.
  • Java, para escribir la aplicación Android.
  • Software de arduino.
  • PHP, HTML, SQL posiblemente para complementar el web service.
Para escribir las aplicaciones en android se requiere de un kit; el Android SDK, que contiene las librerias de android necesarias. Tambien viene incluido la IDE Eclipse que se está haciendo un estandar para programar en Java.

La ventaja de utilizar Java y Android es que se puede programar un mismo proyecto en distintas plataformas.

El enlace es:

Adicionalmente se utilizará el software para programar el arduino, tambien es multiplataforma y es de facil uso. Su lenguaje tiene una sintaxis similar a C. Incorpora muchos ejemplos y es compatible con muchas placas no solo arduino, sino tambien las mismas hechas por los usuarios.

Su enlace es:

Fuentes: