mindstorm & le jos
Upload: grupo-de-investigacion-sintelweb-de-la-universidad-nacional-de-colombia-sede-medellin
Post on 04-Jun-2015
834 views
TRANSCRIPT
MINDSTORM & LeJOS
Planificación en IA & RobóticaEst. Andrés Camilo Echeverri Pineda
Est. Kevin Florez Madrid
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
PIONEER
Un robot pioneer y varios sensores pueden costar miles de euros.
09/11/2010 3
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Instalacion de LeJOS
Esto nos ayudará a la hora de cargar programas al NXT.
09/11/2010 18
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
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
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
Instalacion de LeJOS
09/11/2010 22
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
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
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
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
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
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
Instalacion de Eclipse y Programa de
Prueba
09/11/2010 29
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
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
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
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
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
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
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
Mas sobre LeJOS
Diseño actual del MindStorm
09/11/2010 37
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
Ladrillo
LCD
PUERTO PARA
MOTORES
PUERTO PARA
SENSORES
USB
ENTER
RIGHT
LEFT
ESCAPE
09/11/2010 39
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
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
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
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
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
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
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
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
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
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
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
Sensores del Mindstorm en LeJOS
09/11/2010 51
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
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
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
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
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
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
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
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
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
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
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
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
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