Verano Científico
jueves, 25 de agosto de 2011
jueves, 18 de agosto de 2011
Comunicación USB
Para controlar el robot mediante gestos, la primera meta fue controlarlo con el teclado de una computadora comunicandolo mediante el protocolo USB.
Este protocolo presenta una alta velocidad de transmisión de datos pero tiene como principal desventaja de que es una conexión alámbrica entonces esta comunicacion nos limita el rango de movimiento del robot. Pero como primera meta esta bien, posteriormente será mediante Bluetooth haciendo entonces un robot remoto.
Básicamente para establecer conexión vía USB se necesitan dos programas, uno que manda datos (en nuestro caso será ejecutado por la PC) y otro que recibe esos datos (ejecutado por el Robot).
Acá los códigos de ambos programas.
El programa de la PC manda el dato respectivo a la tecla pulsada + enter, el programa del robot compara que dato le llegó y actua en consecuencia. Cabe destacar que el programa de pc no es del todo eficiente pues necesita la tecla enter para poder enviar el dato, haciendo la interacción un poco más complicada. Lo ideal es que se enviara el dato inmediatamente cuando se pulse alguna tecla.
Este protocolo presenta una alta velocidad de transmisión de datos pero tiene como principal desventaja de que es una conexión alámbrica entonces esta comunicacion nos limita el rango de movimiento del robot. Pero como primera meta esta bien, posteriormente será mediante Bluetooth haciendo entonces un robot remoto.
Básicamente para establecer conexión vía USB se necesitan dos programas, uno que manda datos (en nuestro caso será ejecutado por la PC) y otro que recibe esos datos (ejecutado por el Robot).
Acá los códigos de ambos programas.
import lejos.nxt.*; import java.io.*; import lejos.nxt.comm.*; public class UsbBrick { public static void main(String[] args) throws Exception { LCD.drawString("Esperando", 4,2); USBConnection conn = USB.waitForConnection(); LCD.clear(); LCD.drawString("Conexion ",3,3); DataOutputStream odos = conn.openDataOutputStream(); DataInputStream odin = conn.openDataInputStream(); char d; while(true){ d = odin.readChar(); //odos.writeChar(d); //odos.flush(); LCD.drawChar(d,2,0); LCD.drawString("Recibi dato",5,1); if(d == 'w') Motor.B.forward(); Motor.C.forward(); //Motor.B.rotate(30); Motor.C.rotate(30);} if(d == 's'){Motor.B.backward();Motor.C.backward();} if(d == 'a'){Motor.C.forward();} if(d == 'd'){Motor.B.forward();} if (d == 'z'){Motor.B.stop();Motor.C.stop();} //Button.waitForPress(); //Thread.sleep(10); LCD.clear(); } } }y acá el programa que ejecuta la pc:
import lejos.pc.comm.*; import java.io.*; public class UsbPc { public static void main(String[] args) throws Exception { NXTConnector conn = new NXTConnector(); conn.connectTo("usb://"); //Para hacer la conexión vía usb DataInputStream dis = conn.getDataIn(); DataOutputStream dos = conn.getDataOut(); System.out.println("Control del LEGO via USB"); System.out.println("Los movimientos son: "); System.out.println("w + enter = Adelante"); System.out.println("s + enter = Atras"); System.out.println("a + enter = Giro izquierda"); System.out.println("d + enter = Giro derecha"); System.out.println("x + enter = salir"); while(true){ char d = (char)System.in.read(); //char z; dos.writeChar(d); dos.flush(); //z = dis.readChar(); //System.out.println("Mandado " +d +"Recibido " +z); System.out.println("Mandando " +d ); if (d=='x'){ dis.close(); dos.close(); break; } } } }
El programa de la PC manda el dato respectivo a la tecla pulsada + enter, el programa del robot compara que dato le llegó y actua en consecuencia. Cabe destacar que el programa de pc no es del todo eficiente pues necesita la tecla enter para poder enviar el dato, haciendo la interacción un poco más complicada. Lo ideal es que se enviara el dato inmediatamente cuando se pulse alguna tecla.
martes, 9 de agosto de 2011
lunes, 25 de julio de 2011
Control de un robot mediante detección de gestos manuales utilizando visión computacional.
Planteamiento del Problema.
Actualmente la intervención de operadores humanos sigue siendo necesaria para realizar tareas de control en robots. La capacitación de estos operadores exige una inversión de recursos los cuáles en muchos casos resulta costoso. Es por esto que se busca cada vez más que la interacción humano-máquina sea más natural, es decir, que no sean necesarios los componentes artificiales para poder comunicarse eficientemente con un robot y por lo tanto sea más fácil aprender a interactuar con robots.
Por estas razones se quiere diseñar un sistema de visión computacional para detectar gestos manuales, los cuáles serán utilizados para interactuar y controlar a un robot de esta forma evitando los controles, teclados, ratones, etcétera.Desarrollando así un sistema que permitirá evaluar si resulta más fácil y natural interacturar con un robot.
Metodología.
Se utilizan herramientas de visión computacional como OpenCV (http://opencv.willowgarage.com/wiki/ ) para detectar y analizar gestos realizados por el operador, estos gestos son adquiridos por una cámara procesados por una computadora y después mediante una comunicación vía bluetooth son enviados a un Robot. Para hacer más práctica la construcción del robot a controlar se utiliza el kit educacional LEGO MINSTORMS (http://mindstorms.lego.com/en-us/Default.aspx). La programación del robot se realiza en la distribución de java LeJOS (http://lejos.sourceforge.net/)pues esta plataforma es de las formas mas eficientes para programar estos robots.
Conclusiones.
La contribución esperada de este trabajo es desarrollar un prototipo de visión computacional que permita interactuar con un robot utilizando gestos manuales evitando la necesidad de utilizar aditamientos especiales por parte del operador como guantes electrónicos, teclados, controles etcétera.Para lograr una interacción eficiente. Además se pretende que este proyecto sea un estudio inicial para demostrar en el futuro que este tipo de sistemas facilitan la interacción de un robot con un humano haciendo esta más natural.
domingo, 24 de julio de 2011
Robots LEGO Mindstorms
Es un kit educacional dónde se enseñan los conceptos básicos de robótica el cuál consta de un “ladrillo” programable y un conjunto de piezas LEGO para poder representar piezas electromecánicas.
Con todo esto es posible diseñar y armar robots de “juguete” pero que asu vez son programables y funcionales.
Debido a que son programables por el usuario y a que hay una gran variedad de piezas es posible construir muchos modelos diferentes de robots el único límite es la imaginación.
Por su versatilidad es posible construir desde robots que unicamente se mueve en las direcciones derecha, izquierda , adelanta hacia atrás hasta robots manipuladores controlados inalámbricamente vía bluetooth.
Pero en ¿ En qué se programan ?
Esta es una parte muy importante pues ya que formará parte del “cerebro” del robot, aquí es donde se definirán las tareas que realizará el robot.
Se utilizá Robolab que es una plataforma de entorno gráfico en el cuál se arrastran cajitas que representan funciones. Un conjunto de esas funciones representarán un programa el cual será descargado al ladrillo para su posterior ejecucion. Por ser una plataforma muy gráfica es muy fácil aprenderlo y utilizarlo.
Por otro lado esta LeJOS(significado) que es una distribución de Java para la programacion de estos robots. No es una plataforma gráfica pues se trabaja con puro código fuente pero resulta de fácil utilización ya que trae clases preestablecidas de todo lo necesario para programar el robots. (motores, sensores,etc...).
Aunque es un poco más difícil que el Robolab , conocimientos avanzados de programación no son tan necesarios para poder empezar a utilizar LeJOS.
Fuentes:
Visión Computacional y Procesamiento de imágenes
Comenzaré a publicar todo acerca de los temas en los que estaré trabajando este verano científico, a continuación explico el concepto y aplicaciones de la visión computacional y el procesamiento de imágenes.
Para empezar ¿Qué es visión ?
Algunos autores la definen como la capacidad que tiene el ojo humano para percibir nuestro entorno para despues ser interpretada por el cerebro.
Cito algunas definiciones :
- Visión es saber que hay y dónde mediante la vista. (Aristóteles)
- Visión es un proceso que produce a partir de imágenes del mundo exterior una descripción que es util al observador y que no tiene información irrelevante. (Marr)
Entonces la visión computacional trata de emular esa capacidad mediante herramientas computacionales que prodían ser camaras que captan la información del exterior y su posición espacial para despues reconocerlos e interpretarlos.
Por otro lado un área muy ligada a la visión computacional es el procesamiento de imágenes , pues ambos campos tienen mucho en común pero el objetivo final es otro, pues el procesamiento de imágenes esta orientado a MEJORAR la calidad de las imágenes para su posterior interpetración por una persona y la visión computacional trata de obtener atributos y descripciones para tratar de interpretar la imagen automaticamente.
Entonces concluimos que visión computacional va orientado a tratar de interpretar la imagén que percibe por sí misma y el procesamiento de imágenes va destinado a mejorar la imagen para su posterior interpretación por una persona.
Aplicaciones:
*Visión Computacional
- Reconocimiento de objetos y formas en una imagen.
- Analizar objetos para determinar su calidad.
- Descomposición de objetos en sus partes.
*Procesamiento de imágenes
- Remover defectos de una imagen.
- Aumentar carácteristicas de una imagen (color ,contraste, estrutura).
- Agregar colores y convertir imágenes monocromáticas.
Referencias Bibliográficas.
Libro Procesamiento de Imágenes y Visión Computacional, Enrique Sucar y Giovani Gómez.
Verano Científico
Hola que tal buen día me llamo José Luis Palencia Gómez estudio Ing. Electrónica en el Instituto Tecnológico Superior de Cosamaloapan en el estado de Veracruz.
Este blog fue creado con el objetivo de subir avances de la Investigación en la cuál trabajo durante el verano en la Facultad de Ingeniería Mecánica y Eléctrica(FIME) de la Universidad Autónoma de Nuevo León (UANL) . Todo esto debido a que estoy realizando la estadía del Verano Científico en la UANL que tiene como meta acercar y motivar a alumnos de nivel licenciatura a estudiar un posgrado . Una de las actividades principales es la realización de una investigación bajo la supervisión de un investigador, en mi caso estaré supervisado por él M.C. David J. Ríos y asu vez también por la Dra. Elisa Schaeffer.
Aquí documentaré todo lo relacionado acerca de la Investigación .
Saludos y que tengan buen Día.
Suscribirse a:
Entradas (Atom)