Upload
dangdan
View
218
Download
0
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Integrazione Java - LeJOSAPI LeJOS - overview
Figura: LeJOS API Overview
Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 27 / 57
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Programmazionebehaviours - p3/7 - schema
Figura: Schema BumperCar
Raffaele Grandi (DEIS - LAR) Lego Mindstorm 26 aprile 2012 48 / 57
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
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
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
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
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
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
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
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
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