lunes, 14 de febrero de 2011

Presentación del proyecto

Esta es la presentación de mi proyecto, donde muestro una breve descripción sobre lo que trato de hacer.


jueves, 10 de febrero de 2011

Herencia y polimorfismo: modularidad reutilización de código

semana 3
Laboratorio de programación orientada a objetos.

// clase padre de las demas clases
public abstract class Activo {

  //variables 
  boolean prendido;
  int tiempo;

  public void prender(){
    prendido = TRUE
  }

  public void apagar(){
    prendido = FALSE
  }

  public void modificarTiempo(int tiempo){
    this.tiempo=tiempo
  }

}




// recibe entrada desde teclado y llama a clase control 
public class Controles extends Activo implements ActionListener {

    super(TRUE,n); // n número de milisegundos que toma un objeto en ejecutar un proceso   
   
   public void actionPerformed(){
    // código para detectar las teclas que pulsa el usuario
      ejecutar(algo-pasa);
   }
  
   public void ejecutar(algo-pasa){
     if(algo-pasa == x-cosa){
       Control.interpretaDatos(algo-pasa);
    }
  }

  }
}
 

El código anterior muestra como aplico la herencia en mis clases.

Herencia y polimorfismo: modularidad reutilización de código

Semana 3
clase de programación orientada a objetos.


En esta semana se vieron los conceptos de herencia y polimorfismo, en mi proyecto tengo clases que heredan metodos y/o atributos, hago una breve descripción de ellas.



















Breve explicación. Tengo una clase llamada activo la cual se encarga de activar o desactivar cada objeto y de cuanto tiempo van a estar tomando para ejecutar su proceso ( multihilos). De esa clase heredan todas las demas clases que tengo en mi programa.


Además la clase comunicador hereda de una clase de la api de java para comunicación via bluetooth y la clase reporte hereda de la clase JPanel.




miércoles, 2 de febrero de 2011

Instalando leJOS NXT en Ubuntu

Sucede que existen unos dispositivos llamados Lego Mindstorms, los cuales pueden ser programados en Java usando una librería llamada leJOS NXT.

En este tutorial vamos a aprender a instalarla en Ubuntu.

Pasos para instalar leJOS NXJ.

1) Primero ocupamos instalar las siguientes librerias: libusb,libusb-dev,   libbluetooth-dev, ant y gcj.
sudo apt-get install libusb libusb-dev libbluetooth-dev ant gcj

En caso de que libusb no se instale directamente desde la terminal, descargamos el archivo de la siguiente pagina.
http://sourceforge.net/projects/libusb/files/libusb-1.0/

Luego extraemos el archivo.
cd /Downloads
tar -xvf libusb-1.0.8.tar.bz2

Vamos a la carpeta que contiene la librería.
cd  libusb-1.0.8/

Instalamos la librería con los siguientes comandos.
./configure
make
sudo make install

2) Luego descargo la versión de leJos desde la siguiente dirección: http://sourceforge.net/projects/lejos/files/lejos-NXJ/0.8.5beta/lejos_NXJ_0_8_5beta.tar.gz/download

Extraemos el contenido del archivo.
tar -xvf lejos_NXJ_0_8_5beta.tar.gz

Cambiamos el nombre a la carpeta.
mv  lejos_NXJ_0_8_5  lejos

Movemos la carpeta a otra dirección, en mi caso es la siguiente.
mv lejos /opt/

3) Necesitamos añadir las variables de entorno de las nuevas librerias.
Nos dirigimos a la carpeta /etc/profile.d/
cd /etc/profile.d/

Creamos un script llamado nxt.sh, que tenga lo siguiente:

export NXJ_HOME="/opt/lejos"
export PATH=$PATH:$NXJ_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NXJ_HOME/bin


Hay que asegurarnos de darle  permisos de ejecucion al script
sudo chmod u+x nxt.sh

4) Compilamos la librería.
cd /opt/lejos/build
ant

Inicialmente no tenemos permiso de escribir sobre el dispositivo usb o bluetooth, por lo que no podemos programar el lego. Esto es por motivos de seguridad. Para cargar el programa en el lego hacemos lo siguiente.

5) Creamos un grupo de usuarios llamado "lego", los cuales pueden cargar programas al dispositivo.
sudo addgroup lego

Nos agregamos  al grupo "lego":
sudo usermod -a lego tuusuario
 
Creamos el siguiente archivo.
sudo gedit /etc/udev/rules.d/70-lego.rules

Escribimos lo siguiente:
# Lego NXT
BUS=="usb", SYSFS{idVendor}=="03eb", GROUP="lego", MODE="0660"
BUS=="usb", SYSFS{idVendor}=="0694", GROUP="lego", MODE="0660"

6) Guardamos el archivo y ya estamos listos para programar nuestro lego.

Para confirmar que todo funciona bien tecleamos en la terminal:
nxjc


Si en la terminal aparece el mismo contenido que se ve en la imagen, entonces todo salio bien.

Referencias:
http://robobyte.blogspot.com/2010/02/instalar-lejos-en-ubuntu-910.html

Semana 1 (laboratorio): Herramientas para el desarrollo del proyecto

Lenguajes de programación.

Java y/o Python. El hecho de que exista una aplicación de Java para programar los legos Mindstorms (leJos) y que existan muchos proyectos desarrollados con esa aplicación me hizo optar por usar Java como lenguaje principal de mi proyecto (en lo personal me gusta mas Python), pero podria mezclar un poco de Java y Python para el proyecto.

Python ya viene por defecto en Ubuntu Linux, para comprobarlo abrimos una terminal y tecleamos python. Nos aparecera la versión que tenemos instalada, significa que podemos hacer código en Python sin mayor problema.


Para poder ejecutar codigo en Java ocupamos Java Development Kid (JDK), para instalarlo tecleamos en la terminal:
sudo apt-get install sun-java6-jdk.

Editores.

Principalmente emacs.
sudo apt-get install emacs.

Librerias principales.

leJOS NXJ. Necesito esta librería para programa el robot (lego).

Para instalar leJOS NXJ en ubuntu ver el siguiente tutorial.
http://yoyo-yoyo01.blogspot.com/2011/02/instalando-lejos-nxt-en-ubuntu.html

Libros y tutoriales.

tutorial para programar en leJOS NXT:

http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm

libros de programación para Java y Python:
http://www.openbookproject.net/thinkcs/

Estas son las principales herramientas  que voy a usar para hacer mi proyecto.

Semana 2 (clase): Clases necesarias del software

De las principales clases que creo son necesarias, hasta ahora tengo estas:

Clase comunicador. Esta clase se encarga de comunicar entre los  dispositvos bluetooth de la computadora y el lego mindstorm.

Clase controlador. Se encarga de mandar las señales de control al dispositivo, las cuales pueden venir de parte del usuario.

Clase controles. Se encarga de recolectar los datos de entrada del usuario (puede ser por medio del teclado, un joystic o algun otro dispositivo) e interpretarlos para luego conectar con la clase control y pasarle los datos de entrada.

Clase sensores. Se encarga de guardar la información recibida por algunos sensores, para luego guardarla en una base de datos (lo relacionado a la posición del robot y la dirección por mencionar algunos atributos no va incluido aqui).

Clase movil. Guarda algunos datos del robot, como pueden ser: estado de la bateria, distancia recorrida, posición, velocidad, dirección, por mencionar algunas.

Clase reporte. Muestra una gráfica de los datos que recibe la computadora, ademas de realizar algunos análisis a los datos y mostrarlos al usuario.

Ademas de los gráficos, esto por ahora lo que tengo en mente y a partir de lo cual voy a empezar a desarrollar. Conforme avance el proyecto hare algunos cambios, pero hasta entonces esto es lo principal.

Semana 1: Definición de tema de proyecto

El  proyecto que quiero realizar en este semestre trata acerca de controlar un lego nxt desde una computadora, usando para ello comunicación via bluetooth.

La computadora mandara instrucciones instrucciones de control al lego, y este a su vez comunica a la computadora y manda  datos recolectados por los sensores que tiene agregados.

Ademas de lo ya mencionado, quiero añadir una función que grafique los datos que el lego manda a la computadora. De tal manera que estos datos puedan ser analizados aplicando tecnicas de control y procesamiento de señales.


La intención de realizar este proyecto es que posteriormente se añadan mas funcionalidades a este  software y pueda ser un sistema de control y procesamiento de datos de sistemas integrados, via remota. Puesto que actualmente el desarrollo de vehiculos no tripulados y sistemas inteligentes esta teniendo mucho desarrollo.