viernes, 3 de octubre de 2014

Robot?


 Muchas veces nos tropezamos con esta palabra en nuestro lenguaje cotidiano, y aunque no lo parezca, la definición surge de cualquier cosa que haga movimineto u operaciones automáticas. En esta entrada, hablaré un poco de esta definición con el fin de compartir opiniones y resultados de búsquedas que he realizado a lo largo de mi corto trayecto con la construcción de equipos móviles. No pretendo realizar una descripción detallada como la ofrece Wikipedia o Monografías, solo desarrollaré una serie de ideas para describir a los equipos que se identifican con el nombre de robots.

miércoles, 1 de octubre de 2014

My Robot HAN-Bot

It has been a long time since I write a new post. But today I want to talk you about a personal project related with robotics and computer system... That project its named HAN-Bot.

Why HAN-Bot? the name HAN, represents the initials of the names Horus, and ANgela. The first name corresponds to an Egyptian symbol, the "Eye of Horus " that represents the posibilities of my robot to see the real word with the help of a web-cam. And the second name, ANgela, it's a personal reason for dedicate to an important women in my life... and Well "Bot" indicates that its is a robot.

domingo, 3 de agosto de 2014

First Project with OpenCV: inRange Code for detect objects.

Well the following code let us, to remove all of elements of the pictures that are not of our interest using OpenCV and Java. For realize it, its necesary to use the inRange method (more information here). The first step is to convert the image in HSV format and them apply the inRange code.

 import org.opencv.core.Core;  
 import org.opencv.core.Mat;  
 import org.opencv.core.Scalar;  
 import org.opencv.highgui.Highgui;  
 import org.opencv.highgui.VideoCapture;  
 import org.opencv.imgproc.Imgproc;  
 import values.MyIntegers;  
 /**  
  * @author aldajo  
  */  
 public class InRange {  
   public static void main(String[] args) {  
     System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  
     VideoCapture camera = new VideoCapture(1);  
     Mat framevideo = new Mat();  
     camera.open(1);  
     camera.read(framevideo);  
     Highgui.imwrite("image.png", framevideo);  
     Highgui.imwrite("imageInRange.png", preproc(framevideo));  
   }  
   public static Mat preproc(Mat frame) {  
     Mat preprosMat = new Mat();  
     Imgproc.cvtColor(frame, preprosMat, Imgproc.COLOR_RGB2HSV);  
     Core.inRange(frame, new Scalar(242, 228,103),  
         new Scalar(255, 255, 255), preprosMat);  
     return preprosMat;  
   }  
 }  

I used the above code and I got the following pictures:


Of course, you need change the values of the range for achieve it...

I have configured NetBeans for use the OpenCV library...

First Project with OpenCV: single code for web-cam capture.

Well, today I want to share you a simple code that let us to show a single frame from web-cam. The simple code uses OpenCV, and Java code... I have configured NetBeans for uses the OpenCV library.

 import org.opencv.core.Core;  
 import org.opencv.core.Mat;  
 import org.opencv.highgui.Highgui;  
 import org.opencv.highgui.VideoCapture;  
 /**  
  * @author aldajo  
  */  
 public class SingleCameraCapture {  
   public static void main(String[] args) {  
     System.loadLibrary(Core.NATIVE_LIBRARY_NAME);  
     VideoCapture camera = new VideoCapture(1);  
     Mat framevideo = new Mat();  
     camera.open(1);  
     camera.read(framevideo);  
     Highgui.imwrite("image.png", framevideo);  
   }  
 }  

The value in VideoCapture construct and camera.open method correspond to the number of the camera device in your computer. If you have only a web-cam, the value is 0.

I used the above code , and I have the following capture (my camera is a logitech c920):


viernes, 16 de mayo de 2014

First Project with OpenCV: Objetives.

Well, let's start with my project with openCV. The idea is to recognize differents robots with the help of a webcam. Suppose that we have differents robots, in a place. The objective is to get the position of the robot in pixels, and create a system that let us to locate the robot. For that, we use openCV library with Java language. For this project, is required the followings items:

- A computer, that run the program with OpenCV.
- A webcam (for the moment, any camera is useful)
- Differents sheets.

The idea with the sheets, is to create a pattern that identifies the robot, and have a specific characteristic, easy to identify for the program through the program with OpenCV. For this first project, is necessary only calculate the X and Y position. No is necessary consider, initially, the rotation of the robots (this is very useful, but the idea is to realize a simple Artificial Vision Algorithm).


If you have any suggestion, or you iddentify an error in my write, I hope your comments.

martes, 13 de mayo de 2014

Content on English for integrate users of other countries.

Well, for a short time, I publish my writes on this space on English because, I want to share a project with people from other countries, and to stimulate the English on many peoples... I thank your understanding.... And I hope your comments, a plus or like... 

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.