Lego Mindstorm
Cenni 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
2
3
storia
elementi del kit base
motori e sensori
2
Microcontrollore
3
Studio del modello e utlizzo pratico
1
4
Esempi
Programmazione
1
2
Linguaggi grafici
Java - Lejos - Eclipse
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
2 / 57
Storia
Lego Mindstorm è una linea di prodotti
della LEGO nata nel 1998 e orientata alla progettazione e modellazione di sistemi
elettromeccanici e robotici. Nel 2006 la
LEGO immette sul mercato la nuova generazione di Lego Mindstorm (LMS) denominata NXT con maggiore capacità e
versatilità.
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 più o
meno complesse, comprensive di leve, catene ed ingranaggi.
2
Mattoncini programmabili (la novità geniale della LEGO) : mattoni
integrabili fisicamente con i lego Technic “classici” che hanno però all’interno
un microcontrollore programmabile, uno scherno LCD e delle prese sui lati
dove collegare motori e sensori appositamente studiati.
3
Motori e sensori : dispositivi integrabili con i mattoncini Technic e
collegabili al brick di controllo, che implementano determinate capacità.
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
4 / 57
Motori e Sensori
Motori con controllo di velocità
e 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 di
rotazione integrato e feedback per
il controllo di precisione
Sensore luminoso, capace di
rilevare colori e intensità 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 per
l’immagazzinamento del firmware e del programma utente
dotato di porta IR per comunicare col PC o con altri RCX
dotato delle porte per la connessione dei motori e dei sensori
predisposto 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 più grandi dei precedenti
2 sensori tattili
Sensore di colore
Sensore audio
Sensore di prossimità 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 Atmel
AT91SAM7S256 a 48 MHz (ARM7), con 256k
flash e 64k RAM
un coprocessore 8 bit Atmel ATmega48 a 8 MHz
(RISC a 8 bit), con 4k flash e 512 byte RAM
uno schermo LCD con una risoluzione di 60x100
pixel
una porta USB 2.0 e connettività 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 costruire
robots che interagiscono con l’ambiente circostante e che eseguono
dei task operativi in base a ciò che apprendono durante il loro
funzionamento, secondo le procedure sviluppate all’interno del
programma.
Possono essere simulati comportamenti complessi tramite apposito
software
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
11 / 57
Esempi costruttivi 1/4
Cassaforte: uno degli esempi
più classici di automa a stati
finiti (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 che
impiegano gli algoritmi più
diversi
Figura: Rubik cube solver
Figura: Robot ritrattista
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
13 / 57
Esempi costruttivi 3/4
Robot che ci riguardano più da
vicino per le aree di robotica
mobile e controllo
Figura: Controllo di un pendolo inverso in
movimento (tipo Segway)
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
Figura: Line follower
26 aprile 2012
14 / 57
Esempi costruttivi 4/4
Oppure:
algoritmi di collaborazione distribuita
sistemi multi-agente
algoritmi di apprendimento
algoritmi di intelligenza artificiale
...
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
15 / 57
Metodi di programmazione
La programmazione dei LEGO è 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 nei
negozi di giocattoli;
ROBOLAB: basato su LabVIEW e sviluppato dalla Tufts University
NXT-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:
flessibilità
riusabilità
espandibilità
espressività
velocità 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:
QuiteC
C and C++ sotto sistema operativo BrickOS (precedentemente LegOS)
Visual Basic
Python
Java su “sistema operativo” LeJOS (o TinyVM) v. 0.9.1 (feb-2012)
Ognuno di questi linguaggi permette l’interfacciamento con il
microcontrollore, previa modifica del firmware
La modifica del firmware tramite LeJOS avviene attraverso un apposito
programma incluso nel pacchetto del nuovo firmware
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
19 / 57
LeJOS
La scelta
LeJOS è un firmware sostitutivo per il mattone Lego Mindstorms
RCX e NXT.
Include una Java Virtual Machine, che permette di programmare i
robot LMS mediante l’utilizzo del linguaggio di programmazione Java.
Vaste librerie di codice che supportano varie funzioni di alto livello
quali navigazione e automatismo basato algoritmi comportamentali
Al momento risulta la struttura più completa per la programmazione
dei 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 Environment
IDE: Ambienti integrati per lo sviluppo del software
NetBeans
ambiente di sviluppo multi-linguaggio scritto interamente in Java (Swing) nato nel
giugno 2000.
scelto dalla Sun Microsystems come IDE ufficiale
plug-in oriented
Eclipse
ambiente di sviluppo multi-linguaggio scritto in Java (SWT)
progetto opensource sviluppato da una vasta comunità sotto la tutela della Eclipse
Foundation
plug-in oriented
Noi utilizzeremo Eclipse ma è possibile utilizzare anche NetBeans, entrambi gli
ambienti sono dotati del plug-in specifico per LeJOS
inoltre è possibile lavorare tramite linea di comando
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
22 / 57
Eclipse
Risorse per la programmazione
Eclipse è un ambiente di sviluppo
multipiattaforma
(Linux - Windows e Mac)
Lo si scarica gratuitamente da
www.eclipse.org/downloads
La versione a cui siamo interessati è
Eclipse Classic 3.7.2 (˜173 MB)
viene cosı̀ installato tutto l’ambiente di sviluppo
per chi avesse Ubuntu è disponibile anche nel
repository ufficiale
Raffaele Grandi
(DEIS - LAR)
Figura: Eclipse Downloads site
Lego Mindstorm
26 aprile 2012
23 / 57
Eclipse
L’ambiente di lavoro
Una volta installato Eclipse e caricato,
l’interfaccia appare come nella figura a
fianco:
Area di lavoro
Gerarchia dello spazio di lavoro
contenente i packages e le classi
Console di output
Menù per la gestione delle
opzioni
Figura: Eclipse Interface
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
24 / 57
Risorse su Eclipse
Da 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 - LeJOS
API LeJOS
Le API di LeJOS sono state prodotte attraverso la compilazione
automatica 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 - LeJOS
API LeJOS - overview
Figura: LeJOS API Overview
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
27 / 57
Integrazione Java - LeJOS
API LeJOS - blocchi concettuali
Osservando le API ci si accorge che i packages si dividono a grandi linee in 3
macro 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 - LeJOS
API LeJOS - il linguaggio
Packages mutuati direttamente dal linguaggio JAVA (java.* - javax.*)
1
2
3
relative al core del linguaggio (java.lang - java.io - java.util java.net)
relative alla grafica (java.awt - java.awt.geom)
relative alla comunicazione bluetooth (javax.bluetooth javax.microedition)
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
29 / 57
Integrazione Java - LeJOS
API LeJOS - la piattaforma
Packages che riguardano la gestione delle piattaforma NXT-RCX (lejos.*)
1
2
relative alla gestione dei motori, sensori, batteria ... (lejos.nxt)
relative alla gestione delle comunicazioni (lejos.nxt.comm lejos.nxt.remote)
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
30 / 57
Integrazione Java - LeJOS
API LeJOS - la robotica
Packages di supporto specifici per la robotica (lejos.robotics.*)
1
2
3
supporto alla navigazione (lejos.robotics.navigation)
supporto alla localizzione (lejos.robotics.localization)
supporto alla “Subsumption Architecture” per la gestione dei Behaviour
(lejos.robotics.subsumption)
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
31 / 57
LeJOS
Risorse
@
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“ , Juan
Antonio Breña Moral (ebook - google)
...
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
32 / 57
Behaviour based robotics
cenni
In LeJOS esiste una tipologia di programmazione basata sui
comportamenti che utilizza la Subsumption Architecture (SA)
SA è una architettura logica fortemente legata alla gestione dei
comportamenti nell’ambito della robotica “autonoma”. Il termine è
stato introdotto da Rodney Brooks (professore di robotica al MIT) e
colleghi nel 1986
Il concetto di sussunzione è usato nella rappresentazione della
conoscenza, nella logica matematica, nelle ontologie ed in altre
discipline scientifiche, per indicare una classificazione gerarchizzante
(specializzazione) per mezzo di sostituzione, ricondurre un concetto
nell’ambito di uno più 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 di
un comportamento complesso in una sottostruttura di
comportamenti più semplici correlati tra loro che possono essere
modellati in base ad idee generalizzate.
Ad ogni comportamento “semplice” viene associato un livello di
astrazione
Ogni livello ha un obiettivo ben preciso che l’agente deve portare a
termine
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 le
azioni
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 è possibile che questa azione sia stata possibile utilizzando
una sotto struttura comportamentale
evita oggetti non-A
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
35 / 57
Subsumption Architecture
Struttura
Architettura con struttura bottom-up
sono gli eventi che si verificano agli strati inferiori dell’architettura che
offrono la possibilità a quelli superiori di essere attivati e portati a
termine
gli strati decisionali più bassi sono quelli che hanno contatto con la
struttura “fisica” del robot
ci si interfaccia con le API di controllo: l’attuatore visto come una
risorsa software
maggiore reattività: i task inferiori prendono decisioni dirette
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
36 / 57
Comportamento
Ogni comportamento viene visto come entità dotata di 3
caratteristiche funzionali:
1
2
3
condizione di attivazione
attività da svolgere in fase attiva
attività da svolgere in caso di soppressione
Si utilizza un arbitro (o supervisore) che identifica la condizione di
attivazione del comportamento ed esegue la relativa azione, compresa
l’eventuale soppressione se altre condizioni si verificano con una
priorità di esecuzione maggiore
in LeJOS l’arbitro è un thread che utilizza un array di comportamenti
in ordine di priorità crescente con la posizione nell’array
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
37 / 57
Vantaggi, Svantaggi e Soluzioni
Vantaggi:
maggiore modularità
ogni livello lavora direttamente sulle risorse del proprio ambiente
ogni livello percepisce direttamente il proprio obiettivo
Svantaggi:
incapacità di avere più livelli contemporanei dato che gli inneschi di
uno possono interferire con quelli di un altro
difficoltà di selezione dell’azione da eseguire in sistemi altamente
distribuiti attraverso la sola capacità di inibizione/soppressione di un
comportamento
Soluzioni:
eventuale programmazione mista ad esempio behaviour-planning per
la selezione di comportamenti concorrenti
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
38 / 57
Programmazione
Premessa
All’interno del pacchetto lejos-nxj sono presenti nella cartella
projects/samples degli esempi da consultare
Sono esempi semplici che illustrano il funzionamento di base del
sistema compresi l’utilizzo dei sensori e dei motori
Gli esempi possono essere facilmente ampliati per integrare
funzionalità avanzate e capacità di gestione più articolata
L’eventuale codice sviluppato viene messo a disposizione sul sito
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
39 / 57
Programmazione
threads - p1/5
Il procedimento è analogo a quello che succede normalmente con i Threads
in Java
estensione della classe Thread
implementazione dell’interfaccia Runnable
Sensori e motori vengono visti come risorse software, di conseguenza come
oggetti manipolabili nel consueto modo.
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
40 / 57
Programmazione
threads - 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 altri
dispositivi BT
Ogni oggetto Timer avvia un proprio thread
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
41 / 57
Programmazione
threads - p3/5 - esempio
Ipotizzando di avere un robot mobile con torretta che spara palle colorate
dotato di sensore ad ultrasuoni e tre motori (uno dei modelli standard nella
documentazione 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
Programmazione
threads - p4/5 - esempio
LegoTest (main)
FireBalls
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();
}//endif
try { Thread.sleep(200); }
catch (Exception e) { /*do nothing*/ }
}//end while
LCD.clear();
LCD.drawString(”Exit LegoTesT”, 0, 0);
}//end main
}//end main class
import lejos.nxt.*;
import lejos.robotics.*;
public class FireBalls{
private TachoMotor fireMotor;
public FireBalls(TachoMotor fMotor, int mSpeed){
fireMotor = fMotor;
setMotorSpeed(mSpeed);
}//end constructor
public void shot(){
fireMotor.rotate(360);
}//shot
public void setMotorSpeed(int motorVel){
fireMotor.setSpeed(motorVel);
}
}//FireBalls
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
43 / 57
Programmazione
threads - 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 constructor
public 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
}//run
public int getDistance(){ return sonic.getDistance();
}//getDistance
}//end Sonic
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
44 / 57
Programmazione
behaviours
Da un punto di vista strutturale, la programmazione dei Lego utilizzando i
Behaviours agevola molto la decomposizione logica e quindi la relativa
implementazione
Di seguito il breve esempio di una macchina che utilizza 2
sub-comportamenti
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
45 / 57
Programmazione
behaviours - p1/7- specifiche
Si ipotizza di avere la classica macchinina che si muove in avanti a nel
caso colpisca un muro si fermi, torni indietro e ruoti per assumere una
direzione migliore.
La macchina è 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
Programmazione
behaviours - p2/7 - analisi
Analizzando in modo preliminare il comportamento globale della macchina
descritto dalla specifiche è possibile individuare azioni ipotetiche da cui
partire :
1
Muovere in avanti o fermarsi
1
2
uno è esattamente opposto all’altro, logicamente può essere strutturato
come azione e soppressione dell’azione
Tornare indietro e ruotare
1
comprende l’azione globale del comportamento
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
47 / 57
Programmazione
behaviours - p3/7 - schema
Figura: Schema BumperCar
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
48 / 57
Programmazione
behaviours - p4/7 - interfacce
Behaviour :
public boolean takeControl();
public void suppress();
public void action();
Arbitrator :
public Arbitrator(Behavior [] behaviors) {}
public void start();
è un thread
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
49 / 57
Programmazione
behaviours - p5/7 - codice
DriveForward
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();
}
}
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
L’azione principale è quella di muovere
la macchina in avanti o nel caso il
comportamento venga soppresso dal
presentarsi di un altro comportamento
a priorità maggiore l’azione è quella di
arrestarsi
26 aprile 2012
50 / 57
Programmazione
behaviours - p6/7 - codice
HitWall
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) {}
L’azione principale è quella di arretrare
e ruotare. In caso di soppressione
vengono fermati i motori.
Il comportamento prende il controllo
nel momento in cui viene rilevata la
collisione dal sensore di contatto
// Rotate by causing only one wheel to stop:
Motor.A.stop();
try{Thread.sleep(300);}
catch(Exception e) {}
Motor.C.stop();
}
}
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
51 / 57
Programmazione
behaviours - p7/7 - codice
BumperCar (main)
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();
}
};
Raffaele Grandi
(DEIS - LAR)
L’azione principale è quella di muovere la
macchina in avanti o nel caso il
comportamento venga soppresso dal
presentarsi di un altro comportamento a
priorità maggiore l’azione è quella di
arrestarsi
Lego Mindstorm
26 aprile 2012
52 / 57
Fase di upload sul LEGO
Compilazione ed esecuzione
1
Seguendo le istruzioni sul tutorial reperibile nel sito di LeJOS è possibile
installare per tutte le piattaforme il plug-in di LeJOS per Eclipse. Il plug-in
consente di compilare e fare l’upload del programma in modo semplice.
1
2
2
In ogni caso se si volesse usare la riga di comando i programmi principali da
richiamare sono nxjc e nxj.
1
2
3
3
Dopo l’installazione del plug-in, all’interno del menù di Eclipse, sono
disponibili le voci per settare l’ambiente di lavoro di LeJOS
Sulla homepage personale sono disponibili delle guide
nxjc: compila il programma originando un file .class
nxj: crea un file .nxj ed esegue l’upload sul microcontrollore
Le varie opzioni dei comandi possono essere utilizzate ad esempio per
mettere in esecuzione automaticamente i programmi dopo l’upload
L’interfacciamento con il microcontrollore può essere effettuato sia via
bluetooth 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 in
locale sul robot sono programmi complessi ma comunque sempre
limitati dalle capacità di calcolo e di memoria della piattaforma
LeJOS permette la ricezione via bluetooth di dati utilizzando
tecnologia ereditata dai cellulari (javaME) e quindi permette di
sviluppare programmi che guidano il robot da remoto.
In questo modo possono essere sviluppati programmi particolarmente
complessi disaccoppiando la parte “pensante” da quella “esecutiva”. La
prima viene seguita sul PC mentre la seconda sul robot.
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
54 / 57
Obiettivi dell’attività
1
Scopo: interagire con la piattaforma Lego MS-NXT e RCX in modo
che si possa approfondire l’interazione hardware - software
2
Esercitazioni: assegnamento di task operativi che necessitano sia della
costruzione di un robot adeguato alla risoluzione del task sia della sua
programmazione
3
Lavoro di gruppo con eventuale suddivisione delle attività di analisi
del problema proposto e realizzazione della soluzione
4
Eventuale utilizzo della piattafirma per il test e lo sviluppo di
algoritmi più complessi...
Raffaele Grandi
(DEIS - LAR)
Lego Mindstorm
26 aprile 2012
55 / 57
Controllo “modernizzato”
Toilet flusher:
uno dei più 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