L o Daniela Ruggeri http://www.jia.it Stefano Sanna http://www.jugsardegna.org



Documenti analoghi
Programmazione dei robot

C o m p o n ib ilità e in te r o p e r a b ilità :

IRSplit. Istruzioni d uso 07/10-01 PC

La nuova generazione (NXT) di

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Istruzioni per l installazione

Il Software. Il software del PC. Il BIOS

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Il Sistema Operativo (1)

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Sistemi operativi. Esempi di sistemi operativi

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

MANUALE D USO SAREMA SF1000

Progetto: Servizio location based per la ricerca di punti di interesse

Client - Server. Client Web: il BROWSER

Introduzione al Linguaggio C

Implementazione di MVC. Gabriele Pellegrinetti

Motorola Phone Tools. Guida rapida

1. Il Client Skype for Business

MANUALE UTENTE. Computer Palmare WORKABOUT PRO

Approccio stratificato

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Panoramica: che cosa è necessario

Sharpdesk V3.3. Guida all installazione Versione

Visual basic base Lezione 01. L'ambiente di sviluppo

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

LIM OPEN SOURCE. Roberto Beligni.

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

VIRTUALIZZAZIONE. Docente: Marco Sechi Modulo 1

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Liceo Scientifico G. Galilei Trebisacce Anno Scolastico

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

Manuale per la configurazione di AziendaSoft in rete

MANUALE EDICOLA 04.05

I satelliti. Accesso Remoto

Installazione del Software. per lo Sviluppo di Applicazioni Java

NOZIONI BASE PER ESERCITAZIONI

TEST: Hardware e Software

Versione 2.0. Manuale d uso. Software per la gestione. degli applicativi Bticino. TiManager 03/07-01 PC

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

IBM SPSS Statistics per Windows - Istruzioni di installazione (Licenza per utenti singoli)

Altro esempio di HTML

EDICOLA MANAGER EM Importer

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Indruduzione... 1 Il modulo Bluetooth HC Il firmware... 3 Collegamento della scheda... 4 Software PC e l applicazione Android...

Nozioni di Informatica di base. dott. Andrea Mazzini

Le command line di Java

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Software di base. Corso di Fondamenti di Informatica

GPS MANAGER Manuale Utente

(Analisi, Estrazione ed invio via dei cedolini paga).

Come configurare l accesso ad Internet con il tuo telefonino GPRS EDGE* UMTS* (Sistema Operativi Microsoft Win95 e Win98).

START Easy GO! Il gestionale sempre in tasca! Procedura di aggiornamento. Documentazione utente Pagina 1 di 18

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

Rasip, MIDlet per scambio di messaggi SIP

Introduzione. Installare EMAS Logo Generator

View Mobile User s Guide

Il sistema di elaborazione Hardware e software

Compilatore risorse display grafico LCD serie IEC-line

Il sistema di elaborazione

Il Software e Il Sistema Operativo. Prof. Francesco Accarino IIS Altiero Spinelli A.S. 09/10

MODULO 02. Iniziamo a usare il computer

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Procedura Gestione Pratiche Sicurezza Cantiere

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

Guida Installazione esam

VISUALFLEET Software Overview

IBM SPSS Statistics per Mac OS - Istruzioni di installazione (Licenza per sito)

EDICOLA MANAGER EM Importer

Esercitazione 4 JDBC

1. INTRODUZIONE 2. REQUISITI MINIMI

Programmazione in Java Parte I: Fondamenti

In un modello a strati il SO si pone come un guscio (shell) tra la macchina reale (HW) e le applicazioni 1 :

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

DFD FAQ FIRMA DIGITALE

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

La struttura dati ad albero binario

Laboratorio di Ingegneria del software Sistema di controllo di un ascensore Requisiti preliminari

EL-USB-2 - Datalogger con interfaccia USB

Laboratorio di Ingegneria del software Sistema di controllo di un ascensore Requisisti preliminari

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Architettura di un sistema operativo

UTILIZZO DEI COOKIES (informativa conforme al Provvedimento del Garante Privacy del 8 Maggio 2014)

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Istruzioni di installazione di Intel Utilities

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

Collegamento remoto vending machines by do-dots

ShellPictionary. Sistema operativo Microsoft Windows 98 o superiore Libreria SAPI e voce sintetica Casse audio

Parte V. Sistemi Operativi & Reti. Sistemi Operativi. Sistemi Operativi

Architettura Hardware e Software di A-Ratio! Davide Marano!

PROCEDURA DI INSTALLAZIONE DRIVER WINDOWS 8 (32 O 64 BIT)

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Il web server Apache Lezione n. 3. Introduzione

hiclot Manuale utente del software

Transcript:

Java & Lego Mindstorms L o Daniela Ruggeri http://www.jia.it Stefano Sanna http://www.jugsardegna.org 1

LEGO Mindstorms LEGO... non ha bisogno di presentazioni! :-) Mindstorms Robotics Invention System Sviluppato in collaborazione con il MIT, il RIS è il primo esempio di intelligent brick totalmente programmabile CPU Hitachi 8-bit (16 Mhz) 16 Kb di ROM, 32 Kb di RAM 3 porte di input per i sensori 3 porte di output per i motori un display LCD a 5 caratteri e una porta di comunicazione a infrarossi. 2

LEGO Java Operating System Versione stabile: lejos_win32_2_1_0.zip Versione con bug: lejos.3.0.0-rc2-win32.zip scaricabili dal sito http://lejos.sourceforge.net/ 3

DIRECTORY LEJOS bin contiene gli eseguibili classes sorgenti java common contiene i files che sono usati per generare il codice per il linker e la virtual machine. docs documentazione examples esempi gameboy_impl file per la piattaforma Nintendo Game Boy jtools codice java base per il computer e codice del linker lejos, usa i file di common/*.db. 4

DIRECTORY LEJOS rcx_impl contiene codice C specifico per il firmware RCX. regression contiene tutta una serie di test di regressione per testare lejos tools contiene codice C per creare tools LeJOS unix_impl Questa directory contiene il codice necessario a creare un tool di emulazione Unix. vmsrc contiene codice C per la virtual machine. 5

Librerie jar rcxrcxcomm.jar gestione sensori, motori e comunicazione da RCX al pc pcrcxcomm.jar gestione comunicazione da pc a RCX 6

API Lejos 7

Archittetura lejos 8

Comandi per RCX lejosfirmdl (nuovo firmdl) fa caricare il firmware in RCX lejosc (nuovo lejosjc) compila i sorgenti java lejosrun trasferisce il programma binario in RCX tramite la torre lejos trasforma i programmi in file binari e li trasferisce in RCX tramite la torre IR Tower 9

Trasferimento codice 10

Inventorbot (roby) 11

Specifiche di programma 1. Fare in modo che il robot emetta dei suoni e alzi il cappello quando viene toccata la mano 3. Fare in modo che il robot emetta suoni diversi e giri in sensi diversi a secondo la durata della pressione esercitata sulla mano 5. Fare in modo che il robot saluti se viene colpito da una luce in faccia 12

Che serve sapere di Java? La base del linguaggio Gli eventi a delega I thread. 13

Calcolo del tempo josx.util.timer Oggetto Timer per gestire un intervallo di tempo josx.util.timerlistener Interfaccia ascoltatrice usata con la classe Timer In particolare il metodo timedout() dell interfaccia viene chiamato allo scadere del tempo fissato. 14

Cambiamento stato sensore osx.platform.rcx.sensor Astrazione di un sensore. In particolare Sensor.S1 rappresenta il sensore collegato alla porta 1 josx.util.sensorlistener Interfaccia ascoltatrice usata con la classe Sensor Il metodo statechanged(sensor asource, int aoldvalue, int anewvalue) per cambiamento stato del sensore. osx.platform.rcx. SensorCostant Interfaccia usata con la classe Sensor di tutte le costanti riguardanti un sensore 15

Altre classi usate osx.platform.rcx.motor Astrazione di un motore. In particolare Motor.A e Motor.C rappresentano i motori collegati alle porte A e C osx.platform.rcx.button Astrazione di un bottone RCX. In particolare nell esempio è utilizzato Button.RUN ma esistono anche Button.VIEW e Button.PRGM osx.platform.rcx.sound Classe usata per emettere suoni 16

Realizzazione calcolo del tempo // questa variabile vale true se il tempo trascorso è minore di 3 secondi boolean timeless3 = true; /* Creazione istanza della classe Timer associandola alla lista ascoltatrice che conterrà il tempo che passa */ Timer timer = new Timer(3000,new TimerListener(){ // trascorsi 3000 millisecondi viene chiamato questo metodo public void timedout() { timeless3 = false; } }); 17

Stati Sensore di contatto Sensor.S1.activate(); // attiva il sensore collegato alla porta 1 Sensor.S1.setPreviousValue (0); // imposta valore iniziale del sensore a 0 (rilasciato) // imposta tipo di sensore (sensore di contatto) e valori in output (booleani) Sensor.S1.setTypeAndMode (SENSOR_TYPE_TOUCH, SENSOR_MODE_BOOL); Sensor.S1.addSensorListener(new SensorListener() { // questo metodo viene chiamato quando il sensore cambia dallo stato premuto a quello // rilasciato e viceversa. public void statechanged(sensor asource, int aoldvalue, int anewvalue) { if (aoldvalue == 1 anewvalue == 0) { // sensore in stato di premuto. Start del timer timeless3=true; timer.start(); return; } 18

Durata meno di 3 secondi timer.stop(); try { if (timeless3) { Sound.playTone(2100,300); Motor.C.forward(); Thread.sleep(1000); Motor.C.stop(); Sound.beep(); Motor.A.forward(); Thread.sleep(2000); Motor.A.stop(); Motor.C.backward(); Thread.sleep(1000); Motor.C.stop(); } 19

Durata più di 3 secondi else { Sound.systemSound(true,3); Motor.C.backward(); Thread.sleep(1000); Motor.C.stop(); Sound.systemSound(true,4); Motor.A.backward(); Thread.sleep(2000); Motor.A.stop(); Motor.C.forward(); Thread.sleep(1000); Motor.C.stop(); Sound.systemSound(true,5); timeless3=true; } 20

Stati Sensore ottico Sensor.S3.activate(); // attiva il sensore collegato alla porta 1 Sensor.S3.setPreviousValue (0); // imposta valore iniziale del sensore a 0 // imposta tipo di sensore (sensore ottico) e valori in output (percentuale) Sensor.S3.setTypeAndMode (SENSOR_TYPE_LIGHT, SENSOR_MODE_PCT); Sensor.S3.addSensorListener(new SensorListener() { // questo metodo viene chiamato quando il sensore è colpito dalla luce public void statechanged(sensor asource, int aoldvalue, int anewvalue) { if (anewvalue > 80) { Motor.A.forward(); Thread.sleep(2000); Motor.A.stop(); } 21

Comandi shell per RCX set classpath=.;c:\lejos\lib\pcrcxcomm.jar; c:\lejos\lib\rcxrcxcomm.jar set path=c:\jdk1.4.0\bin;c:\lejos\bin;%path% set RCXTTY=usb lejosc Inventorbot.java lejos Inventorbot 22

LEGO Mindstorms NXT Caratteristiche hardware: Doppio microcontrollore: ARM7 32bit, 256 Kbyte FLASH, 64 Kbyte RAM AVR 8bit, 4 Kbyte FLASH, 512 Byte RAM 4 ingressi, 3 uscite Interfacce USB e Bluetooth Display grafico 100x64px Audio playback 8KHz Possibilità di realizzare network di quattro NXT (master + 3 slave) 23

NXT'reme: è tutto open! LEGO mette a disposizione della comunità degli sviluppatori risorse per implementare soluzioni originali: Aggiornamenti firmware Documentazione dettagliata dell'interfaccia hardware e delle porte I/O Documentazione dettagliata del protocollo di comunicazione attraverso Bluetooth Strumenti di sviluppo 24

WebNXT: controllare un robot via web Obiettivo: controllare da remoto un robot attraverso un browser web Cosa serve l'ultima versione Java Standard Edition un JSP/Servlet container una maschera JSP + un Bean Java alcune librerie Java per comunicare con il robot via Bluetooth un browser web 25

Java Server Pages Tecnologia della Sun. Simile a Active Server Pages della Microsoft JSP permette di creare pagine HTML e DHTML. Utile per costruire pagine che contengono informazioni presenti su altre pagine, prelevate da un database acquisite da input, ecc. (per esempio interagire via bluetooth con un robot) 26

Architettura 27

Prodotti usati Java Standard Edition versione 5.0 http://java.sun.com/javase/downloads/index.jsp JSP/Servlet container Tomcat 5.5 http://tomcat.apache.org/ Alex.jsp + il bean WebNXT.java Librerie java icommand.jar e RXTXcomm.jar e libreria nativa rxtxserial.dll http://lejos.sourceforge.net/ http://www.rxtx.org Il browser Internet Explorer o Firefox 28

Cosa è necessario fare Creare collegamento bluetooth con NXT Impostare nel file icommand.properties parametro NXTCOMM=<porta bluetooth> Copiare il file icommand.properties nella directory Tomcat Creare sotto la directory copiare il servizio robot sotto la directory webapps di tomcat Copiare la libreria nativa rxtxserial.dll nella directory \bin di Tomcat Preparare la webapplication robot con Alex.jsp e WebNXT.class Far partire Tomcat Caricare la pagina http://localhost:8080/robot/alex.jsp 29

WebNxt: Classi usate command.nxtcomm.nxtcommand Classe per la spedizione e ricezione comandi da /per l'nxt command.nxtcomm.nxtprotocol Classe contenente i comandi da/per l'nxt 30

Classe NXTCommand Classe che contiene tutti i comandi da/per NXT spediti in questo formato Byte 0 = parte LSB lunghezza messaggio Byte 1 = parte MSB lunghezza messaggio Byte 2 = Tipo comando (es. comando sistema con risposta) Byte 3 = Comando (es. riproduci un suono contenuto in un file) Byte 4...Byte n (dati necessari al comando, es. nome del file contenente il suono da riprodurre) 31

Tipi di comandi (NXTProtocol) Tipo DIRECT_COMMAND_REPLY Byte Descrizione 0x00 Comando diretto con risposta SYSTEM_COMMAND_REPLY 0x01 Comando di sistema con risposta REPLY_COMMAND 0x02 Comando di risposta DIRECT_COMMAND_NOREPLY 0x80 Comando diretto senza risposta SYSTEM_COMMAND_NOREPLY 0x81 Comando di sistema senza risposta 32

Comandi di sistema (NXTProtocol) Tipo Byte Descrizione OPEN_READ 0x80 Apri file in lettura OPEN_WRITE 0x81 Apri file in scrittura READ 0x82 Leggi WRITE 0x83 Scrivi CLOSE 0x84 Chiude connessione DELETE 0x85 Cancella file FIND_FIRST 0x86 Trova il primo file nella directory e con il filtro specificati FIND_NEXT 0x87 Trova il prossimo file nella directory e con il filtro specificati GET_FIRMWARE_VERSION 0x88 Ritorna informazioni sul firmware SET_BRICK_NAME 0x98 Imposta nome NXT GET_DEVICE_INFO 0x9B Ottiene informazioni sul dispositivo NXT DELETE_USER_FLASH 0xA0 Cancella le informazioni nella memory Flash POLL_LENGTH 0xA1 Ottiene la lunghezza di messaggio di risposta ad un comando POLL 0xA2 Ottiene il messaggio di risposta ad un comando 33

Comandi diretti (NXTProtocol) Tipo Byte Descrizione START_PROGRAM 0x00 Lancia un programma nell'nxt STOP_PROGRAM 0x01 Ferma un programma nell'nxt PLAY_SOUND_FILE 0x02 Riproduce un suono di un file PLAY_TONE 0x03 Riborduce un tono SET_OUTPUT_STATE 0x04 Imposta parametri per un motote SET_INPUT_MODE 0x05 Imposta parametri per un sensore GET_OUTPUT_STATE 0x06 Ottiene parametri di un motote GET_INPUT_VALUES 0x07 Ottiene parametri di un sensore RESET_SCALED_INPUT_VALUE 0x08 Azzera impostazioni di un sensore 34

Comandi diretti (NXTProtocol) Tipo Byte Descrizione MESSAGE_WRITE 0x09 Spedisce un messaggio ad una casella inbox NXT RESET_MOTOR_POSITION 0x0A Azzera contagiri del motore GET_BATTERY_LEVEL 0x0B Ritorna il livello della batteria STOP_SOUND_PLAYBACK 0x0C Ferma la riproduzione di un suono KEEP_ALIVE 0x0D Lascia acceso l'nxt LS_GET_STATUS 0x0E Ritorna lo stato del sensore a ultrasuoni LS_WRITE 0x0F Imposta informazioni al sensore a ultrasuoni LS_READ 0x10 Legge informazioni di un sensore a ultrasuoni GET_CURRENT_PROGRAM_NAME 0x11 Ottiene il nome del programma che sta girando 35

Es. Ottiene versione firmware Comando spedito Byte 0 = 0x02 LSB Byte 1 = 0x00 MSB Byte 2 = 0x01 tipo comando sistema con risposta Byte 3 = 0x88 Comando GET_FIRMWARE_VERSION Comando ricevuto Byte 0 = 0x06 LSB Byte 1 = 0x00 MSB Byte 2 = 0x02 tipo comando risposta Byte 3... Byte 8 = Dati Firmware 36

La pagina Alex.jsp <jsp:usebean id="robotbeanid" scope="session" class="lego.webnxt" /> <form method="post" action="alex.jsp"> <% if (request.getparameter("chiudi")!= null) robotbeanid.close(); %> <jsp:setproperty name="robotbeanid" property="*" /> <input type="submit" name="avanti" value="avanti" > <input type="submit" name="stop" value="stop"><br> <input type="submit" name="indietro" value="indietro"> <input type="submit" name="saluta" value="saluta"><br> <input type="submit" name="chiudi" value="chiudi Connessione Bluetooth"><br> </form> 37

Risultato web 38

Comando Avanti e Indietro public void setavanti(string newvalue) throws Exception { System.out.println("avanti: "); NXTCommand.setVerify(true); Motor.B.forward(); Motor.C.forward(); } public void setindietro(string newvalue) throws Exception { NXTCommand.setVerify(true); Motor.B.backward(); Motor.C.backward(); } 39

Comando Saluta e Chiudi public void setsaluta(string newvalue) throws Exception { NXTCommand.setVerify(true); Motor.A.forward(1000); Speaker.playSoundFile("ciao.rso",false); } public void close() throws Exception { NXTCommand.close(); Thread.sleep(10000); } 40

JNXT 41

JNXT: un controller gestuale Obiettivo: controllare un robot attraverso gesti (o tratti) anziché con dei pulsanti: per rendere pù immediata l'interazione uomomacchina (il robot interpreta i gesti umani dell'utente anziché costringere questi a imparare un nuovo telecomando!) rendere i robot pilotabili da utenti con disabilità motorie Componenti software: Applicazione Java ME su PDA Windows Mobile Libreria di comunicazione verso l'interfaccia Bluetooth (Serial Port Profile) 42

Cosa occorre Windows Mobile: Java ME CLDC/MIDP gestisce l'input attraverso touch screen permette il collegamento a dispositivi Bluetooth permette di scrivere applicazioni per PDA permette di riutilizzare numerose librerie scritte per i telefoni cellulari Applicazione e libreria di comunicazione: JNXT per l'interazione gestuale icommand (scritto da Brian Bagnall) per il controllo low-level del NXT 43

Il touchscreen rileva i segni tracciati dall'utente icommand JNXT Il robot riceve i comandi via Bluetooth JNXT traduce i tratti in comandi di alto livello (avanti, indietro...) e utilizza icommand per i controlli a basso livello sui motori (Motore A avanti lentamente, Motore B indietro... 44

JNXT: alcune problematiche Tecniche: Porting di icommand su CLDC Scelta della VM Supporto JSR 82 (Bluetooth API) su Windows Mobile Emulazione input pen-based su desktop Semantiche: Attribuzione di un significato ai tratti sullo schermo Visualizzazione dei riscontri ottenuti dai sensori 45

Porting di icommand su CLDC icommand è modellato utilizzando esclusivamente classi Java 1.1: il porting è stato molto semplice: Properties: si è optato per una Hashtable popolata automaticamente in fase di inizializzazione della MIDlet SerialPort: Su Windows Mobile: CommConnection sostituisce le classi di JavaComm Su Symbian OS: StreamConnection sarà utilizzata come connessione sullo schema btspp La libreria per l'algebra in virgola mobile è ancora in fase di scelta (probabilmente verranno scritte alcune classi ad hoc) 46

Scelta della VM IBM offre una coppia di runtime environment (CDC/PP + CLDC/MIDP) di ottima qualità per Windows Mobile, Linux e PalmOS (solo CLDC) Vantaggi (versione CLDC): molto economica GUI ben integrata con il sistema operativo supporto: JSR 75, JSR 135, CommConnection input pen-based 47

Supporto JSR 82 La VM di IBM non fornisce supporto alla JSR 82: non è possibile gestire lo stack Bluetooth all'interno dell'applicazione Java ME Il supporto nativo alle connessioni seriali permette di sfruttare i servizi del sistema operativo per il discovery e il pairing dei dispositivi 48

Bluetooth Serial Port Profile 49

Accesso alla porta seriale L'attivazione della CommConnection attiva la richiesta di autorizzazione da parte dell'utente e la scelta del device Bluetooth da utilizzare: CommConnection commport; commport = (CommConnection) Connector.open("comm:COM6;baudrate=115200"); 50

Note sul Wireless Toolkit Il WTK fornisce emulatori phone oriented, senza supporto per l'input via penna. Per abilitarlo è sufficiente impostare un flag all'interno del file WTK_DIR\wtklib\devices\DEVICE_NAME\DEVICE_NAME.properties ad esempio: c:\wtk23\wtklib\devices\defaultcolorphone\defaultcolorphone.properties touch_screen=true 51

Semantica dei gesti /1 Vai avanti Torna indietro STOP 52

Semantica dei gesti /2 Avanti-sinistra Avanti-destra Torna indietro 53

Semantica dei gesti L H M L: lunghezza della retta M = H/W: coefficiente angolare della retta X2-X1: direzione (destra-sinistra) Y2-Y1: direzione (avanti-indietro) W 54

JNXT: sematica dei gesti Lunghezza = velocità motori VERSO = Y_ARRIVO > Y_PARTENZA Angolo di sterzata = coefficiente angolare 55

Pen-based input su MIDP Il Canvas su MIDP in ambiente PDA supporta la gestione degli eventi relativi al puntatore (penna): haspointerevents() e haspointermotionevents() permettono di conoscere a runtime le caratteristiche del dispositivo pointerpressed(), pointerdragged() e pointerreleased() sono i metodi di callback invocati quando lo stato del puntatore cambia. I metodi ricevono le coordinate x,y del punto al quale l'evento si riferisce 56

Il codice su JNXT /1 public void pointerpressed(int x, int y) { firstx = x; firsty = y; released = false; } public void pointerreleased(int x, int y) { float Y = (firsty y); float m = float X = (x - firstx); Y / X; lastm = m; getdirection(m); lastx = x; lasty = y; repaint(); } public void pointerdragged(int x, int y) { lastx = x; lasty = y; repaint(); } 57

Il codice su JNXT /2 private void getdirection(float m) { boolean forward = lasty < firsty; boolean right = lastx > firstx; m = Math.abs(m); if (m < 0.8) { lastmessage = "STOP"; listener.stop(); } 58

Evoluzioni JNXT sarà sviluppato per supportare: feedback sul PDA in base alle rilevazioni dei sensori (flash, colori, vibrazione) possibilità di tracciare percorsi curvilinei sostituzione della penna con un accelerometro maggiore interazione con altri dispositivi Bluetooth: RFID reader, SMS machine... 59

Riferimenti JNXT Pagina di JNXT: icommand: http://lejos.sourceforge.net/ IBM Virtual Machine http://www.gerdavax.it/jnxt http://www.ibm.com/developerworks/websphere/zon es/wireless/weme_eval_runtimes.html Java ME su PDA http://www.gerdavax.it/data/pda_jmdf2006.pdf 60

Un libro di prossima uscita Maximum Lego NXT: Building Robots with Java Brains Brian Bagnall Variant Press, 2007 ISBN: 0973864915 61

Grazie per l'attenzione. 62