Mindstorm & le jos

64
MINDSTORM & LeJOS Planificación en IA & Robótica Est. Andrés Camilo Echeverri Pineda Est. Kevin Florez Madrid

Transcript of Mindstorm & le jos

Page 1: Mindstorm & le jos

MINDSTORM & LeJOS

Planificación en IA & RobóticaEst. Andrés Camilo Echeverri Pineda

Est. Kevin Florez Madrid

Page 2: Mindstorm & le jos

Lejos, La Plataforma Java Para LEGO

Mindstorms

LEGO Mindstorms ha sido sin duda uno de los productos más revolucionarios

que ha sacado LEGO en los últimos años, y a pesar de su relativamente corta

vida ha sufrido una importante evolución. Sin duda el éxito de este producto

radica en su enorme potencial ya que permite literalmente crear robots

programables con casi cualquier funcionalidad debido a la gran flexibilidad

de LEGO (se pueden crear infinitos diseños posibles). Todo esto ha permitido

que la robótica esté al alcance del usuario medio, algo nada desdeñable si

tenemos en cuenta que los robots comerciales y sus piezas cuestan miles de

euros, o que su elevada complejidad suele limitar su uso a entornos de

investigación en universidades.

09/11/2010 2

Page 3: Mindstorm & le jos

PIONEER

Un robot pioneer y varios sensores pueden costar miles de euros.

09/11/2010 3

Page 4: Mindstorm & le jos

NXT-G

La interfaz de programación gráfica del LEGO Mindstorms (NXT-G) nos

permite programar, compilar y montar un programa al NXT. Sin embargo,

debido a las limitaciones de este entorno (ya que en un principio está orientado

para que niños y gente muy joven pueda usarlo y no les resulte complicado o

aburrido) es imposible explotar todo el potencial que nos permite el LEGO

NXT. Con la idea de aprovechar al máximo dicho potencial y poder programar

el NXT en lenguajes conocidos como Java o C++, han surgido sistemas

operativos alternativos al de LEGO, como el LeJOS(Java), o BrickOS (C++),

que nos permiten una programación mucho más avanzada. Estas plataformas

son completamente gratuitas (Freeware), creadas por personas sin ánimo de

lucro y gracias a las cuales ha evolucionado el mundo de LEGO Mindstorms.

09/11/2010 4

Page 5: Mindstorm & le jos

MINDSTORM

“ Gracias a la programación en

lenguajes más complejos como

Java o C++ se pueden

solucionar problemas más

complejos. Gente con suficiente

talento es capaz de crear robots

que en un principio parecen

imposibles.”

09/11/2010 5

Page 6: Mindstorm & le jos

LeJOS

• Nos introducimos en el mundo del LeJOS que,

aunque lleve su tiempo aprenderlo, merece la pena.

• Recordemos; Los lenguajes OO (Orientados a

Objetos) son el resultado de la evolución de los

lenguajes de programación, donde se usa una

capacidad única del ser humano llamada

Abstracción para ser capaz de reducir la dificultad de

problemas que un principio son tremendamente

complejos.

09/11/2010 6

Page 7: Mindstorm & le jos

LeJOS

• La abstracción consiste en aislar un elemento de su

contexto o entorno, centrarse en “¿Qué hacen las

cosas?”, en vez de “¿Cómo lo hacen?”. Detrás de las

lineas de código de un programa hay instrucciones de

ensamblador que a su vez se traducen en complejas

secuencias de unos y ceros, que finalmente se

traducirán en si pasa o no electricidad por cierto

circuito, o si cierta sección de un disco duro esta

magnetizada o no.

09/11/2010 7

Page 8: Mindstorm & le jos

Lenguajes de programación para NXT

Seguramente se han preguntado en

alguna ocasión qué posibilidades

hay a la hora de programar

nuestros Mindstorms, vamos a

hacer una pequeña reseña de los

lenguajes de programación

principales para el NXT.

09/11/2010 8

Page 9: Mindstorm & le jos

NXT -G

Programación en modo gráfico, basada en iconos. Se trata de

un software oficial de LEGO, compatible con Windows y

Mac pero sin soporte para Linux. Basado en LabVIEW.

Permite conexiones bluetooth y por puerto serie. Tiene

algunas limitaciones en cuanto a las posibilidades de

programación y en ocasiones resulta algo engorroso, sobre

todo cuando se emplean muchos iconos para programas más

complejos. Utiliza el firmware habitual. Permite hacer

programas relativamente rápido sin tener conocimientos de

programación. En contrapartida son más lentos y ocupan

mayor cantidad de memoria.

09/11/2010 9

Page 10: Mindstorm & le jos

NXT -G

Hay 2 versiones:

• Educativa: la versión 2.0 tiene Data Logging, permite

monitorizar en tiempo real el estado del robot y/o sus sensores.

Incluye actividades para el aprendizaje del diseño y

programación de robots NXT Mindstorms.

• Comercial: No tiene Data Logging. Incluye instrucciones y

guía de programación para los modelos básicos que se

muestran en la caja (la versión 1.0 y 2.0 tienen distintos

modelos).

09/11/2010 10

Page 11: Mindstorm & le jos

RobotC

Programación en modo texto, también es un software oficial de

LEGO, hasta el momento sólo con soporte para Windows.

Basado en AnsiC. Permite conexiones por bluetooth y puerto

serie. Las posibilidades crecen enormemente y prácticamente ya

no existen más limitaciones que la propia imaginación. Los

programas en modo texto ocupan mucha menos memoria que

los gráficos y eso siempre es un alivio debido a las limitaciones

de memoria del ladrillo NXT (aunque en la versión 2.0 la

capacidad se ha duplicado). Incluye programas de ejemplo. Los

programas son livianos y de rápida ejecución, sin embargo son

necesarios conocimientos de programación.

09/11/2010 11

Page 12: Mindstorm & le jos

NXC

Programación en modo texto, se trata de un software libre

desarrollado por la comunidad. Compatible con Windows, Mac y

Linux descargando el compilador adecuado para cada sistema. Suele

venir de la mano con NBC (ensamblador) y tiene ciertas similitudes

con C. Tiene soporte para bluetooth y puerto serie.

Importante: Los programas de RobotC y NXC no son compatibles

entre sí, y no se pueden portar de una plataforma a otra, ya que

hacen uso de librerías y funciones distintas.

Hace uso del firmware estándar. Los programas son también muy

ligeros y de rápida ejecución, sin embargo son necesarios

conocimientos de programación.

09/11/2010 12

Page 13: Mindstorm & le jos

PbLua

Programación en modo texto, basada en Lua, que es un lenguaje

de programación basado en C portable, fácil de leer y de escribir

que se compila directamente desde el ladrillo. Software libre. Es

necesario un firmware personalizado. Se requieren conocimientos

de programación y son programas que ocupan muy poca memoria

y de rápida ejecución.

09/11/2010 13

Page 14: Mindstorm & le jos

LabVIEW

Es un entorno de programación gráfica empleado por millones de

ingenieros y científicos para el desarrollo de sofisticados sistemas de

control, medidas, pruebas mediante el uso de intuitivos iconos gráficos

conectados por hilos, que recuerdan una tabla de flujo. Permite la

integración con una infinidad de dispositivos hardware y proporciona

librerías que permiten el análisis avanzado y visualización de datos. La

plataforma es escalable, trabaja en varios sistemas operativos, y desde

su introducción en 1986 se ha convertido en líder industrial. Dispone de

una página de recursos relacionados con LEGO MINDSTORMS

NXT, entre los que podemos encontrar el Toolkit for LEGO

MINDSTORMS NXT.

09/11/2010 14

Page 15: Mindstorm & le jos

LeJOS

Programación en modo texto, también se trata de software libre.

Compatible con Windows, Mac y Linux. Basado en Java. Soporte

para bluetooth y puerto serie. Requiere de un firmware

personalizado. Los programas se ejecutan relativamente rápido y

son ligeros. Se necesitan conocimientos de programación.

09/11/2010 15

Page 16: Mindstorm & le jos

Instalación de LeJOS en Windows

El proceso de instalación de LeJOS en Windows desde cero

es algo largo y tedioso, pero sin duda merece la pena. En este

artículo trataré de explicar paso a paso la instalación de

LeJOS y todos los componentes necesarios, así como

finalmente hacer un pequeño programa y lograr subirlo al

NXT y que funcione.

09/11/2010 16

Page 17: Mindstorm & le jos

Instalacion de LeJOS

Una vez instalado todo esto necesitaremos el software de LeJOS,

que podemos encontrar en la sección de descargas de la página de

LeJOS:

http://lejos.sourceforge.net/nxj-downloads.php

Elegimos Win32 leJOS NXJ, y descargamos (es un ejecutable).

Una vez descargado hay que instalarlo en la carpeta por defecto.

Cuando nos pregunte en que carpeta queremos guardar los

proyectos, se recomienda poner:

../Mis documentos\LeJOSNXJProjects:

09/11/2010 17

Page 18: Mindstorm & le jos

Instalacion de LeJOS

Esto nos ayudará a la hora de cargar programas al NXT.

09/11/2010 18

Page 19: Mindstorm & le jos

Instalacion de LeJOS

• Una vez instalado saldrá la herramienta de “instalación” del

firmware de NXJ:

• Elige “Start Program” y saldrá:

09/11/2010 19

Page 20: Mindstorm & le jos

Instalacion de LeJOS

• Presiona OK, y te preguntará:

• Si eliges “Yes” se borrarán todos los archivos en el NXT.

Es recomendable hacer esto para que los archivos antiguos

no interfieran, por tanto es importante que lo tengamos

todo guardado en el ordenador. (En nuestro caso

eligiremos “NO”)Posteriormente saldrá el siguiente

mensaje:

09/11/2010 20

Page 21: Mindstorm & le jos

Instalacion de LeJOS

• Que viene a decir que nos aseguremos de que el NXT esta

enchufado a la corriente mediante el alimentador (más que

nada para que no se apage a mitad del proceso), de que esta

enchufado por puerto USB, y por supuesto de que está

encendido.

• Cuando aceptemos se mostrará el siguiente cuadro, en el que

se detalla el proceso de la instalación:

09/11/2010 21

Page 22: Mindstorm & le jos

Instalacion de LeJOS

09/11/2010 22

Page 23: Mindstorm & le jos

Instalacion de LeJOS

• Cuando termine nos preguntará si queremos instalar otro NXT.

Si no queremos hacer este proceso con ningún ladrillo NXT

más, que será lo más habitual, hay que presionar “No”:

• Ahora ya tenemos al NXT preparado para ejecutar programas

de LeJOS

09/11/2010 23

Page 24: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

Lo que necesitamos ahora es un entorno de programación para

poder crear y compilar nuestros programas. Eclipse es un

entorno de desarrollo integrado de código abierto (es gratis,

freeware) multiplataforma (que permite el desarrollo de

programas en diferentes lenguajes de programación, gracias a la

capacidad de poder crear e instalar plugins (accesorios) para

expandirlo), basado en Java. Voy a explicar como se haría con

Eclipse ya que es bastante cómodo en general para trabajar. Lo

primero es descargarse el Eclipse Classic de la página de

descargas de Eclipse:

http://www.eclipse.org/downloads/

09/11/2010 24

Page 25: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

Una vez descargado no necesita instalación, simplemente

descomprimir en la carpeta deseada. Para ejecutar simplemente

doble-click en eclipse.exe. Al ejecutarlo por primera vez pedirá que

elijamos un “workspace” o carpeta de trabajo, recomiendo que

elijamos aquella que nos recomienda para los programas de ejemplo

de LeJOS (Mis documentos\leJOSNXJProjects), y marcar que sea la

opción por defecto:

09/11/2010 25

Page 26: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

Ahora crearemos un pequeño programa de prueba.

Daremos click a File -> New -> Java Project y nos saldrá un

menú:

09/11/2010 26

Page 27: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

• Ponerle de nombre HolaMundo y darle a Next. En la pestaña Libraries elegir Add External JARs… y elegir classes.jar que por defecto se encontrará en C:\Archivos de programa\leJOS NXJ\lib:

09/11/2010 27

Page 28: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

• Por ultimo darle a Finish. Ahora necesitaremos crear una clase,

para ello haremos click derecho encima de HolaMundo -> New ->

Class. Tendremos que elegir un nombre para la clase, (HolaMundo

por ejemplo), y marcaremos la casilla public static void main

(String[] args)

09/11/2010 28

Page 29: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

09/11/2010 29

Page 30: Mindstorm & le jos

Instalacion de Eclipse y Programa de

PruebaAhora ya tenemos la clase, por lo que podemos escribir el programa:

import lejos.nxt.*;

public class HolaMundo {

/**

* @param args

*/

public static void main(String[] args) {

LCD.drawString("Hola Mundo",3,4);

Button.waitForPress();

}

}

09/11/2010 30

Page 31: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

• Una vez escrito necesitaremos guardarlo, compilarlo, y

finalmente descargarlo en el NXT. Para ello tendremos que

decirle a Eclipse lo que necesita para compilar un programa de

LeJOS, ya que de por sí no lo sabe.

• En el menú Run -> External Tools -> External Tools

Configuration vamos a crear una configuración para compilar y

otra para linkar. El proceso de linkado va a ser siempre necesario

porque siempre haremos uso de las librerías de LeJOS que

tendremos que linkar.

09/11/2010 31

Page 32: Mindstorm & le jos

Instalación de Eclipse y Programa

de Prueba

En program elegimos New Launch Configuration, nos saldrá un

menú, en el que pondremos un nombre (LeJOS Compilacion para

la de compilación y LeJOS Link para linkar). Además necesitáis

poner la localización de los comandos de LeJOS para compilar

(njxc.bat) y linkar y subir (nxj.bat), así como los parámetros que

usan dichos comandos. Debería quedar de la siguiente forma:

09/11/2010 32

Page 33: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

Dado que el fichero por lotes (.bat) nxj.bat que vamos a emplear para

hacer la descarga a nuestro NXT ya realiza el linkado, no necesitamos

crear una configuración de linkado: LeJOS Upload ya lo incluye por sí

mismo.

09/11/2010 33

Page 34: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

Ahora podremos acceder a nuestras configuraciones de compilación y linkeo

y upload. Compilar y posteriormente linkar y subir haciendo click en dichas

configuraciones (recordar tener el NXT encendido y conectado por USB

cuando demos click a LeJOS Upload):

09/11/2010 34

Page 35: Mindstorm & le jos

Instalacion de Eclipse y Programa de

Prueba

Si no da error el NXT pitará y el programa estará ya subido. Para

ejecutarlo solo necesitamos darle en el NXT a Files, seleccionar vuestro

programa con el botón del centro y darle a Execute program. Finalmente

podemos ver que en la pantalla nos sale Hola Mundo, y en cuanto

apretemos cualquier botón saldrá del programa ( que es exactamente lo

que hace el código escrito anteriormente).

09/11/2010 35

Page 36: Mindstorm & le jos

NetBeans y Plugin de Lejos

• La configuración de Netbeans es parecida a la de Eclipse,

por lo cual se sugiere la siguiente pagina para este proceso:

http://yori.mxl.uabc.mx/~rosendo/?page_id=204

• Planteamos la siguiente idea sujeta a cambios luego de

encontrar mas informacion al respecto;

• Los programas creados en Netbeans se compilan e

inmediatamente se ejecutan en el mindstorm ya sea via

bluetooth o usb, pero no quedan almacenados en el

mindstorm, contrario a Eclipse que como vimos lo

descarga y se ejecuta desde alli en los “Files” del Brick

09/11/2010 36

Page 37: Mindstorm & le jos

Mas sobre LeJOS

Diseño actual del MindStorm

09/11/2010 37

Page 38: Mindstorm & le jos

Manejo Básico Del LCD Y Los

Botones En Lejos• Manejo básico del LCD y los botones en LeJOS

• Puesto que LeJOS esta basado en Java, un lenguaje orientado a

objetos, cada parte del robot (LCD, botones, motores, sensores

de conctacto….) serán objetos con sus propios métodos y

atributos. Vamos a ver el manejo de los botones y el LCD, y

finalmente pondremos un programa de prueba explicado para

que no queden dudas sobre su comportamiento.

09/11/2010 38

Page 39: Mindstorm & le jos

Ladrillo

LCD

PUERTO PARA

MOTORES

PUERTO PARA

SENSORES

USB

ENTER

RIGHT

LEFT

ESCAPE

09/11/2010 39

Page 40: Mindstorm & le jos

Manejo Basico de los Botones

Los botones del NXT son una clase de objetos en LeJOS (class

Button), por lo tanto tendrán sus métodos y atributos. En este

caso uno de los atributos de un botón es que botón es (ENTER,

ESCAPE, RIGHT, o LEFT). Cada botón tiene un número

identificador también, que nos sirve para saber en ciertos

métodos que botón se a pulsado o dejado de pulsar:

09/11/2010 40

Page 41: Mindstorm & le jos

Métodos Básicos de la Clase Button

• int waitForPress(): Detiene el programa hasta que apretemos

el botón indicado. Devuelve un número con el identificador

del botón que ha sido presionado.

• void waitForPressAndRelease(): Detiene el programa hasta

que apretemos y soltemos el botón indicado.

• Boolean apretado isPressed(): Devuelve true en caso de que

el botón este apretado y false en caso contrario.

09/11/2010 41

Page 42: Mindstorm & le jos

Métodos Básicos de la

Clase Button

• Aunque la mayoría de métodos necesitan que se especifique el

botón:

Button.ESCAPE.waitForPressAndRelease();

• El método waitForPress() no exige ningún botón en particular

y además no es recomendable ponérselo:

Button.waitForPress();

09/11/2010 42

Page 43: Mindstorm & le jos

Manejo Basico del LCD

• El LCD al igual que los motores es una clase de objeto, por lo que tendrá

sus propios métodos. La pantalla tiene un alto y ancho de píxeles, por lo

que para escribir en cierto píxel se necesitan unas coordenadas (x, y). Por

ejemplo lo que escribamos en (0,0) aparecerá a partir de la parte superior

izquierda de la pantalla. Ejemplo de los métodos para manejar el LCD:

• void clear(): Limpia el LCD.

• void drawString(frase str, int x, int y) : Muestra una frase (o cadena de

texto) en la pantalla a partir de la posición (x,y) (ancho, alto).

• void drawInt(int numero, int x, int y) : Muestra un numero entero en la

pantalla a partir de la posición (x,y).

09/11/2010 43

Page 44: Mindstorm & le jos

Manejo Basico del LCD

• Es importante usar el método clear() para

limpiar la pantalla cada vez que queramos

escribir una cosa nueva, si no queremos que se

nos mezcle con lo que hubiera escrito

anteriormente.

09/11/2010 44

Page 45: Mindstorm & le jos

Ejemplo Manejo del LCD

import lejos.nxt.*;

public class pruebaBotones

{

public static void main (String[] args) throws Exception

{

LCD.clear();

LCD.drawString("Pulse el boton", 1, 3);

LCD.drawString("ENTER", 5, 5);

Button.ENTER.waitForPressAndRelease();

LCD.clear();

09/11/2010 45

Page 46: Mindstorm & le jos

Manejo del LCD

LCD.drawString("Pulse cualquier", 1, 3);

LCD.drawString("boton", 5, 5);

int id = Button.waitForPress();

LCD.clear();

switch (id) {

case 1:

LCD.drawString("ENTER pulsado", 1, 4);

break;

case 2:

LCD.drawString("LEFT pulsado", 1, 4);

break;

09/11/2010 46

Page 47: Mindstorm & le jos

Manejo del LCD

case 4:LCD.drawString("RIGHT pulsado", 1, 4);break;

case 8:LCD.drawString("ESCAPE pulsado", 1, 4);break;

}Thread.sleep(2000);LCD.clear();LCD.drawString("Pulse ESCAPE", 2, 3);LCD.drawString("para salir", 3, 5);Button.ESCAPE.waitForPressAndRelease();LCD.clear();LCD.drawString("Adios", 6, 4);Thread.sleep(2000); }

}

09/11/2010 47

Page 48: Mindstorm & le jos

Clase Motor

• Tiene 3 instancias disponibles:

Motor.A, Motor.B y Motor.C

• Para controlar los motores usamos algunos

métodos como: forward, backward,

reverseDirection, y stop

• (No son los únicos, son algunos básicos)

09/11/2010 48

Page 49: Mindstorm & le jos

Clase Motor

Motor.A.setSpeed(720);// 2 RPM

Motor.C.setSpeed(720); Motor.A.forward();

Motor.C.forward(); Thread.sleep (1000);

Motor.A.stop(); Motor.C.stop();

Motor.A.regulateSpeed(true);

Motor.A.rotateTo( 360); Motor.A.rotate(-

720,true);

09/11/2010 49

Page 50: Mindstorm & le jos

Clase Motor

• Observaremos un ejemplo de la utilizacion de

la clase Motor combinandola con un sensor de

contacto, para ello discutiremos primero los

sensores del mindstorm

• Lejos tiene la clase Pilot que permite una

mejor manipulacion o manejo mas avanzado

de los motores del mindstorm(se propone como

investigacion)

09/11/2010 50

Page 51: Mindstorm & le jos

Sensores del Mindstorm en LeJOS

09/11/2010 51

Page 52: Mindstorm & le jos

Sensor de Contacto (TouchSensor)

• El sensor de contacto es el más simple de los

sensores del NXT. Básicamente tiene dos

estados, pulsado o sin pulsar. Por tanto contará

con un único método en LeJOS:

• boolean isPressed() : Devuelve true en caso

de que esté pulsado y false en caso contrario.

09/11/2010 52

Page 53: Mindstorm & le jos

TouchSensor

• En Java es necesario declarar los sensores antes de poder

usarlos, indicando qué tipo de sensor va a ir y en qué puerto.

Para declarar, un sensor de contacto en el puerto de sensores 1

tendremos que escribir:

TouchSensor contacto1 = new TouchSensor(SensorPort.S1);

• Ahora ya podríamos usar este sensor de contacto:

presionado = contacto1.isPressed();

09/11/2010 53

Page 54: Mindstorm & le jos

TouchSensor y Manejo Basico de

Motores

import lejos.nxt.*;

public class BumpAndGo {

public static void main(String[] args) throws Exception

{

TouchSensor

contacto1 = new TouchSensor(SensorPort.S1);

Motor.A.setSpeed(400);

Motor.B.setSpeed(400);

LCD.drawString("Pulse ESCAPE", 2, 3);

LCD.drawString("para parar", 3, 5);

09/11/2010 54

Page 55: Mindstorm & le jos

TouchSensor y Motores

while (true){Motor.A.forward();Motor.B.forward();if (contacto1.isPressed()){Motor.A.stop();Motor.B.stop();Motor.A.rotate(-100,true);Motor.B.rotate(-400,false);

}if (Button.ESCAPE.isPressed()){break;

}}

LCD.clear();Motor.A.stop();Motor.B.stop();LCD.drawString("Adios", 6, 4);Thread.sleep(2000);

}}

09/11/2010 55

Page 56: Mindstorm & le jos

Sensor Ultrasonido

UltrasonicSensor• Basado en un sistema parecido al que usan los murciélagos, el sensor de

ultrasonidos lanza ondas de sonido a la espera de que reboten en objetos y

vuelvan, y finalmente halla la distancia al objeto calculando el tiempo que

ha tardado en regresar dicha onda. La precisión del sensor de

ultrasonidos del NXT es bastante reducida, pero a pesar de ello se le puede

sacar partido. La clase UltrasonicSensor de LeJOS tiene bastantes métodos

que nos ayudan a la hora de tomar medidas. Los más básicos son los

siguientes:

09/11/2010 56

Page 57: Mindstorm & le jos

Sensor Ultrasonido

• int continuous(): Pone el sensor de ultrasonidos en funcionamiento

continuo.

• int off

(): Detiene el funcionamiento continuo.

• int getDistance(): Calcula y devuelve la distancia en centímetros hasta el

objeto más cercano. El valor máximo es de 255 cm, aunque muchas veces

devuelve este valor como error.

• int getDistances(int[] dist): Devuelve un array con las últimas 8 distancias

calculadas. Es útil para cuando se requiere mayor precisión, ya que

podemos tomar estas 8 medidas sobre un mismo objetivo, y hallar la media,

con los que incrementamos la precisión en la medida.

09/11/2010 57

Page 58: Mindstorm & le jos

Sensor Ultrasonido

• Para su declaracion:UltrasonicSensor

us = new UltrasonicSensor(SensorPort.S1);

• Miraremos el funcionamiento de un pequeño codigo que crea

un miniradar con el sensor de ultrasonido y manejo de motores

y conoceremos que hace cada linea de codigo

09/11/2010 58

Page 59: Mindstorm & le jos

Radarimport lejos.nxt.*;

public class RadarSimple {

public static void main(String[] args) throws Exception

{

UltrasonicSensor

u1 = new UltrasonicSensor(SensorPort.S1);

int dist, x = 0 ,y = 0;

u1.continuous();

for(int i = 0; i <= 180; i++){

dist = u1.getDistance();

x= (i*LCD.SCREEN_WIDTH)/180;

y= (dist*LCD.SCREEN_HEIGHT)/255;

for(int j = y; j <= LCD.SCREEN_HEIGHT; j++){

LCD.setPixel(255, x, j);

}

09/11/2010 59

Page 60: Mindstorm & le jos

Radar

Motor.A.rotateTo(-2*i,true);

Motor.B.rotateTo(2*i);

}

Motor.A.rotateTo(0,true);

Motor.B.rotateTo(0);

Button.ESCAPE.waitForPressAndRelease();

Thread.sleep(1000);

}

}

09/11/2010 60

Page 61: Mindstorm & le jos

Paso a Paso

• u1.continuous();

• 07 - Ponemos el sensor de ultrasonido en modo continuo.

• for(int i = 0; i <= 180; i++){

• 08 - Esto es un búcle for. Como se ve la definición de los for esta dividida

en tres partes: en la primera se define un entero llamado i cuyo valor inicial

será 0, el segundo es la condición (mientras i sea menor o igual a 180 se

repetirá todo lo que hay dentro), la tercera parte es de cuanto en cuanto

incrementará i, en este caso de uno en uno (i++ es lo mismo que decir i = i

+1)). Este búcle lo utilizaremos para tomar unas 180 medidas del sensor de

ultrasonidos y dibujarlas.

• dist = u1.getDistance();

• 09 - Guardamos en dist la distancia que ha medido el sensor de

ultrasonidos.

09/11/2010 61

Page 62: Mindstorm & le jos

Paso a Paso

• x= (i*LCD.SCREEN_WIDTH)/180;

• 10 - Aquí calculamos en que posición x de la pantalla del LCD dibujaremos. Es una simple regla de 3: Si la pantalla mide SCREEN_WIDTH y vamos por la medida i de 180 tendremos que dibujar el la posición (i*LCD.SCREEN_WIDTH)/180. Asi por ejemplo cuando i sea igual a 180, dibujaremos en la posición SCREEN_WIDTH, o sea, en la parte más a la derecha del LCD.

• y= (dist*LCD.SCREEN_HEIGHT)/255;

• 11 - Igual que la línea anterior, pero con la posición y. En este caso nos centraremos en la medida calculada con el sensor de ultrasonidos, por lo que el valor máximo será 255.

• for(int j = y; j <= LCD.SCREEN_HEIGHT; j++){

• 12 - Este búcle lo usaremos para dibujar una linea desde la posición x, y hasta la posición x, SCREEN_HEIGHT. Para ello recorreremos esa línea dibujando píxel por píxel.

09/11/2010 62

Page 63: Mindstorm & le jos

Paso a Paso

• Motor.A.rotateTo(-2*i,true);

Motor.B.rotateTo(2*i);

• 15 y 16 - Giramos un poco las ruedas, lo que nos servirá para

tomar nuevas medidas con el sensor de ultrasonidos en la

siguiente iteración del búcle.

• Motor.A.rotateTo(0,true);

Motor.B.rotateTo(0);

• 18 y 19 - Una vez termina todas las medidas y el dibujo

hacemos que el robot regrese a su posición original.

09/11/2010 63

Page 64: Mindstorm & le jos

Conclusión

• LeJOS es un lenguaje completo capaz de

proporcionar herramientas suficientes para la

realizacion de programas simples o complejos

mediante el ambiente JAVA y la POO

• Como podemos darnos cuenta y como se dijo

al inicio es mucho lo que hay para estudiar

09/11/2010 64