lunes, 19 de abril de 2010

Demostracion Realizada En el evento de Ciencia y Tecnologia

Buenas nuevamente hablandoles del proyecto que hemos estado realizando, hemos terminado la primera version y realizamos una primera demostracion en el evento de ciencia y tecnologia.

domingo, 18 de abril de 2010

Aspectos Tecnicos (Comunicacion de Clasificador y Computadora XO-Parte 2)

Despues de haber discutido la implementacion del programa del rotot Clasificador veamos como se realizo la aplicacion para la computadora XO.

Todo comienza con la clase Main, la cual crea un ojbeto NXTComm al crear la comunicacion mandandole como parametro que sera atraves de la USB.

Se crea un arreglo de objetos Info buscando en la comunicaion y pasandole como parametro que sera de tipo USB.

Se crea dos objetos un DataOutputStream y un DataImputStream obteniendo para ambos el bojeto comunicacion y los respectivos Input y Output Stream.

Con estos objetos se crea la ventana y se hace visible.

Este main sera como el siguiente

public static void main(String[] args) {
DataOutputStream dos;
DataInputStream dim;
try {
NXTComm nxtComm = NXTCommFactory.createNXTComm(NXTCommFactory.USB);
NXTInfo[] infos = nxtComm.search(null, NXTCommFactory.USB);
nxtComm.open(infos[0]);
dos = new DataOutputStream(nxtComm.getOutputStream());
dim = new DataInputStream(nxtComm.getInputStream());
new MainWindow(dos, dim).setVisible(true);
}catch (NXTCommException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

}
La interfaz tendra dos botones btnProcessFood y btnProcessWaste ambos botones tienen el evento action performed que solo seleccionara btnProcessFoodAction cuando se selecciona btnProcessFood y btnProcessWasteAction cuadno se seleccion btnProcessFood.

Esta parte de codigo sera como la siguiente:

public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnProcessFood)
btnProccessFoodAction();
else if(e.getSource()==btnProcessWaste)
btnProcessWasteAction();
}

private void btnProccessFoodAction() {
dSystem.startBlinking();
}

private void btnProcessWasteAction() {
dSystem.createNDiscardTrash();
}

El metodo btnProcessFoddAction llama a al sistema digestivo indicandole que debe empezar el proceso en que la pelota es un nutriente de comida.

El metodo btnProcessFoodAction llama al sistema digestivo indicandole que debe empezar el proceso en que la pelota es un desecho.

Oor ultimo DygestSystem, tambien se encarga del la simulacion en pantalla en la interfaz grafica. Utilizando el metodo paint.

Los codigos se pueden descargar de esta pagina.

Aspectos Tecnicos (Comunicacion de Clasificador y Computadora XO-Parte 1)

En este post tratare de hablarles un poco sobre el programa implementado del Robot Lego Mindstorm (Clasificador).

Para empezar se crearon 2 Clases DLTest y Grabber. DLTest tendra el main que en resumen creara una instancia de una Clase Grabber. Esperara la señal del Robot Obrero utilizando el metodo g.readFromNXT() que escribira un entero en la clase LCD. Despues de esto esperara la interaccion del usuario leyendo del pc con el metodo g.readFromPC(); Y con este valor decidira si debe realizar un proceso para desecharlo o para procesarlo como comida.

Esto se muestra a continuacion

public static void main(String[] args) {

Grabber g = new Grabber(Motor.C, Motor.A, Motor.B, null, new TouchSensor(SensorPort.S2));
while (true) {
LCD.drawInt(g.readFromNXT(), 0, 4);
g.writePCMessage(1);
int n = g.readFromPC();
switch (n) {
case 2:
g.processWaste();
break;
case 3:
g.processFood();
break;
}

}
}

La clase Grabber Tiene un constructor que recibira los tres motores el sensor de luz y el sensor de movimiento. Este metodo es implmentado de la forma siguiente

public Grabber(Motor xAxis, Motor yAxis, Motor grabber, LightSensor colorSensore, TouchSensor touchsensor){
this.xAxis = xAxis;
this.yAxis = yAxis;
this.grabber = grabber;
xAxis.setSpeed(900);
yAxis.setSpeed(900);
grabber.setSpeed(900);

this.colorSensor = colorSensore;
this.touchSensor = touchsensor;
location = 0;
getMode();
startPCConnection();
startNXTConnection();
}

En este constructor podemos ver que existen los metodos startPcConnection(); y startNXTConnection();

public void startPCConnection(){
///Inicializando conexion PC
LCD.drawString("Conectandose PC", 0, 0);
USBConnection conn = USB.waitForConnection();
dPCIn = conn.openDataInputStream();
dPCOut = conn.openDataOutputStream();
LCD.clear();
}
public void startNXTConnection(){
if(test)
return;
LCD.drawString("Conectandose NXT", 0, 0);
BTConnection btc = Bluetooth.waitForConnection();
LCD.clear();
LCD.drawString("Conectado", 0, 0);
LCD.refresh();
dNXTIn = btc.openDataInputStream();
dNXTOut = btc.openDataOutputStream();
LCD.clear();
}

Como la comunicacion con la PC es atravez de USB para realizar la conexion se utiliza la instruccion

USBConnection conn = USB.waitForConnection();

Y la comunicacion con la NXT es atravez de Blotoot para realizar la conexion inicial se utiliza la instruccion

BTConnection btc = Bluetooth.waitForConnection();

Por ultimo los metodos processWaste y processFood son muy parecidos pues ambos se mueven abajo, graban se mueven a arriba.

Pero se diferencian en que el metodo processFood se mueve a la izquierda, elimina y se mueve a la derecha. Como lo siguiente:

public void processFood() {
moveDown();
grab();
moveUp();
moveLeft(false);
drop();
moveRight(true);
}

En cambio el metodo proccesWaste se mueve a la derecha, elimina y se mueve a la izquierda. Este codigo se muestra a continuacion:

public void processWaste() {
moveDown();
grab();
moveUp();
moveRight(false);
drop();
moveLeft(true);
}

sábado, 27 de marzo de 2010

Funcionamiento del proyecto sistema digestivo


En este post, quiero comentarles como se desarrollo la idea para simular el funcionamiento del sistema digestivo.

Para la idea se necesitaban dos Robots Lego Mindstorm y una computadora XO. Cada robot tenía una tarea, uno hacia las funciones del obrero y el otro robot las funciones del clasificador. La computadora XO tenía era por medio del cual interactuaba el usuario(los niños) para dar órdenes.

El funcionamiento comenzaba con el robot obrero, cuyo trabajo era que recuperaba la comida del esófago llevándola al estomago para que sea procesada, cuando la comida esta en esófago, este envía una señal por medio de bluetooth hacia el clasificador, quien sabe que debe recoger la comida del estomago. Es en esta fase que el clasificador espera ordenes del niño quien decidirá que será desperdicio y que nutriente, comunicándole la decisión al clasificador por medio de la computadora Xo para que este la ejecute.

Como inicio el proyecto

En este primer post, les contare cómo surgió la idea. Resulta que para el curso de Inteligencia Artificial se nos pidió realizar un proyecto que combinara la computadora XO y los Robots Lego Midnstorms Nxt con un tema esencial, enseñar el funcionamiento de un aparato del cuerpo humano. Una de las características es que debía ser de fácil aprendizaje para los niños.

Por lo que con nuestro grupo nos dimos a la tarea de pensar en un proyecto con las características ya mencionadas. Así comenzó la idea de simular con Robots y la computadora XO (para la interacción), cómo funciona el aparato digestivo.

Que pretende exactamente este proyecto

Ya les hable como surgió el proyecto, ahora quiero hablarles lo que se quiere obtener. Este proyecto pretende explicar cómo funciona el aparato digestivo de una manera que a los niños les resulte fácil, entretenida, vistosa.

También se quiere que los niños no sean solo alguien que visualiza si no que también pueda interactuar con el computador. Para esto debe haber una persona que es la que en cierta fase del proceso interactuara mediante la computadora XO, para dar instrucciones finales al Robot.