Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26...

57
Lego Mindstorm Cenni sulla programmazione JAVA - Lego NXT Raffaele Grandi em@il :raffaele .grandi @unibo.it lar .deis .unibo.it /people /rgrandi DEIS - LAR 26 aprile 2012 Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 1 / 57

Transcript of Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26...

Page 1: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Lego MindstormCenni sulla programmazione

JAVA - Lego NXT

Raffaele Grandi

em@il :[email protected]

lar .deis.unibo.it/people/rgrandi

DEIS - LAR

26 aprile 2012

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 1 / 57

Page 2: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Overview

1 Introduzione

1 storia2 elementi del kit base3 motori e sensori

2 Microcontrollore

3 Studio del modello e utlizzo pratico

1 Esempi

4 Programmazione

1 Linguaggi grafici2 Java - Lejos - Eclipse

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57

Page 3: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Storia

Lego Mindstorm e una linea di prodotti

della LEGO nata nel 1998 e orientata al-

la progettazione e modellazione di sistemi

elettromeccanici e robotici. Nel 2006 la

LEGO immette sul mercato la nuova ge-

nerazione di Lego Mindstorm (LMS) de-

nominata NXT con maggiore capacita e

versatilita.

Figura: Kit base LMS-NXT

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 3 / 57

Page 4: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Elementi

Lego Mindstorm combina principalmente 3 tipi di elementi:

1 Lego Technic : pensati per la costruzione di strutture meccaniche piu omeno complesse, comprensive di leve, catene ed ingranaggi.

2 Mattoncini programmabili (la novita geniale della LEGO) : mattoniintegrabili fisicamente con i lego Technic “classici” che hanno pero all’internoun microcontrollore programmabile, uno scherno LCD e delle prese sui latidove collegare motori e sensori appositamente studiati.

3 Motori e sensori : dispositivi integrabili con i mattoncini Technic ecollegabili al brick di controllo, che implementano determinate capacita.

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 4 / 57

Page 5: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Motori e Sensori

Motori con controllo di velocitae di posizione integrato

Sensori di luce, sensori audio,

ad ultrasuoni per il controllo

della posizione, infrarossi,

tattili, di colore, giroscopici...

Figura: NXT con sensori e motori

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 5 / 57

Page 6: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Mindstorm RCX

519 pezzi LEGO Technic

3 servomotori, con sensore dirotazione integrato e feedback peril controllo di precisione

Sensore luminoso, capace dirilevare colori e intensita luminosa

Sensore tattile

Mattoncino programmabile RCX

Figura: RCX con sensori e motori

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 6 / 57

Page 7: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Mattoncino di controllo RCX

“Motore” del Lego Mindstorm RCX

contiene un microcontrollore Renesas H8/300 a 8-bit con 32K di RAM perl’immagazzinamento del firmware e del programma utentedotato di porta IR per comunicare col PC o con altri RCXdotato delle porte per la connessione dei motori e dei sensoripredisposto per l’alimentazione via cavo e a batterie

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 7 / 57

Page 8: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Mindstorm NXT

619 pezzi LEGO Technic

3 servomotori

molto piu grandi dei precedenti

2 sensori tattili

Sensore di colore

Sensore audio

Sensore di prossimita a ultrasuoni

Mattoncino programmabile NXT

Figura: Esempio costruttivo

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 8 / 57

Page 9: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Mattoncino di controllo NXT

Mattoncino programmabile NXT

contiene un processore a 32 bit AtmelAT91SAM7S256 a 48 MHz (ARM7), con 256kflash e 64k RAMun coprocessore 8 bit Atmel ATmega48 a 8 MHz(RISC a 8 bit), con 4k flash e 512 byte RAMuno schermo LCD con una risoluzione di 60x100pixel

una porta USB 2.0 e connettivita Bluetooth

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 9 / 57

Page 10: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Modellizzazione

Praticamente tutti i tipi di

sistemi integrati

elettromeccanici esistenti nella

vita reale (come gli elevatori o i

robots industriali) possono

essere modellati con Lego

Mindstorms.

Figura: Braccio robotico

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 10 / 57

Page 11: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Comportamento

Avere a disposizione questo tipo di dispositivi ci permette di costruirerobots che interagiscono con l’ambiente circostante e che eseguonodei task operativi in base a cio che apprendono durante il lorofunzionamento, secondo le procedure sviluppate all’interno delprogramma.

Possono essere simulati comportamenti complessi tramite appositosoftware

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 11 / 57

Page 12: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Esempi costruttivi 1/4

Cassaforte: uno degli esempipiu classici di automa a statifiniti (ASF)

Figura: Schema di un ASF

Figura: Cassaforte a combinazione RCX

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 12 / 57

Page 13: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Esempi costruttivi 2/4

Robot di tipo differente cheimpiegano gli algoritmi piudiversi

Figura: Robot ritrattista Figura: Rubik cube solver

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 13 / 57

Page 14: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Esempi costruttivi 3/4

Robot che ci riguardano piu davicino per le aree di roboticamobile e controllo

Figura: Controllo di un pendolo inverso in

movimento (tipo Segway)Figura: Line follower

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 14 / 57

Page 15: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Esempi costruttivi 4/4

Oppure:

algoritmi di collaborazione distribuitasistemi multi-agentealgoritmi di apprendimentoalgoritmi di intelligenza artificiale...

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 15 / 57

Page 16: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Metodi di programmazione

La programmazione dei LEGO e possibile utilizzando due metodologie:

1 Programmazione grafica

2 Programmazione strutturata via codice

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 16 / 57

Page 17: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Linguaggi grafici

Forniti di default dalla Lego:

RCX Code: incluso nella versione commerciale del kit RCX e in vendita neinegozi di giocattoli;ROBOLAB: basato su LabVIEW e sviluppato dalla Tufts UniversityNXT-G: derivato da RoboLab e fornito in dotazione nella scatola NXT

Figura: Screenshot di NXT-G

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 17 / 57

Page 18: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazione strutturata

Avviene tramite software di terze parti consentendo maggiore:

flessibilita

riusabilita

espandibilita

espressivita

velocita di esecuzione

integrazione con applicazioni e sistemi esistenti

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 18 / 57

Page 19: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Software in uso

Linguaggi di programmazione alternativi utilizzati:

QuiteCC and C++ sotto sistema operativo BrickOS (precedentemente LegOS)Visual BasicPythonJava su “sistema operativo” LeJOS (o TinyVM) v. 0.9.1 (feb-2012)

Ognuno di questi linguaggi permette l’interfacciamento con ilmicrocontrollore, previa modifica del firmware

La modifica del firmware tramite LeJOS avviene attraverso un appositoprogramma incluso nel pacchetto del nuovo firmware

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 19 / 57

Page 20: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

LeJOSLa scelta

LeJOS e un firmware sostitutivo per il mattone Lego MindstormsRCX e NXT.

Include una Java Virtual Machine, che permette di programmare irobot LMS mediante l’utilizzo del linguaggio di programmazione Java.

Vaste librerie di codice che supportano varie funzioni di alto livelloquali navigazione e automatismo basato algoritmi comportamentali

Al momento risulta la struttura piu completa per la programmazionedei Lego MS

OpenSource: http://lejos.sourceforge.net/

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 20 / 57

Page 21: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Cosa offre LeJOS NXJ

1 Object oriented language (Java)

2 Pre-emptive threads (cambio di contesto forzato)

3 Arrays, including multi-dimensional

4 Recursion

5 Synchronization

6 Exceptions

7 Java types including float, long, and String

8 Most of the java.lang, java.util and java.io classes

9 A well-documented Robotics API

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 21 / 57

Page 22: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrated Development EnvironmentIDE: Ambienti integrati per lo sviluppo del software

NetBeans

ambiente di sviluppo multi-linguaggio scritto interamente in Java (Swing) nato nelgiugno 2000.scelto dalla Sun Microsystems come IDE ufficialeplug-in oriented

Eclipse

ambiente di sviluppo multi-linguaggio scritto in Java (SWT)progetto opensource sviluppato da una vasta comunita sotto la tutela della EclipseFoundationplug-in oriented

Noi utilizzeremo Eclipse ma e possibile utilizzare anche NetBeans, entrambi gliambienti sono dotati del plug-in specifico per LeJOS

inoltre e possibile lavorare tramite linea di comando

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 22 / 57

Page 23: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

EclipseRisorse per la programmazione

Eclipse e un ambiente di sviluppomultipiattaforma

(Linux - Windows e Mac)

Lo si scarica gratuitamente dawww.eclipse.org/downloads

La versione a cui siamo interessati eEclipse Classic 3.7.2 (˜173 MB)

viene cosı installato tutto l’ambiente di sviluppo

per chi avesse Ubuntu e disponibile anche nel

repository ufficiale

Figura: Eclipse Downloads site

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 23 / 57

Page 24: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

EclipseL’ambiente di lavoro

Una volta installato Eclipse e caricato,l’interfaccia appare come nella figura afianco:

Area di lavoro

Gerarchia dello spazio di lavorocontenente i packages e le classi

Console di output

Menu per la gestione delle

opzioni

Figura: Eclipse Interface

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 24 / 57

Page 25: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Risorse su EclipseDa dove imparare

1 Google ;-)

2 Eclipse Community :http://www.eclipse.org/community/

3 Libro:

1 Eclipse for Dummies

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 25 / 57

Page 26: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrazione Java - LeJOSAPI LeJOS

Le API di LeJOS sono state prodotte attraverso la compilazioneautomatica utilizzando il tool javadoc e si possono trovare

all’indirizzo http://lejos.sourceforge.net/nxt/nxj/api/index.html

help di Eclipse dopo aver installato il plug-in relativo

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 26 / 57

Page 27: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrazione Java - LeJOSAPI LeJOS - overview

Figura: LeJOS API Overview

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 27 / 57

Page 28: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrazione Java - LeJOSAPI LeJOS - blocchi concettuali

Osservando le API ci si accorge che i packages si dividono a grandi linee in 3macro blocchi concettuali:

1 Packages mutuati direttamente dal linguaggio JAVA (java.* - javax.*)

2 Packages che riguardano la gestione delle piattaforma NXT-RCX (lejos.*)

3 Packages di supporto specifici per la robotica (lejos.robotics.*)

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 28 / 57

Page 29: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrazione Java - LeJOSAPI LeJOS - il linguaggio

Packages mutuati direttamente dal linguaggio JAVA (java.* - javax.*)

1 relative al core del linguaggio (java.lang - java.io - java.util -java.net)

2 relative alla grafica (java.awt - java.awt.geom)3 relative alla comunicazione bluetooth (javax.bluetooth -

javax.microedition)

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 29 / 57

Page 30: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrazione Java - LeJOSAPI LeJOS - la piattaforma

Packages che riguardano la gestione delle piattaforma NXT-RCX (lejos.*)

1 relative alla gestione dei motori, sensori, batteria ... (lejos.nxt)2 relative alla gestione delle comunicazioni (lejos.nxt.comm -

lejos.nxt.remote)

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 30 / 57

Page 31: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Integrazione Java - LeJOSAPI LeJOS - la robotica

Packages di supporto specifici per la robotica (lejos.robotics.*)

1 supporto alla navigazione (lejos.robotics.navigation)2 supporto alla localizzione (lejos.robotics.localization)3 supporto alla “Subsumption Architecture” per la gestione dei Behaviour

(lejos.robotics.subsumption)

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 31 / 57

Page 32: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

LeJOSRisorse

@

Sito : http://lejos.sourceforge.net

Tutorial :http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm

Forum : http://lejos.sourceforge.net/forum/index.php

Libri :

free: “Develop leJOS Programs Step by Step“ , JuanAntonio Brena Moral (ebook - google)...

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 32 / 57

Page 33: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Behaviour based roboticscenni

In LeJOS esiste una tipologia di programmazione basata suicomportamenti che utilizza la Subsumption Architecture (SA)

SA e una architettura logica fortemente legata alla gestione deicomportamenti nell’ambito della robotica “autonoma”. Il termine estato introdotto da Rodney Brooks (professore di robotica al MIT) ecolleghi nel 1986

Il concetto di sussunzione e usato nella rappresentazione dellaconoscenza, nella logica matematica, nelle ontologie ed in altrediscipline scientifiche, per indicare una classificazione gerarchizzante(specializzazione) per mezzo di sostituzione, ricondurre un concettonell’ambito di uno piu ampio che lo comprende.

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 33 / 57

Page 34: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Subsumption Architecture (SA)

SA viene quindi vista come una via per decomporre la struttura diun comportamento complesso in una sottostruttura dicomportamenti piu semplici correlati tra loro che possono esseremodellati in base ad idee generalizzate.

Ad ogni comportamento “semplice” viene associato un livello diastrazione

Ogni livello ha un obiettivo ben preciso che l’agente deve portare atermine

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 34 / 57

Page 35: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Subsumption Architecture (SA)Esempio

Ad esempio l’azione prendi oggetto A viene svolta assumendo che leazioni

individua oggetto A

posizionati vicino all’oggetto A

siano state portate a termine. A loro volta queste implicano che

muoviti verso oggetto A

sia state conclusa.Eventualmente e possibile che questa azione sia stata possibile utilizzandouna sotto struttura comportamentale

evita oggetti non-A

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 35 / 57

Page 36: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Subsumption ArchitectureStruttura

Architettura con struttura bottom-up

sono gli eventi che si verificano agli strati inferiori dell’architettura cheoffrono la possibilita a quelli superiori di essere attivati e portati aterminegli strati decisionali piu bassi sono quelli che hanno contatto con lastruttura “fisica” del robot

ci si interfaccia con le API di controllo: l’attuatore visto come unarisorsa softwaremaggiore reattivita: i task inferiori prendono decisioni dirette

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 36 / 57

Page 37: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Comportamento

Ogni comportamento viene visto come entita dotata di 3caratteristiche funzionali:

1 condizione di attivazione2 attivita da svolgere in fase attiva3 attivita da svolgere in caso di soppressione

Si utilizza un arbitro (o supervisore) che identifica la condizione diattivazione del comportamento ed esegue la relativa azione, compresal’eventuale soppressione se altre condizioni si verificano con unapriorita di esecuzione maggiore

in LeJOS l’arbitro e un thread che utilizza un array di comportamentiin ordine di priorita crescente con la posizione nell’array

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 37 / 57

Page 38: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Vantaggi, Svantaggi e Soluzioni

Vantaggi:

maggiore modularitaogni livello lavora direttamente sulle risorse del proprio ambienteogni livello percepisce direttamente il proprio obiettivo

Svantaggi:

incapacita di avere piu livelli contemporanei dato che gli inneschi diuno possono interferire con quelli di un altrodifficolta di selezione dell’azione da eseguire in sistemi altamentedistribuiti attraverso la sola capacita di inibizione/soppressione di uncomportamento

Soluzioni:

eventuale programmazione mista ad esempio behaviour-planning perla selezione di comportamenti concorrenti

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 38 / 57

Page 39: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

ProgrammazionePremessa

All’interno del pacchetto lejos-nxj sono presenti nella cartellaprojects/samples degli esempi da consultare

Sono esempi semplici che illustrano il funzionamento di base delsistema compresi l’utilizzo dei sensori e dei motori

Gli esempi possono essere facilmente ampliati per integrarefunzionalita avanzate e capacita di gestione piu articolata

L’eventuale codice sviluppato viene messo a disposizione sul sito

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 39 / 57

Page 40: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionethreads - p1/5

Il procedimento e analogo a quello che succede normalmente con i Threadsin Java

estensione della classe Thread

implementazione dell’interfaccia Runnable

Sensori e motori vengono visti come risorse software, di conseguenza comeoggetti manipolabili nel consueto modo.

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 40 / 57

Page 41: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionethreads - p2/5

Molte delle classi di LeJOS avviano threads propri per scopi differenti :

Bottoni e sensori avviano threads di ascolto se i listener sono utilizzati

Ogni motore ha un thread regolatore

La classe Bluetooth avvia un thread per comunicare con altridispositivi BT

Ogni oggetto Timer avvia un proprio thread

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 41 / 57

Page 42: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionethreads - p3/5 - esempio

Ipotizzando di avere un robot mobile con torretta che spara palle coloratedotato di sensore ad ultrasuoni e tre motori (uno dei modelli standard nelladocumentazione ufficiale Lego) configurati come :

1 Motori A e C per la movimentazione del robot

2 Motore B per l’azionamento della torretta di fuoco

3 Il sensore ad ultrasuoni sulla porta 1

Si prende in esame solamente l’eventuale codice che gestisce la torretta ...

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 42 / 57

Page 43: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionethreads - p4/5 - esempio

LegoTest (main)

import lejos.nxt.*;import lejos.robotics.*;public class LegoTest {

public static void main(String[] args) throws Exception{Sonic ultraSonic = new Sonic(SensorPort.S1);int shotNum = 2;FireBalls fire = new FireBalls(Motor.B, 2*360);ultraSonic.start();while(!Button.ESCAPE.isPressed()){ /*Brain funs*/

if(ultraSonic.getDistance()<10){for(int i = 0; i < shotNum; i++)

fire.shot();}//endiftry { Thread.sleep(200); }catch (Exception e) { /*do nothing*/ }

}//end whileLCD.clear();LCD.drawString(”Exit LegoTesT”, 0, 0);

}//end main}//end main class

FireBalls

import lejos.nxt.*;import lejos.robotics.*;public class FireBalls{

private TachoMotor fireMotor;public FireBalls(TachoMotor fMotor, int mSpeed){

fireMotor = fMotor;setMotorSpeed(mSpeed);

}//end constructorpublic void shot(){

fireMotor.rotate(360);}//shotpublic void setMotorSpeed(int motorVel){

fireMotor.setSpeed(motorVel);}

}//FireBalls

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 43 / 57

Page 44: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionethreads - p5/5 - esempio

Sonic

import lejos.nxt.*;import lejos.robotics.*;public class Sonic extends Thread {

UltrasonicSensor sonic;public Sonic(I2CPort port){

sonic = new UltrasonicSensor(port);}// end constructorpublic void run(){

while(true) {LCD.clear();LCD.drawString(sonic.getVersion(), 0, 0);LCD.drawString(sonic.getProductID(), 0, 1);LCD.drawString(sonic.getSensorType(), 0, 2);LCD.drawInt(sonic.getDistance(), 0, 3);LCD.refresh();try { Thread.sleep(100); }catch (Exception e) { /*do nothing*/ }

}//while}//runpublic int getDistance(){ return sonic.getDistance();

}//getDistance}//end Sonic

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 44 / 57

Page 45: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours

Da un punto di vista strutturale, la programmazione dei Lego utilizzando iBehaviours agevola molto la decomposizione logica e quindi la relativaimplementazioneDi seguito il breve esempio di una macchina che utilizza 2sub-comportamenti

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 45 / 57

Page 46: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p1/7- specifiche

Si ipotizza di avere la classica macchinina che si muove in avanti a nelcaso colpisca un muro si fermi, torni indietro e ruoti per assumere unadirezione migliore.La macchina e dotata di due motori e un sensore di contatto cosıconfigurati:

Motore 1 : collegato alla porta A

Motore 2: collegato alla porta C

Sensore di contatto: collegato alla porta 2

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 46 / 57

Page 47: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p2/7 - analisi

Analizzando in modo preliminare il comportamento globale della macchinadescritto dalla specifiche e possibile individuare azioni ipotetiche da cuipartire :

1 Muovere in avanti o fermarsi

1 uno e esattamente opposto all’altro, logicamente puo essere strutturatocome azione e soppressione dell’azione

2 Tornare indietro e ruotare

1 comprende l’azione globale del comportamento

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 47 / 57

Page 48: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p3/7 - schema

Figura: Schema BumperCar

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 48 / 57

Page 49: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p4/7 - interfacce

Behaviour :

public boolean takeControl();public void suppress();public void action();

Arbitrator :

public Arbitrator(Behavior [] behaviors) {}public void start();

e un thread

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 49 / 57

Page 50: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p5/7 - codice

DriveForward

import lejos.robotics.*;import lejos.nxt.*;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();

}}

DriveForward

L’azione principale e quella di muovere

la macchina in avanti o nel caso il

comportamento venga soppresso dal

presentarsi di un altro comportamento

a priorita maggiore l’azione e quella di

arrestarsi

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 50 / 57

Page 51: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p6/7 - codice

HitWall

import lejos.robotics.*;import lejos.nxt.*;public class HitWall implements Behavior {

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

}public void suppress() {

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

// Back up:Motor.A.backward();Motor.C.backward();try{Thread.sleep(1000);}catch(Exception e) {}

// Rotate by causing only one wheel to stop:Motor.A.stop();try{Thread.sleep(300);}catch(Exception e) {}Motor.C.stop();

}}

HitWall

L’azione principale e quella di arretraree ruotare. In caso di soppressionevengono fermati i motori.

Il comportamento prende il controllo

nel momento in cui viene rilevata la

collisione dal sensore di contatto

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 51 / 57

Page 52: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Programmazionebehaviours - p7/7 - codice

BumperCar (main)

import lejos.robotics.subsumption.*;public class BumperCar {

public static void main(String [] args) {Behavior b1 = new DriveForward();Behavior b2 = new HitWall();Behavior [] bArray = {b1, b2};Arbitrator arbitro = new Arbitrator(bArray);arbitro.start();

}};

BumperCar (main)

L’azione principale e quella di muovere la

macchina in avanti o nel caso il

comportamento venga soppresso dal

presentarsi di un altro comportamento a

priorita maggiore l’azione e quella di

arrestarsi

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 52 / 57

Page 53: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Fase di upload sul LEGOCompilazione ed esecuzione

1 Seguendo le istruzioni sul tutorial reperibile nel sito di LeJOS e possibileinstallare per tutte le piattaforme il plug-in di LeJOS per Eclipse. Il plug-inconsente di compilare e fare l’upload del programma in modo semplice.

1 Dopo l’installazione del plug-in, all’interno del menu di Eclipse, sonodisponibili le voci per settare l’ambiente di lavoro di LeJOS

2 Sulla homepage personale sono disponibili delle guide

2 In ogni caso se si volesse usare la riga di comando i programmi principali darichiamare sono nxjc e nxj.

1 nxjc: compila il programma originando un file .class2 nxj: crea un file .nxj ed esegue l’upload sul microcontrollore3 Le varie opzioni dei comandi possono essere utilizzate ad esempio per

mettere in esecuzione automaticamente i programmi dopo l’upload

3 L’interfacciamento con il microcontrollore puo essere effettuato sia viabluetooth che via USB

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 53 / 57

Page 54: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Disaccoppiamento

I programmi che possono essere sviluppati in modo da lavorare inlocale sul robot sono programmi complessi ma comunque semprelimitati dalle capacita di calcolo e di memoria della piattaforma

LeJOS permette la ricezione via bluetooth di dati utilizzandotecnologia ereditata dai cellulari (javaME) e quindi permette disviluppare programmi che guidano il robot da remoto.

In questo modo possono essere sviluppati programmi particolarmentecomplessi disaccoppiando la parte “pensante” da quella “esecutiva”. Laprima viene seguita sul PC mentre la seconda sul robot.

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 54 / 57

Page 55: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Obiettivi dell’attivita

1 Scopo: interagire con la piattaforma Lego MS-NXT e RCX in modoche si possa approfondire l’interazione hardware - software

2 Esercitazioni: assegnamento di task operativi che necessitano sia dellacostruzione di un robot adeguato alla risoluzione del task sia della suaprogrammazione

3 Lavoro di gruppo con eventuale suddivisione delle attivita di analisidel problema proposto e realizzazione della soluzione

4 Eventuale utilizzo della piattafirma per il test e lo sviluppo dialgoritmi piu complessi...

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 55 / 57

Page 56: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Controllo “modernizzato”

Toilet flusher:

uno dei piu classici esempi di

controllo automatico, modernamente

implementato tramite l’utilizzo di

Lego MS NXT

Figura: Toilet flusher control

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 56 / 57

Page 57: Cenni sulla programmazione JAVA - Lego NXT Ra aele Grandi · ... (DEIS - LAR) Lego Mindstorm 26 aprile 2012 2 / 57. ... nerazione di Lego Mindstorm (LMS) de-nominata NXT con ... comportamenti

Domande?

Riferimenti personali:

ufficio: Laboratorio di informatica industriale(exLAB2) - CASY

tel: (051 20) 93903/2 - 93871

sito: lar.deis.unibo.it/people/rgrandi/

em@il: [email protected]

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 57 / 57