java e lego mindstorms paulo silveira guilherme silveira

27
Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Upload: thomaz-canedo-franco

Post on 07-Apr-2016

219 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Java e Lego Mindstorms

Paulo SilveiraGuilherme Silveira

Page 2: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Porque Mindstorms?

2500 US$, não programávelSem upgrade

200US$, programávelUse as peças de quando você era criança!

Page 3: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

O RCX

Hitachi 16Mhz 32 Kbytes RAM 3 portas de entrada, 3

de saída 1 porta de

comunicação infra-vermelha

Page 4: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Programando o Mindstorms

Programação visual, integração de peças

Apenas variáveis inteiras

Apesar de simples para programar, não é produtivo

Linguagem super limitada!

Page 5: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Necessidade de uma Linguagem Alto nível Multi Threading Orientação a Objetos Controle no uso da memória Ponto flutuante Suporte a comunicação com outros RCX

Page 6: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Java e Mindstorms

Tiny Virtual Machine Muito menor que J2ME

http://www.lejos.org Características:

17 Kbytes de firmware Multi Threading sem Garbage Collector API muito simples! Versão 2.0 com suporte

a sockets alto nível.

Page 7: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Mindstorm com Lejos

Upload de Firmware Camada que entende o bytecode do java

Compila o arquivo utilizando o formato do java 1.1, e as bibliotecas do lejos

Upload de todas as classes a serem utilizadas Pois não temos como fazer o “loading” de classes

dinâmico.

Page 8: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Motores e Sensores

API muito simples!

Motor.A.setPower(5);Motor.A.foward();

Sensor.S1.readBooleanValue();

Page 9: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Programação de ComportamentosIdéia desenvolvida no MIT: Um robô deve ter uma

série de comportamentos, como os humanos

Cada comportamento tem uma prioridade

Os de mais alta prioridade interrompem os de mais baixa (!)

Page 10: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

A inteface Behavior

public interface Behavior {

public boolean takeControl();

public void action();

public void suppress(); }

Page 11: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Exemplo de Comportamentos

Vamos criar um simples robô com 2 comportamentos: Vá sempre para a frente

(prioridade baixa) Caso ache algo no

caminho, vire-se para o outro lado!

Page 12: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

public class DriveForward implements Behavior { public boolean takeControl() {

return true; } public void suppress() {

Motor.A.stop(); Motor.C.stop(); } public void action() {

Motor.A.forward(); Motor.C.forward(); }

}

Comportamento de Exemplo

Page 13: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Evitando Obstaculospublic class Bump implements Behavior {

public boolean takeControl() {return Sensor.S2.readBooleanValue();

} public void suppress() {

Motor.A.stop(); Motor.C.stop();} public void action() {

Motor.A.backward();Motor.C.backward();

try {Thread.sleep(1000);}catch(Exception e) {}

Motor.A.stop();try{Thread.sleep(300);}catch(Exception e) {}Motor.C.stop();

}}

Page 14: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

class Main {public static void main(String [] args) {

Behavior b1 = new DriveFoward();Behavior b2 = new Bump()Behavior [] bArray = {b1, b2};Arbitrator arb = new Arbitrator(bArray); arb.start();

} }

O Arbitrador

Page 15: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Problemas simples, mas perigososNão podemos confiar nos

sensores e motores, eles estão muito sucetíveis a variações do ambiente!

O robô é um Sistema de Tempo real, onde o tempo é um fator crucial para a aplicação.

Page 16: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Calibração

Autocalibração: dois sensores de toque podem dar informações diferentes para a mesma pressão! O mesmo para motores!

while(true) {sensor = (short) s1.readValue(); s1Min = (sensor < s1Min) ? sensor : s1Min;s1Max = (sensor > s1Max) ? sensor : s1Max;Thread.yield();

}

Page 17: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Sistemas de Tempo Real

O tempo é crucial para a aplicação

O tempo de execução não deve exceder um certo X milisegundos (ou nanosegundos)! Caso ultrapasse, é

considerado um erro

Page 18: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Exemplos de STR

Usina nuclear As ações dependem

completamente do tempo de execução

Se a grafite demora para ser retirada da água com radiotividade, deve ser considerado como erro! Ou...

Page 19: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Sem real time não tem jeito!

Necessidade do Real Time Java para este tipo de tarefa

James Gosling é o líder de uma equipe que está concentrada em criar um java assim

http://www.rtj.org

Page 20: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Torres de Hanói

Page 21: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Aibo Cover!

Page 22: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Cubo colorido

Page 23: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Java não se limita a terra!

Page 24: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

O grande final

Page 25: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Java literalmente decola!

Page 26: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

Um exemplo

O acesso ao IR é feito indiretamente por HTTP!

Lego

Servidor

IR

O robô faz a vigilância da área, e informa ao servidor sobre o perímetro.

HTTP

Page 27: Java e Lego Mindstorms Paulo Silveira Guilherme Silveira

System.exit(0)

Mais informações:

http://lejos.orghttp://mindstorms.comJava Magazine #5