Sie sind auf Seite 1von 11

Programacin Mindstorms NXT con Java

Introduccin
El objetivo de esta gua es dar a conocer la programacin de Lego Mindstorms NXT robot utilizando lenguaje de programacin Java. Se llevar a cabo varios ejercicios que irn cumplir todos los conceptos de programacin Java cubiertas hasta ahora.

Fondo
El Lego Mindstorm NXT tiene un procesador de la computadora que puede ser programado para realizar diferentes operaciones. Para escribir, compilar y ejecutar los programas Java, utilice Dr. Java IDE. Al ejecutar el programa, el programa Java se ejecuta en el procesador NXT a travs de la conexin Bluetooth. Esto ltimo es posible gracias a prexisting archivos de clases de Java (ya escrito por alguien) agrupados en un archivo Java (. jar), que es similar a abrocharse montn de archivos. Estos archivos de clase Java se empaquetan en iCommand.jar y RXTX.jar y contienen las instrucciones como para controlar motores NXT, que trabajan con la entrada y la salida del sensor, y el envo de archivos en el NXT a travs del protocolo Bluetooth.

Disposicin
1. Su grupo debe tener un NXT y un dongle Bluetooth conectado al puerto USB del ordenador. 2. No hay proceso de configuracin lenghty para que las cosas funcionen, pero esta etapa se ha hecho ya para usted . En caso de que alguna vez decide trabajar NXT y Java en el pas entonces usted quiere seguir los siguientes enlaces: o Para Windows o Para MAC 3. Descargue el NXTRover.zip archivo en su ordenador y descomprimirlo. 4. En Dr. Java, proyecto abierto (exsisting) llama Rover.pjt

Haga clic en Proyecto> Abrir, busque la carpeta NXTRover para obtener el Rover.pjt

Los detalles sobre la clase NxtRover en NxtRover.java ( NO editar este archivo! )


El NXTRover.java contiene la clase (plantilla) para la creacin de objetos NxtRover es decir, que describe una entidad del mundo real, el receptor remoto , que es un vehculo en movimiento. Rover es en realidad Bristish empresa de fabricacin de automviles, pero lo llamamos nuestro automvil del NxtRover. El Lego NXT y Lego partes estn configurados de tal manera que se vea como un vehculo en movimiento y se llama la NXTRover. Los campos de clase conatins datos (estado) y mtodos (comportamiento del objeto) que NXT Rover. Los campos de datos: El objeto rover tiene tres campos de datos:

Motor dej Motor derecho doble countPerDegree

Las variables de instancia abandonaron y derecho representan las ruedas izquierda y derecha del rover y son del tipo de referencia del motor . La clase del motor (ya escrito por alguien) es una plantilla que describe los datos y el comportamiento de una rotacin de la rueda de un particular. En terminologa de objetos, el objeto del Motor modelos parte del problema - el problema de ser vehculo NXTRover. Ya tenemos dos ruedas, la clase NXTRover tiene dos objetos de motor es decir izquierda y derecha. El NXTRover tiene campo adicional llamado countPerDegree primitiva de tipo doble se utiliza para calcular el tiempo que transcurre cuando las ruedas giran por el ngulo de un grado. Mtodos La clase implementa muchos mtodos que harn que el movimiento rover en direcciones como hacia atrs, hacia adelante, girar, etc Vamos a utilizar algunos de estos mtodos en el laboratorio hoy en da para hacer el cambio rover de una manera determinada. Los mtodos que se describen como hacemos las tareas.

Constructor Los constructores se utilizan para crear los objetos. La clase tiene dos NxtRover constructor. Un constructor sin parmetros de entrada y otro con tres parmetros de entrada. Vamos a utilizar este ltimo al crear objetos NxtRover. Los tres parmetros son:

wheelDiameter - dimetro de la rueda driveLength - distancia entre dos ruedas (longitud unidad aka) turnRatio - relacin de las rotaciones de los sensores a las rotaciones de la rueda.

Los tres parmetros son de tipo primitivo doble y ayudan a determinar el valor de la variable countPerDegree. Ms de esto en la siguiente seccin. Tambin el constructor intializes la rueda izquierda al puerto C y la rueda derecha al puerto A de Lego NXT. Los puertos en el NXT se utilizan para la comunicacin entre el procesador y los motores NXT indivdual a cada lado. Tambin se inicializa la velocidad de la que el receptor mvil 50. (La velocidad puede variar de 0 a 100).

Task1 - Introduccin
Bsicamente, en esta tarea hacemos el NXT Rover para seguir adelante, y girar por una cantidad de tiempo que se mueve en una forma particular. Vamos a ejecutar este programa. 1. Preparacin:
o

o o o o

Asegrese de que el NXT est encendido y la parte superior izquierda de la pantalla conner mu bluetooth seguido por "<". Si no aparecen los dos smbolos que significa que la opcin Bluetoo est encendido.Pregntele a su TA ayuda en ese caso. Haga clic en Mis sitios de Bluetooth, busque el icono que aparece a la derecha Haga clic derecho sobre el icono y seleccione "Connect". El icono debera decir "Conectado", i establece el enlace entre communciation NXT y el ordenador Haga clic derecho sobre el mismo icono de nuevo y haga clic en Propiedades. Anote el nmero asociado a su NXT y Computacin. Eg. Usted encontrar COM7 Ahora edicin (el Bloc de notas o Wordpad) la tercera lnea en el archivo icommand.properti NXTRover) para indicar el nmero de puerto COM correcto de la etapa anterior. Por ejemplo N COM7. Guarde el archivo icommand.properties archivo. Tambin usted no tiene que cambiar el archivo tutorial.

2. Compila: Compila el proyecto con el Task1.java archivo seleccionado en NxtRover [Archivos de origen].

3. Ejecutar: o Coloque el robot en el suelo en este punto. o Haga clic en el botn "Ejecutar" en Dr Java. Usted debe ver el "<>" en la pantalla del NXT que indica que la programacin se est descargando en el NXT a travs del bluetooth. o Podra tomar algn tiempo antes de que el robot comienza realmente en movimiento (as sea paciente! ) o Adems, el panel de interacciones mostrar el estado siguiente:

Buscando 'icommand.properties' en dir de trabajo: S: \ Javaprojects \ NXTRover NXTcomm = COM5 Biblioteca Estable ============================ ============= Nativo Version lib = RXTX-2,1-7 Java lib Version = RXTX-2,1-7

4. Si hay un problema con la conexin Bluetooth, se mostrar el siguiente mensaje de error en el panel de interacciones:

Buscando 'icommand.properties' en dir de trabajo: S: \ Javaprojects \ NXTRover NXTcomm = COM5 Biblioteca Estable ============================ ============= Versin lib Nativo = RXTX-2,1-7 Java lib Version = RXTX-2,1-7 Error al conectar NXTCommand () constructor gnu.io.NoSuchPortException en gnu.io.CommPortIdentifier. getPortIdentifier (CommPortIdentifier.java: 218) en icommand.nxtcomm.NXTComm.open (origen desconocido) . icommand.nxtcomm.NXTCommand en <clinit> (origen desconocido)

.........

En tal caso, haga lo siguiente:


o o o o

Restablecer Dr Java usando el icono de "Reset". Apague y vuelva a encender el NXT. Tambin asegrese de que la conexin Bluetooth est conectado en Mis sitios de Bluetooth contrario repita el paso 1. Haga clic en el icono "Run" para tratar de dar un paso 3 de nuevo

5. Observar y sealar hacia abajo el movimiento Rovers. En qu estado se est moviendo el vehculo en?

6. Vamos a tratar de entender el cdigo en Task1.java


public class Task1 { void main (String args []) {public static / / Declarar y crear el objeto NxtRover NXTRover rover = new NXTRover (56.0, 12.7, 2.0); / / Comando para

/ / Cerrar la conexin Bluetooth - no cambie la lnea de abajo NXTCommand.close () } }

Usted probablemente ya sabe que cada archivo de cdigo Java define una "clase", que es algo que encapsula los datos y mtodos para describir un objeto. En este caso, lo nico que definimos una clase llamada "Task1" y que slo va a tener un mtodo (y no hay datos) llama principal y su nico objetivo es crear NxtRover objeto llamado rover y hacer que se mueva en determinada direccin. Por ahora ignorar las palabras "esttica", "vaco" o "(String args [])" Parte, que nada de eso

es importante para esta prctica. Al crear el objeto mvil, se utiliza el constructor con tres parmetros de entrada o argumentos. El primer parmetro es el dimetro de la rueda. El dimetro de la rueda es de aproximadamente 5,6 cm. La unidad de longitud se mide a ser aproximadamente 5,2 pulgadas o 13,2 cm. La relacin de espiras se establece 2. Estos parmetros se utilizan para calcular el campo de datos countPerDegree.
c ountPerDegree = (distancia recorrida / una rotacin completa) * relacin de espiras

Diferentes configuraciones del explorador pueden tener diferente dimetro de la rueda y drivelength, pero para nuestra instalacin el nico parmetro de entrada que puede ser que necesite cambiar es la relacin de giro ( No cambie el valor hasta que la tarea 3). El objeto rover puede moverse en cierta direccin, dando al objeto los siguientes comandos (estos mtodos se describen en NXTRover.java):
moveForward (int n): Se desplaza hacia adelante para n milisegundos. moveBackward (int n): Se desplaza hacia atrs para n milisegundos. convertir (int n): Gire hacia la izquierda (hacia la derecha si es negativo) de n milisegundos. detener (): Detenga el motor y espere a que se detengan

Vamos a examinar uno de los mtodos en Task1.java. Decimos que rover.moveForward (1000) ordena el objeto rover de avanzar para el recuento de 1000 milisegundos. En la jerga de programacin, se dice que el moveForward mtodo del rover es "invocado" o "llamada", para obtener el nmero de 1000 "se le ha pasado". Aqu el valor de 1000 es conocido como parmetro de entrada o discusin y es de tipo primitivo int . Cuando moveForward (1000) ha terminado, el control vuelve al principal , que luego pasa a la siguiente lnea de cdigo, y as sucesivamente. Esto se conoce secuencial excution o el control de comandos. Nota: La declaracin o declaracin ". Icommand.nxtcomm importacin *;" hace que sea posible el uso de los datos y los mtodos en prctica en otras clases. Por ejemplo: NXTCommand.close () es unmtodo en la clase icommand.nxtcomm colocado en el icommand.jar paquete.

Tarea 2 - Hacer que el movimiento Rover en forma

Completar el programa de Task2.java tal que ordena al robot para moverse en una aproximadamente aa cuadrado forma ya sea hacia la derecha o hacia la izquierda. Utilice solamente los mtodos descritos en Task1 mover el rover . Puede que tenga que cambiar el parametro de entrada para convertir mtodo para que el rover parece que se mueve en ngulo recto. Adems, si desea activar el vehculo en sentido contrario a las agujas del reloj, el parmetro de entrada que desea ofrecer el mtodo a su vez debe ser negativa. Ejemplo:
rover.turn (-500);

Siga los pasos 1 a 4 de la Tarea 1, para compilar y ejecutar Task2.java. Observe y tenga en cuenta por la forma en que las ruedas izquierda y derecha estn girando. Observe tambin lo difcil que es conseguir que el robot gire exactamente 90 grados!

Tarea 3 - Mtodos adicionales


Para simplificar el cambio en la Tarea 2, se introduce a los siguientes mtodos NxtRover que permiten la programacin para especificar la cantidad que el rover debe girar en grados:
turnLeft (d): Gire a la izquierda d grados turnRight (d): girar a la derecha d grados

Los grados va de 0 a 360. Si aplica los valores de grados negativos a continuacin, el robot se mover en la direccin opuesta. Por ejemplo: turnLeft (180), se gira a la derecha en 180. En esta tarea, su objetivo es poner en prctica el Task2 pero esta vez usando turnleft y turnRight mtodos para hacer que el movimiento cuadrados. Crear el programa de Task3.java . Los turnleft yturnRight mtodos funcionan haciendo girar las ruedas para una cantidad fija de tiempo en funcin de la cantidad de tiempo que se necesita para convertir un ttulo. Por lo tanto el clculo de lacountPerDegree . Adems, dado que los motores varan en velocidad, bateras varan a cargo, y las superficies proporcionan diferentes cantidades de friccin, podramos hacer un poco de trabajo extra. Slo si usted observaque turnleft o turnRight mtodos son de aproximadamente + / - 5 grados con respecto a los grados de destino a continuacin, realice una de las siguientes:

Cambiar el tercer parmetro constructor relacin de espiras . Puede dar valores entre rango 1.9 a 2.4 Oregn

Aumentar o disminuir la velocidad del rover a girar ms rpido o ms lento. Despus de que el constructor declaracin haga lo siguiente:

NXTRover rover = new NXTRover (56.0, 12.7, 2.0); rover.changeRoverSpeed (valor); / / cambia la velocidad del rover y el valor puede estar en el rango 0 - 100 / / Resto de los comandos

Tarea 4 - Uso de la Estructura de Control


En Task4.java hacer que su robot vaya en un modelo cuadrado, como en Task3 pero usando slo una llamada a un mtodo de avance y una llamada al mtodo turnLeft o turnRight.

Tarea 5 - Uso de constantes


En Task5.java, todava queremos mover el vehculo en una plaza, pero queremos constantes en lugar de valores literales de los parmetros de distancia. Inserte las siguientes lneas de cdigo en el principalmtodo despus de la declaracin de constructor:
DIST_TO_TRAVEL final int = 1000; DEGREES_TO_TURN final int = 90;

Estas dos lneas crean dos valores constantes que pueden ser usados una y otra vez sin el uso de los nmeros literales de nuevo. salos en el cdigo de esta manera:
rover.moveForward (DIST_TO_TRAVEL); rover.turnLeft (DEGREES_TO_TURN);

Vuelva a implementar el cdigo para incorporar constantes en el cdigo se hace por lo menos dos razones:

Permiten al programador definir los nombres apropiados para los valores ( DEGREES_TO_TRAVEL en lugar de 90 ) Permiten que el programa para cambiar el valor de una vez y que se refleja en todo el programa, simplemente cambiando la declaracin constante.

Nota: La palabra "final" indica al compilador que el valor asociado con el identificador no cambiar durante la ejecucin del programa, y todo lo que trata de cambiar se producir un error. Tambin el identificador constante se capitaliza como convencin para distinguirla de una variable.

Tarea 6 - Uso de Variables y expresiones


Una variable es una unidad de almacenamiento que puede ser utilizado y manipulado por el programa a medida que se ejecuta. Para utilizar las variables deben primero ser declaradas y para hacer esto en Java que utiliza el cdigo como el siguiente:
int x = 1;

En este ejemplo, int es el tipo de variable que se declara. La x en nuestro ejemplo es un identificador , el nombre que el programador le da a esa variable. La variable se declara y se inicializa a 1. Un uso prctico de las variables a aplicar operaciones aritmticas de la variable, como + , - , * , / , % , etc, para modificarlo como se ejecuta el programa. stos se pueden utilizar de la siguiente manera:
x = x + 5;

Esta expresin tiene la int x variable y aade 5 al mismo. Una manera ms sencilla de escribir esta misma expresin es:
x + = 5;

Ahora la tarea. Programa completo en Task5.java tal que hace que el rover para crear tres plazas q disminuyen de tamao en 1/3 cada vez y empezar desde el mismo lugar. Vea la imagen.

Tarea 7 - Uso de azar y Math Class

Ahora vamos a incorporar algunos mtodos ms funciones y emplean algunos de los mtodos de o del java.lang.Math y java.util.Random clase.

En Task7.java hacer el cambio rover en forma de tringulo como se muestra en la figura adjunta a distancia aleatoria x (tiempo bastante aleatoria x - como nos estamos moviendo aproximadamente (milisegundos int) mtodo). A continuacin, gire 90 , vaya la mitad de la distancia que sali adel hacia la base y recorrer la distancia adecuada z de nuevo a la base.

Deje x ser valor entre 1000 y 4000. La clase Random Generator tiene funcin llamada nextInt (in - 1. Ejemplo:
Random r = new Random (); int x = r.nextInt (1000);

Asimismo, puesto que la clase Random no es parte de la Biblioteca del lenguaje Java, es necesario el java.util.Random "antes de la declaracin de clase Task7.

Para calcular la distancia z , recordar Teorema de Pitgoras , que nos dar la hypotanuse del tring de retorno a que se etiqueta a en el diagrama de la derecha. En su clase de Trigonometra o Precal trigonomtricas como seno, coseno y tangente. Uno de tales funcin que es muy til es arco tang para calcular el valor del ngulo de una que es igual a la arcotangente de x dividido por Y( x / y ). llevar a cabo esta funcin.

Tambin los mtodos devuelven el valor del ngulo en radianes. Para que este cdigo funcione fc turnRight, nos gustara que esto sea en grados. Buscar a travs de la descripcin de la clase de ma radianes a grados encubiertas. Informe de Laboratorio de NXT Java Lab 1 Informe Due (copia impresa / Hard): Viernes 08/10/07 de 14:00 Su informe de laboratorio debe seguir las directrices de informe de laboratorio en reportguidelines.doc por mayora. Algunas pautas adicionales para ciertas secciones son las siguientes: Informe general

5 pginas como mximo.

1.5 espaciado, 12pt Times New Roman de todo el material escrito , excepto el cdigo . Su cdigo de Java debe estar en Courier New, fuente 12 puntos, y de un solo espacio. Presentar un informe de laboratorio para cada grupo de 2 estudiantes

Introduccin

En sus propias palabras describen brevemente tutorial. Hable de lo que se hizo hincapi en los conceptos clave sobre lenguaje de programacin Java. (Haga una pequea investigacin sobre los pros y los contras de Java frente a otros lenguajes de programacin.)

Procedimiento y Resultados

Combine el procedimiento y la seccin Resultados del informe. Para cada tarea asignada en el tutorial explica el proceso de pensamiento en la solucin del problema. Escribe la solucin que se le ocurri decir, lneas de cdigo java que escribi con el fin de realizar las tareas 2-7. Explique cules son las lneas de cdigo estn haciendo exactamente en la terminologa java. Los resultados aparecen de inmediato al primer intento? Qu hiciste el fin de realizar con precisin las tareas que se le administraron.

Discusin y Conclusin

Hable acerca de su experiencia en general en el desempeo de la tutora. Qu nuevas tecnologas estuvo expuesto en su caso? Cmo de programacin NXT utilizando Lego Idioma en comparacin con el uso de Java? o La historia de la imagen en el lenguaje Lego era ms fcil de percibir?

Das könnte Ihnen auch gefallen