Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS)...

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 9 aprile 2010 Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 1 / 57

Transcript of Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS)...

Page 1: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Lego MindstormCenni sulla programmazione

JAVA - Lego NXT

Raffaele Grandi

em@il :[email protected]

lar .deis.unibo.it/people/rgrandi

DEIS - LAR

9 aprile 2010

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 1 / 57

Page 2: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 gen-

erazione di Lego Mindstorm (LMS) de-

nominata NXT con maggiore capacita e

versatilita.

Figura: Kit base LMS-NXT

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 2 / 57

Page 3: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 3 / 57

Page 4: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 4 / 57

Page 5: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 5 / 57

Page 6: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 6 / 57

Page 7: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 7 / 57

Page 8: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 8 / 57

Page 9: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 9 / 57

Page 10: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 10 / 57

Page 11: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 11 / 57

Page 12: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 12 / 57

Page 13: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 13 / 57

Page 14: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Esempi costruttivi 4/4

Oppure:

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

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 14 / 57

Page 15: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 15 / 57

Page 16: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 16 / 57

Page 17: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 17 / 57

Page 18: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Software in uso

Linguaggi di programmazione alternativi utilizzati:

QuiteCC and C++ sotto sistema operativo BrickOS (precedentemente LegOS)Visual BasicPythonJava sotto sistema operativo LeJOS (o TinyVM)

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

La modifica tramite LeJOS avviene attraverso un apposito programmaincluso nel pacchetto del nuovo firmware

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 18 / 57

Page 19: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 19 / 57

Page 20: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Cosa offre LeJOS NXJ

1 Object oriented language (Java)

2 Preemptive 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 9 aprile 2010 20 / 57

Page 21: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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, in quanto si integra meglio con LeJOS (plug-in specifico)

e possibile lavorare tramite linea di comando

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 21 / 57

Page 22: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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.5.2 (162 MB)

viene cosı installato tutto l’ambiente di sviluppocompresa la JVM

per chi avesse Ubuntu e disponibile anche nel

repository ufficiale

Figura: Eclipse Downloads site

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 22 / 57

Page 23: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 23 / 57

Page 24: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 24 / 57

Page 25: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 25 / 57

Page 26: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Integrazione Java - LeJOSAPI LeJOS - overview

Figura: LeJOS API Overview

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

Page 27: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 27 / 57

Page 28: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 28 / 57

Page 29: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 29 / 57

Page 30: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 30 / 57

Page 31: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 31 / 57

Page 32: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 32 / 57

Page 33: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 33 / 57

Page 34: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 34 / 57

Page 35: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 35 / 57

Page 36: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 36 / 57

Page 37: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 37 / 57

Page 38: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 38 / 57

Page 39: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 39 / 57

Page 40: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 40 / 57

Page 41: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Programmazionethreads - p3/5 - esempio

Ipotizzando di avere un robot mobile con torretta che spara palle coloratedotato di sensore ad ultrasuoni e tre motori configurati come :

1 Motori A e C per la movimentazione del robot

2 Motore B per l’azionamento della torretta di sparo

3 Il sensore ad ultrasuoni sulla porta 1

Si prende in esame solamente il codice che gestisce la torretta ...

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 41 / 57

Page 42: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 42 / 57

Page 43: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Programmazionethreads - p5/5 - esempio

Sonic

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

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 9 aprile 2010 43 / 57

Page 44: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 44 / 57

Page 45: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 45 / 57

Page 46: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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

2 Tornare indietro e ruotare

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 46 / 57

Page 47: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Programmazionebehaviours - p3/7 - schema

Figura: Schema BumperCar

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 47 / 57

Page 48: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 48 / 57

Page 49: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Programmazionebehaviours - p5/7 - codice

DriveForward

import lejos.robotics.*;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 9 aprile 2010 49 / 57

Page 50: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Programmazionebehaviours - p6/7 - codice

HitWall

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

public boolean takeControl() {return Sensor.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 9 aprile 2010 50 / 57

Page 51: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Programmazionebehaviours - p7/7 - codice

BumperCar (main)

import lejos.robotics.*;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 9 aprile 2010 51 / 57

Page 52: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 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 9 aprile 2010 52 / 57

Page 53: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 53 / 57

Page 54: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Un progetto complesso

Figura: Schema unibot

Figura: Unibot

Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 54 / 57

Page 55: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 55 / 57

Page 56: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

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 9 aprile 2010 56 / 57

Page 57: Lego Mindstorm - unibo.it · C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi

Domande?

Riferimenti personali:

ufficio: Laboratorio di informatica industriale(exLAB2)

tel: (051 20) 93903/2

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

em@il: [email protected]

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