¿Probarlo?Sí, pero ¿Cómo?
Cuestiones Previas
Compilar una aplicación para un NXT
Compilar una aplicación para un NXT
Como ya dijimos en la entrada anterior, nos servimos de Eclipse para desarrollar nuestras pequeñas aplicaciones.
En mi caso(particular, no hablo por mi compañero) uso Eclipse para poder explorar con mayor facilidad las clases y así crear el archivo .java , pero para el proceso de compilación,"linkado" y subida al robot, hago uso de terminal.
Pongamos que tenemos un fichero de programa "HolaMundo.java".
Seguimos los siguientes pasos para compilarlo, "linkarlo" y descargarlo en la consola del robot.
1. Compilación
nxjc HelloWorld.java
2. "Linkado"
nxjlink HelloWorld -o HelloWorld.nxj
3. Descarga en la consola del robot
nxjupload HelloWorld.nxj
2. "Linkado"
3. Descarga en la consola del robot
Después de seguir estos pasos, el robot emitirá un sonido confirmando éxito en la descarga en su consola.
Paso 1: MONTAJE (Para los redichos: "Ensamblado" )
En primer lugar nos faltaba el Hardware que soportase las perrerías que haríamos llamando a métodos aún sin testar por nuestra psique. De manera que el primer paso fue montar HansF10 de forma básica.
Para ello seguimos el manual de montaje suministrado en la caja. Tras varios pasos y varias injurias a empresas como Ikea conseguimos el siguiente resultado:
Paso 2: Probando la rotación y movimiento de la criatura
Fue entonces cuando nos dimos cuenta de que estábamos frente a la máquina perfecta.
Para probar su potencial hicimos un pequeño programa, absurdo sí, en apariencia, pero que nos sirvió para comprobar como funcionaban los servo-motores y ensayar un poco sobre el LCD.
El código es el siguiente:
import lejos.nxt.*;
public class HolaMundo {
public static void main(String[] args)throws Exception {
LCD.drawString("Hola Mundo!",3,1);
LCD.drawString("HANSF10",3,3);
Thread.sleep(3500);
Motor.B.setSpeed(500);
Motor.C.setSpeed(500);
Motor.B.forward();
Thread.sleep(6000);
Motor.C.stop();
Motor.C.forward();
Thread.sleep(6000);
Motor.B.stop();
LCD.clear();
LCD.drawString("YA ESTÁ",3,3);
Thread.sleep(2000);
}
}
El funcionamiento en resumen era que el robot girase sobre si mismo 6 segundos en sentido antihorario, avanzase seguidamente hacia delante durante otros 6 segundos, y por último girase otros 6 segundos más en sentido horario, para acabar mostrando por pantalla "YA ESTA".
Paso 3: ...y si ahora le añadimos ULTRASONIDOS...
Ocurrió que, atreviéndonos a dar un paso adelante, decidimos montar los ultrasonidos para programar un poco más sobre leJOS y desentrañar el funcionamiento sobre los UltraSonidos...
HansF10 evolucionó hasta adquirir el siguiente aspecto:
Esta vez hicimos una pequeña aplicación de prueba que consistía en poner a rodar el robot hacia delante, regulando su velocidad en función a la proximidad con el objeto más cercano detectado por el ultrasonido.
El código es el siguiente:
import lejos.nxt.*;
public class PruebaUltraSonidos {
public static void main(String[] args)throws Exception {
final int MAX_VELOCIDAD=600;
final int MAX_ALCANCE_ULTRASOUND=225;
final int DISTANCIA_PARADA=25;
Boolean salir = false;
UltrasonicSensor US = new UltrasonicSensor(SensorPort.S1);
LCD.drawString("UltraSonidos Test",1,1);
LCD.drawString("para HANSF10",1,2);
Thread.sleep(3500);
Motor.B.setSpeed(MAX_VELOCIDAD);
Motor.C.setSpeed(MAX_VELOCIDAD);
Motor.B.forward();
Motor.C.forward();
US.continuous();
Thread.sleep(2000);
while(salir!=true){
int distanciaAlObjetoMasProximo=US.getDistance();
LCD.clear();
LCD.drawInt(distanciaAlObjetoMasProximo,3,1);
if (distanciaAlObjetoMasProximo<DISTANCIA_PARADA){
salir=true;
}
Motor.B.setSpeed( (distanciaAlObjetoMasProximo*MAX_VELOCIDAD)/MAX_ALCANCE_ULTRASOUND);
Motor.C.setSpeed( (distanciaAlObjetoMasProximo*MAX_VELOCIDAD)/MAX_ALCANCE_ULTRASOUND);
}
Motor.B.stop();
Motor.C.stop();
US.off();
LCD.clear();
LCD.drawString("YA ESTÁ",3,3);
Thread.sleep(2000);
}
}
El resultado en cuestión es el siguiente (obviemos el suelo de parquet y la zapatilla tirada):
PROBLEMAS OBSERVADOS:
Fue difícil determinar la distancia a la que debía pararse el robot antes de chocar contra un obstáculo. Mediante la ancestral técnica del "prueba y error" determinamos que 25 centímetros era distancia prudencial. La tuvimos en cuenta a partir de un error aproximado de 5 cm + 12 cm que puede tener de largo el robot. El resto de la distancia que falta hasta llegar a 25 es lo que falta para que Hans chocase contra un objeto o pared.
No hay comentarios:
Publicar un comentario