Robot Lego programado em Java
Projecto da Cadeira IDSCA/MOSS 2010/2011
João Alves <jpralves@gmail.com>
12-Jul-2011 João Alves <jpralves@gmail.com> 2
Agenda
 Introdução
 Mindstorm NXT
 LeJOS
 O Robot
 Aplicação Desktop
 Programação do NXT
 O Robot na prática
 Bibliografia
12-Jul-2011 João Alves <jpralves@gmail.com> 3
Introdução
 O projecto proposto visou aplicar os
conhecimentos apreendidos nas aulas sobre a
linguagem de programação Java,
ultrapassando todas as limitações da
programação embebida num dispositivo com
poucos recursos de hardware
12-Jul-2011 João Alves <jpralves@gmail.com> 4
Mindstorm NXT
 O Lego Mindstorms NXT é um KIT Robot
programável lançado pela Lego no final de
Julho de 2006.
12-Jul-2011 João Alves <jpralves@gmail.com> 5
Mindstorm NXT (II)
 Caracteristicas:
 micro-controlador ARM7 de 32-bit a 48 Mhz
 256 KBytes FLASH
 64 KBytes RAM
 micro-controlador Atmel AVR de 8-bit a 8 MHz
 4 KBytes FLASH
 512 Bytes RAM
 Comunicação Wireless Bluetooth (BT Class II V2.0)
 Porta USB full-speed (12 Mbit/s)
 4 Portas de entrada com cabos de 6 fios
 3 Portas de saída com cabos de 6 fios
 Display gráfico LCD de 100x64 pixel
 Coluna – 8 kHz de qualidade
 Fonte de energia: 6 pilhas AA ou Bateria
12-Jul-2011 João Alves <jpralves@gmail.com> 6
leJOS
 O leJOS é uma pequena JVM - Java Virtual Machine –
Open Source para o NXT. Destaca-se por oferecer as
seguintes funcionalidades:
 Possibilidade de utilização da linguagem Java;
 Thread em modo Preemptivo;
 vectores, incluindo multi-dimensionais;
 Recursividade;
 Sincronização;
 Excepções;
 Tipos básicos de Java incluindo o float, long e String;
 A maior parte das bibliotecas de classes java.lang, java.util
e java.io.
12-Jul-2011 João Alves <jpralves@gmail.com> 7
LeJOS (II)
 Trata-se de um ambiente de programação para o Lego NXT.
Consiste em:
 Firmware alternativo que inclui uma JVM;
 Uma biblioteca de classes que implementa a API do leJOS NXJ;
 Um linker especial que traduz as Java Classes para o formato
binário aceite pelo NXT;
 Ferramentas para instalar o Firmware, enviar aplicações, fazer
debugging e outras funcionalidades de controlo do Brick;
 Uma API para o PC para escrever programas que conseguem
comunicar com o leJOS NXJ usando “Streams” de Java em cima
de Bluetooth ou USB ou usando o protocolo LCP (Lego
Communications Protocol).
 O site oficial do software: http://lejos.sourceforge.net/nxj.php
12-Jul-2011 João Alves <jpralves@gmail.com> 8
O Robot
 Usa:
 2 Motores
 1 Sensor Volumétrico
 1 Sensor de Luminosidade
 Interface Bluetooth para
comunicação
12-Jul-2011 João Alves <jpralves@gmail.com> 9
O Robot (II)
 A Programação do robot foi toda feita em Java
usando o IDE Eclipse.
 Foi implementado no robot 4 componentes
principais:
 Um Menu para controlar os parâmetros do robot;
 Execução de comandos para o robot (predefinidos
4 tipos);
 Persistência dos parâmetros;
 Comunicação Bluetooth com o PC.
12-Jul-2011 João Alves <jpralves@gmail.com> 10
Aplicação Desktop
12-Jul-2011 João Alves <jpralves@gmail.com> 11
Aplicação Desktop (II)
 A aplicação Desktop permite estender as funcionalidades do projecto
possibilitando tratar e visualizar de forma gráfica os dados trocados
entre o Brick NXT e o PC. Ao tratar a informação que é enviada pelo
Brick no PC, torna-se possível apresentar a mesma de uma forma
muito mais atractiva e recorrendo a bibliotecas que não existem ou
não fazem sentido no Brick.
 Na execução desta aplicação foram usadas as seguintes
funcionalidades:
 Multi-Threading;
 Comunicação cliente/servidor com sockets TCP/IP;
 Comunicação Bluetooth;
 Suporte de Múltiplos Clientes;
 Utilização da biblioteca gráfica SWING.
12-Jul-2011 João Alves <jpralves@gmail.com> 12
Programação do NXT
12-Jul-2011 João Alves <jpralves@gmail.com> 13
Programação do NXT (II)
public void go() {
int b = 0;
twowheelrobot.forward();
while (! Button.ESCAPE.isPressed()) {
distance = getDistanceSensor();
updateLCD();
if (sensorTouch.isPressed()) {
twowheelrobot.stop();
b++;
if (b > 3)
break;
}
if (distance > minDistance) {
twowheelrobot.forward();
} else {
twowheelrobot.pressHorn();
divertRobot();
}
}
twowheelrobot.stop();
}
12-Jul-2011 João Alves <jpralves@gmail.com> 14
Programação do NXT (III)
private void divertRobot() {
twowheelrobot.logMsg("REMARK=DivertingRobot");
while (distance < minDistance + MINDISTANCETHRESHOLD &&
! Button.ESCAPE.isPressed()) {
distance = getDistanceSensor();
updateLCD();
if (distance < minDistance + MINDISTANCETHRESHOLD) {
avoidcol++;
int i = randomGenerator.nextInt(50);
if (i % 2 == 0)
twowheelrobot.backleft();
else
twowheelrobot.backright();
twowheelrobot.sleep(i * 10);
}
}
}
12-Jul-2011 João Alves <jpralves@gmail.com> 15
O Robot na prática
 Demo
12-Jul-2011 João Alves <jpralves@gmail.com> 16
Bibliografia
 Juan Antonio Breña Moral, “Develop leJOS programs Step by Step ”, Version 0.6, Abril 2009
 Juan Antonio Breña Moral, “Multithreading with Java leJOS ”, Version 0.1, Outubro 2008
 Juan Antonio Breña Moral, “Bluetooth and leJOS ”, Version 0.1, Julho 2008
 Jason Butka, “Installing Lejos on the NXT Mindstorm Using the Eclipse IDE and Introduction to Lejos / Java
Programming”, Lawrence Technological University , 2008
 Zhizhang Shen,”A Gentler Introduction to Mindstorm NXT Programming”, Dept. of Computer Science
and Technology , Plymouth State University , 2009
 Jose Solorzano et al , “leJOS NXJ: NXJ technology ” , Disponível em
http://lejos.sourceforge.net/nxj.php
 Ferrari, et al, “Programming LEGO® MINDSTORMSTM with Java”, Syngress Publishing , 2002
 A.Terstegge , O. Bucker e B. Kuppers, “Robotik - Programming of Embedded Systems”,
University of Applied Sciences , 22-Oct-2010
 Kelleher , John, Namee, Brian Mac , “Introduction to Programming the Lego NXT Robot with
Java”, School of Computing, Dublin Institute of Technology
 Gerardo Oliveira, Ricardo Silva, Tiago Lira, Luis Paulo Reis , “Environment Mapping using the
Lego Mindstorms NXT and leJOS NXJ ”, FEUP – LIACC, 2009
 Tom Bickford , “Simple NXT Robot ”, Maine Robotics, 2008
12-Jul-2011 João Alves <jpralves@gmail.com> 17
Robot Lego programado em Java
 Q&A
João Alves
E-mail: jpralves@gmail.com
Web: http://jpralves.net/

Robot Lego programado em Java

  • 1.
    Robot Lego programadoem Java Projecto da Cadeira IDSCA/MOSS 2010/2011 João Alves <jpralves@gmail.com>
  • 2.
    12-Jul-2011 João Alves<jpralves@gmail.com> 2 Agenda  Introdução  Mindstorm NXT  LeJOS  O Robot  Aplicação Desktop  Programação do NXT  O Robot na prática  Bibliografia
  • 3.
    12-Jul-2011 João Alves<jpralves@gmail.com> 3 Introdução  O projecto proposto visou aplicar os conhecimentos apreendidos nas aulas sobre a linguagem de programação Java, ultrapassando todas as limitações da programação embebida num dispositivo com poucos recursos de hardware
  • 4.
    12-Jul-2011 João Alves<jpralves@gmail.com> 4 Mindstorm NXT  O Lego Mindstorms NXT é um KIT Robot programável lançado pela Lego no final de Julho de 2006.
  • 5.
    12-Jul-2011 João Alves<jpralves@gmail.com> 5 Mindstorm NXT (II)  Caracteristicas:  micro-controlador ARM7 de 32-bit a 48 Mhz  256 KBytes FLASH  64 KBytes RAM  micro-controlador Atmel AVR de 8-bit a 8 MHz  4 KBytes FLASH  512 Bytes RAM  Comunicação Wireless Bluetooth (BT Class II V2.0)  Porta USB full-speed (12 Mbit/s)  4 Portas de entrada com cabos de 6 fios  3 Portas de saída com cabos de 6 fios  Display gráfico LCD de 100x64 pixel  Coluna – 8 kHz de qualidade  Fonte de energia: 6 pilhas AA ou Bateria
  • 6.
    12-Jul-2011 João Alves<jpralves@gmail.com> 6 leJOS  O leJOS é uma pequena JVM - Java Virtual Machine – Open Source para o NXT. Destaca-se por oferecer as seguintes funcionalidades:  Possibilidade de utilização da linguagem Java;  Thread em modo Preemptivo;  vectores, incluindo multi-dimensionais;  Recursividade;  Sincronização;  Excepções;  Tipos básicos de Java incluindo o float, long e String;  A maior parte das bibliotecas de classes java.lang, java.util e java.io.
  • 7.
    12-Jul-2011 João Alves<jpralves@gmail.com> 7 LeJOS (II)  Trata-se de um ambiente de programação para o Lego NXT. Consiste em:  Firmware alternativo que inclui uma JVM;  Uma biblioteca de classes que implementa a API do leJOS NXJ;  Um linker especial que traduz as Java Classes para o formato binário aceite pelo NXT;  Ferramentas para instalar o Firmware, enviar aplicações, fazer debugging e outras funcionalidades de controlo do Brick;  Uma API para o PC para escrever programas que conseguem comunicar com o leJOS NXJ usando “Streams” de Java em cima de Bluetooth ou USB ou usando o protocolo LCP (Lego Communications Protocol).  O site oficial do software: http://lejos.sourceforge.net/nxj.php
  • 8.
    12-Jul-2011 João Alves<jpralves@gmail.com> 8 O Robot  Usa:  2 Motores  1 Sensor Volumétrico  1 Sensor de Luminosidade  Interface Bluetooth para comunicação
  • 9.
    12-Jul-2011 João Alves<jpralves@gmail.com> 9 O Robot (II)  A Programação do robot foi toda feita em Java usando o IDE Eclipse.  Foi implementado no robot 4 componentes principais:  Um Menu para controlar os parâmetros do robot;  Execução de comandos para o robot (predefinidos 4 tipos);  Persistência dos parâmetros;  Comunicação Bluetooth com o PC.
  • 10.
    12-Jul-2011 João Alves<jpralves@gmail.com> 10 Aplicação Desktop
  • 11.
    12-Jul-2011 João Alves<jpralves@gmail.com> 11 Aplicação Desktop (II)  A aplicação Desktop permite estender as funcionalidades do projecto possibilitando tratar e visualizar de forma gráfica os dados trocados entre o Brick NXT e o PC. Ao tratar a informação que é enviada pelo Brick no PC, torna-se possível apresentar a mesma de uma forma muito mais atractiva e recorrendo a bibliotecas que não existem ou não fazem sentido no Brick.  Na execução desta aplicação foram usadas as seguintes funcionalidades:  Multi-Threading;  Comunicação cliente/servidor com sockets TCP/IP;  Comunicação Bluetooth;  Suporte de Múltiplos Clientes;  Utilização da biblioteca gráfica SWING.
  • 12.
    12-Jul-2011 João Alves<jpralves@gmail.com> 12 Programação do NXT
  • 13.
    12-Jul-2011 João Alves<jpralves@gmail.com> 13 Programação do NXT (II) public void go() { int b = 0; twowheelrobot.forward(); while (! Button.ESCAPE.isPressed()) { distance = getDistanceSensor(); updateLCD(); if (sensorTouch.isPressed()) { twowheelrobot.stop(); b++; if (b > 3) break; } if (distance > minDistance) { twowheelrobot.forward(); } else { twowheelrobot.pressHorn(); divertRobot(); } } twowheelrobot.stop(); }
  • 14.
    12-Jul-2011 João Alves<jpralves@gmail.com> 14 Programação do NXT (III) private void divertRobot() { twowheelrobot.logMsg("REMARK=DivertingRobot"); while (distance < minDistance + MINDISTANCETHRESHOLD && ! Button.ESCAPE.isPressed()) { distance = getDistanceSensor(); updateLCD(); if (distance < minDistance + MINDISTANCETHRESHOLD) { avoidcol++; int i = randomGenerator.nextInt(50); if (i % 2 == 0) twowheelrobot.backleft(); else twowheelrobot.backright(); twowheelrobot.sleep(i * 10); } } }
  • 15.
    12-Jul-2011 João Alves<jpralves@gmail.com> 15 O Robot na prática  Demo
  • 16.
    12-Jul-2011 João Alves<jpralves@gmail.com> 16 Bibliografia  Juan Antonio Breña Moral, “Develop leJOS programs Step by Step ”, Version 0.6, Abril 2009  Juan Antonio Breña Moral, “Multithreading with Java leJOS ”, Version 0.1, Outubro 2008  Juan Antonio Breña Moral, “Bluetooth and leJOS ”, Version 0.1, Julho 2008  Jason Butka, “Installing Lejos on the NXT Mindstorm Using the Eclipse IDE and Introduction to Lejos / Java Programming”, Lawrence Technological University , 2008  Zhizhang Shen,”A Gentler Introduction to Mindstorm NXT Programming”, Dept. of Computer Science and Technology , Plymouth State University , 2009  Jose Solorzano et al , “leJOS NXJ: NXJ technology ” , Disponível em http://lejos.sourceforge.net/nxj.php  Ferrari, et al, “Programming LEGO® MINDSTORMSTM with Java”, Syngress Publishing , 2002  A.Terstegge , O. Bucker e B. Kuppers, “Robotik - Programming of Embedded Systems”, University of Applied Sciences , 22-Oct-2010  Kelleher , John, Namee, Brian Mac , “Introduction to Programming the Lego NXT Robot with Java”, School of Computing, Dublin Institute of Technology  Gerardo Oliveira, Ricardo Silva, Tiago Lira, Luis Paulo Reis , “Environment Mapping using the Lego Mindstorms NXT and leJOS NXJ ”, FEUP – LIACC, 2009  Tom Bickford , “Simple NXT Robot ”, Maine Robotics, 2008
  • 17.
    12-Jul-2011 João Alves<jpralves@gmail.com> 17 Robot Lego programado em Java  Q&A João Alves E-mail: jpralves@gmail.com Web: http://jpralves.net/