SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
MINDSTORM & LeJOS

Planificación en IA & Robótica
   Est. 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 documentosLeJOSNXJProjects:



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 documentosleJOSNXJProjects), 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 programaleJOS
         NXJlib:

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
                  Prueba
Ahora 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
                                USB

       PUERTO
        PARA                          LCD
      MOTORES

                                  RIGHT

             LEFT               ENTER


                               ESCAPE
       PUERTO
        PARA
      SENSORES


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
Radar
   import 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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (19)

Capítulo 0 Qbasic generalidades
Capítulo 0 Qbasic generalidadesCapítulo 0 Qbasic generalidades
Capítulo 0 Qbasic generalidades
 
Ponencia texcoco
Ponencia texcocoPonencia texcoco
Ponencia texcoco
 
Clase02 de sistemas
Clase02 de sistemasClase02 de sistemas
Clase02 de sistemas
 
Sanchez montesdeoca angela 2 b2
Sanchez montesdeoca angela 2 b2Sanchez montesdeoca angela 2 b2
Sanchez montesdeoca angela 2 b2
 
Herramientas de visualización de datos
Herramientas de visualización de datosHerramientas de visualización de datos
Herramientas de visualización de datos
 
Herramientas de programación para desarrolladores
Herramientas de programación para desarrolladoresHerramientas de programación para desarrolladores
Herramientas de programación para desarrolladores
 
Lego mindstorms
Lego mindstormsLego mindstorms
Lego mindstorms
 
Ola ka sssej
Ola ka sssejOla ka sssej
Ola ka sssej
 
óHhg
óHhgóHhg
óHhg
 
Taller NXT 2015
Taller NXT 2015Taller NXT 2015
Taller NXT 2015
 
Trabajo abril
Trabajo abrilTrabajo abril
Trabajo abril
 
Instituto Cristiano Encuentro
Instituto Cristiano EncuentroInstituto Cristiano Encuentro
Instituto Cristiano Encuentro
 
Frameworks y herramientas para la web del futuro
Frameworks y herramientas para la web del futuroFrameworks y herramientas para la web del futuro
Frameworks y herramientas para la web del futuro
 
P2_Act1
P2_Act1P2_Act1
P2_Act1
 
Aprenda a pensar como un programador con Python
Aprenda a pensar como un programador con PythonAprenda a pensar como un programador con Python
Aprenda a pensar como un programador con Python
 
Proyecto de Lego NXT
Proyecto de Lego NXTProyecto de Lego NXT
Proyecto de Lego NXT
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
01 curso de java introducción
01 curso de  java introducción01 curso de  java introducción
01 curso de java introducción
 
Presentacion NXT
Presentacion NXTPresentacion NXT
Presentacion NXT
 

Destacado

Institutogamaliel.com porque estudar bacharelado em teologia no itg
Institutogamaliel.com porque estudar bacharelado em teologia no itgInstitutogamaliel.com porque estudar bacharelado em teologia no itg
Institutogamaliel.com porque estudar bacharelado em teologia no itgInstituto Teológico Gamaliel
 
Investigación eventos virtuales by Rosa Garriga
Investigación eventos virtuales by Rosa GarrigaInvestigación eventos virtuales by Rosa Garriga
Investigación eventos virtuales by Rosa GarrigaMPISpain
 
Presentación Fundación Tres Culturas
Presentación Fundación Tres CulturasPresentación Fundación Tres Culturas
Presentación Fundación Tres CulturasCarlos Ojeda
 
Cartilha seguranca-internet
Cartilha seguranca-internetCartilha seguranca-internet
Cartilha seguranca-internetiuiuiuiu
 
Proposta de governo sýýo bento do trairi 2013
Proposta de governo sýýo bento do trairi 2013Proposta de governo sýýo bento do trairi 2013
Proposta de governo sýýo bento do trairi 2013Rozinaldo Cardoso
 
Ana lucia urrea
Ana lucia urreaAna lucia urrea
Ana lucia urreamarrolons
 
Lista trabalho e energia
Lista  trabalho e energiaLista  trabalho e energia
Lista trabalho e energiapedro0403
 

Destacado (20)

Institutogamaliel.com porque estudar bacharelado em teologia no itg
Institutogamaliel.com porque estudar bacharelado em teologia no itgInstitutogamaliel.com porque estudar bacharelado em teologia no itg
Institutogamaliel.com porque estudar bacharelado em teologia no itg
 
Investigación eventos virtuales by Rosa Garriga
Investigación eventos virtuales by Rosa GarrigaInvestigación eventos virtuales by Rosa Garriga
Investigación eventos virtuales by Rosa Garriga
 
Presentación Fundación Tres Culturas
Presentación Fundación Tres CulturasPresentación Fundación Tres Culturas
Presentación Fundación Tres Culturas
 
Questão 02
Questão 02Questão 02
Questão 02
 
Cartilha seguranca-internet
Cartilha seguranca-internetCartilha seguranca-internet
Cartilha seguranca-internet
 
Gesto Educação 2014
Gesto Educação 2014Gesto Educação 2014
Gesto Educação 2014
 
Celula
CelulaCelula
Celula
 
O tempo da salvação
O tempo da salvaçãoO tempo da salvação
O tempo da salvação
 
Institutogamaliel.com o espírito santo
Institutogamaliel.com o espírito santoInstitutogamaliel.com o espírito santo
Institutogamaliel.com o espírito santo
 
Institutogamaliel.com o tempo da salvação
Institutogamaliel.com o tempo da salvaçãoInstitutogamaliel.com o tempo da salvação
Institutogamaliel.com o tempo da salvação
 
Edital ancine 2012
Edital ancine 2012Edital ancine 2012
Edital ancine 2012
 
Mi album de fotos
Mi album de fotosMi album de fotos
Mi album de fotos
 
Institutogamaliel.com os evangelhos
Institutogamaliel.com os evangelhosInstitutogamaliel.com os evangelhos
Institutogamaliel.com os evangelhos
 
22046
2204622046
22046
 
Fenac festival nacional_da_cultura_book_2014
Fenac festival nacional_da_cultura_book_2014Fenac festival nacional_da_cultura_book_2014
Fenac festival nacional_da_cultura_book_2014
 
Proposta de governo sýýo bento do trairi 2013
Proposta de governo sýýo bento do trairi 2013Proposta de governo sýýo bento do trairi 2013
Proposta de governo sýýo bento do trairi 2013
 
Ana lucia urrea
Ana lucia urreaAna lucia urrea
Ana lucia urrea
 
Servicios del Instituto de Tecnología e Investigación Maestro21
Servicios del Instituto de Tecnología e Investigación Maestro21Servicios del Instituto de Tecnología e Investigación Maestro21
Servicios del Instituto de Tecnología e Investigación Maestro21
 
Lista trabalho e energia
Lista  trabalho e energiaLista  trabalho e energia
Lista trabalho e energia
 
Medios didacticos
Medios didacticosMedios didacticos
Medios didacticos
 

Similar a Mindstorm & le jos (20)

wepik-comparativa-de-las-plataformas-lego-rcx-nxt-y-ev3-analisis-de-sus-difer...
wepik-comparativa-de-las-plataformas-lego-rcx-nxt-y-ev3-analisis-de-sus-difer...wepik-comparativa-de-las-plataformas-lego-rcx-nxt-y-ev3-analisis-de-sus-difer...
wepik-comparativa-de-las-plataformas-lego-rcx-nxt-y-ev3-analisis-de-sus-difer...
 
Manual del usuario de nxt 2.pptx d
Manual del usuario de nxt 2.pptx dManual del usuario de nxt 2.pptx d
Manual del usuario de nxt 2.pptx d
 
My programming language 04 05-2014
My programming language 04 05-2014My programming language 04 05-2014
My programming language 04 05-2014
 
Actividad #1
Actividad #1Actividad #1
Actividad #1
 
Actividad #1
Actividad #1Actividad #1
Actividad #1
 
Actividad #1
Actividad #1Actividad #1
Actividad #1
 
Trabajo nxt
Trabajo nxtTrabajo nxt
Trabajo nxt
 
10 items de manual de usuario 2.0
10 items de manual de usuario 2.010 items de manual de usuario 2.0
10 items de manual de usuario 2.0
 
Bienvenido a lego
Bienvenido a legoBienvenido a lego
Bienvenido a lego
 
Colegio nacional
Colegio nacionalColegio nacional
Colegio nacional
 
PRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVAPRIMERA PRESENTACION JAVA
PRIMERA PRESENTACION JAVA
 
Presentación 2.3
Presentación 2.3Presentación 2.3
Presentación 2.3
 
actividad 1
actividad 1actividad 1
actividad 1
 
Programacion kitlegontx java
Programacion kitlegontx javaProgramacion kitlegontx java
Programacion kitlegontx java
 
Cartilla de LEGO
Cartilla de LEGOCartilla de LEGO
Cartilla de LEGO
 
Universidad nacional de chimborazo
Universidad nacional de chimborazoUniversidad nacional de chimborazo
Universidad nacional de chimborazo
 
Guia de infor 4dhfg
Guia de infor 4dhfgGuia de infor 4dhfg
Guia de infor 4dhfg
 
Fundamentos
FundamentosFundamentos
Fundamentos
 
Java
JavaJava
Java
 
Tutorial Java
Tutorial JavaTutorial Java
Tutorial Java
 

Mindstorm & le jos

  • 1. MINDSTORM & LeJOS Planificación en IA & Robótica Est. Andrés Camilo Echeverri Pineda Est. Kevin Florez Madrid
  • 2. 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
  • 3. PIONEER Un robot pioneer y varios sensores pueden costar miles de euros. 09/11/2010 3
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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 documentosLeJOSNXJProjects: 09/11/2010 17
  • 18. Instalacion de LeJOS Esto nos ayudará a la hora de cargar programas al NXT. 09/11/2010 18
  • 19. 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
  • 20. 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
  • 21. 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
  • 23. 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
  • 24. 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
  • 25. 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 documentosleJOSNXJProjects), y marcar que sea la opción por defecto: 09/11/2010 25
  • 26. 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
  • 27. 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 programaleJOS NXJlib: 09/11/2010 27
  • 28. 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
  • 29. Instalacion de Eclipse y Programa de Prueba 09/11/2010 29
  • 30. Instalacion de Eclipse y Programa de Prueba Ahora 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. Mas sobre LeJOS Diseño actual del MindStorm 09/11/2010 37
  • 38. 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
  • 39. Ladrillo USB PUERTO PARA LCD MOTORES RIGHT LEFT ENTER ESCAPE PUERTO PARA SENSORES 09/11/2010 39
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. Sensores del Mindstorm en LeJOS 09/11/2010 51
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. 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
  • 59. Radar import 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
  • 60. 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
  • 61. 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
  • 62. 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
  • 63. 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
  • 64. 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