sábado, 28 de septiembre de 2013

Primer acercamiento con OpenCV para Java desde Ubuntu 12.04

Últimamente me ha estado apasionando el tema de Linux y las herramientas libres. La distribución que ha captado mi atención ha sido Ubuntu 12.04, donde he visto gran fluides y capacidad para trabajar en diferentetes lenguajes de programación.

En esta ocasión traigo una herramienta muy útil e interesante para aplicarse en el área de la robótica: OpenCV. Por un sentido de optimización y por no pelear con la lentitud de windows con su monton de drivers, enfoco el trabajo en la distribución de linux que uso actualmente y que ya hice mención de ella.

 En una descripción muy rápida, comento que OpenCV es una libreria desarrollada inicialmente por intel, y posteriormente soportada por una comunidad muy grande actualmente. Esta libreria se ha optimizado por medio de códigos escritos en C y C++. Pero el interés en si, y para mi caso, es el de implementarlo en un lenguaje de alo nivel como lo es Java.

Es por ello que en mi intento frustrante de aprender a manejar esta libreria desde Java, quiero compartir un primer video, donde pretendo enfocarlo a la creación de un robot que tenga la capacidad de poder ver y analizar su entorno a través de una webcam. Acá entonces comparto el primer video, para dar una introducción al proyecto:

miércoles, 3 de julio de 2013

Robot Diferencial: Realimentación en la dirección de movimiento.

La importancia de un robot diferencial radica en la simpleza de sus dos ruedas, donde el estudio de las formas de movimiento que este puede presentar permiten introducirnos al mundo de la robotica móvil. Es por ello que en esta entrada, se comparte una serie de conceptos importantes que permiten acercarnos a la dinámica de un robot diferencial y a un sistema realimentado que permitirá, sin duda alguna, controlar la dirección a la cual se desea desplazar un robot diferencial. Cabe resaltar que los conceptos que acá se presentan son, en su gran mayoría, extraídos de las notas del curso gratuito "Control of Mobile Robots" disponible en la página https://www.coursera.org/

Example of Differential Drive

sábado, 29 de junio de 2013

Motores Brushless: Primera Prueba con Arduino.

En ingles se conocen como BLDC (Brush-Less Direct Current). Es muy común encontrar estos motores en aplicaciones de robotica aérea o aeromodelismo. La razón de su uso, es a las altas revoluciones que se pueden conseguir, pues son motores que no poseen escobillas que entran en contacto con el rotor, a diferencia de la mayoria de motores DC. Estos motores funcionan con señales trifásicas, que permiten activar por pares los polos magnéticos dentro del motor. Es por esta razón que al poseer una sola señal PWM proveniente de un microcontrolador, se requiere reproducir tres señales desfasadas 120 grados. La solucion de este problema se realiza con un discpositivo electrico denominado variador ESC (Electronic Speed Controller), el cual permite generar las señales adecuadas para poder generar el movimiento del motor.


sábado, 2 de marzo de 2013

Comunicación: Recepción de datos particionados

En una entrada anterior, se hizo enfásis en la manera en la que se podía particionar datos en un módulo arduino, y enviarlo a través de un módulo XBee. En esta ocasión, se observará como, a partir de un algoritmo diseñado en java, puede emplearse para capturar esta información y volverla a unir. Para ello, necesitamos emplear la libreria disponible para el lenguaje Java, que nos permite comunicarnos a través de un módulo XBee en modo API. Acá no entraré en detalles como importar una libreria, por lo que recomiendo consultarlo de alguna fuente externa.

viernes, 1 de marzo de 2013

Datos y Variables: Bits

La gran mayoria de los lenguajes de programación permiten realizar operaciones sobre variables a nivel de Bits. Es importante saber que todos los dispositivos digitales trabajan con un lenguaje de ceros y unos. Un valor que se almacena en una variable ocupa una determinada cantidad de bits. Un bit puede tomar como valores 0 ó 1. Una cantidad que sea entera positiva, puede ser escrita a nivel de numeros bits. Como ejemplo, se tomará el número 123:

Decimal: 123

Bits: 0b1111011

Comunicación: Envio de datos por medio del protocolo Zig-Bee

En los desarrollos de robótica que se llevan a cabo dentro del grupo RSR de la Universidad Nacional, surge la necesidad de enviar información entre un equipo integrado con una tarjeta de desarrollo Arduino, y un computador con una interfáz realizada en Java. Esta comunicacion se realiza por medio de los módulos XBee los cuales trabajan con el protocolo Zig-Bee.

En el estudio de la información de estos módulos, observamos que la manera de enviar datos por medio de este protocolo, es a través de paquetes de bytes. Pero el inconveniente que se ha presentado es que para enviar estos datos, es necesario tomar el valor que esta almacenado en una determinada cantidad de bytes y enviarla partionada en valores de un byte.