Lego Mindstorm Cenni 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 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 9 aprile 2010 2 / 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 9 aprile 2010 3 / 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 9 aprile 2010 4 / 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 9 aprile 2010 5 / 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 9 aprile 2010 6 / 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 9 aprile 2010 7 / 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 9 aprile 2010 8 / 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 9 aprile 2010 9 / 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 9 aprile 2010 10 / 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 9 aprile 2010 11 / 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 9 aprile 2010 12 / 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 9 aprile 2010 13 / 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 9 aprile 2010 14 / 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 9 aprile 2010 15 / 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 9 aprile 2010 16 / 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 9 aprile 2010 17 / 57 Software in uso Linguaggi di programmazione alternativi utilizzati: QuiteC C and C++ sotto sistema operativo BrickOS (precedentemente LegOS) Visual Basic Python Java sotto sistema operativo LeJOS (o TinyVM) Ognuno di questi linguaggi permette l’interfacciamento con il microcontrollore, previa modifica del firmware (?) La modifica tramite LeJOS avviene attraverso un apposito programma incluso nel pacchetto del nuovo firmware Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 18 / 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 9 aprile 2010 19 / 57 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 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, in quanto si integra meglio con LeJOS (plug-in specifico) è possibile lavorare tramite linea di comando Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 21 / 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.5.2 (162 MB) viene cosı̀ installato tutto l’ambiente di sviluppo compresa la JVM per chi avesse Ubuntu è disponibile anche nel repository ufficiale Figura: Eclipse Downloads site Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 22 / 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 9 aprile 2010 23 / 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 9 aprile 2010 24 / 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 9 aprile 2010 25 / 57 Integrazione Java - LeJOS API LeJOS - overview Figura: LeJOS API Overview Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 26 / 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 9 aprile 2010 27 / 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 9 aprile 2010 28 / 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 9 aprile 2010 29 / 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 9 aprile 2010 30 / 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 9 aprile 2010 31 / 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 9 aprile 2010 32 / 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 9 aprile 2010 33 / 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 9 aprile 2010 34 / 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 9 aprile 2010 35 / 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 9 aprile 2010 36 / 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 9 aprile 2010 37 / 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 9 aprile 2010 38 / 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 9 aprile 2010 39 / 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 9 aprile 2010 40 / 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 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 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 9 aprile 2010 42 / 57 Programmazione threads - p5/5 - esempio Sonic import lejos.nxt.*; import lejos.robotics.*; public class Sonic { 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 9 aprile 2010 43 / 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 9 aprile 2010 44 / 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 9 aprile 2010 45 / 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 2 Tornare indietro e ruotare Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 46 / 57 Programmazione behaviours - p3/7 - schema Figura: Schema BumperCar Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 47 / 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 9 aprile 2010 48 / 57 Programmazione behaviours - p5/7 - codice DriveForward 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(); } } 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 9 aprile 2010 49 / 57 Programmazione behaviours - p6/7 - codice HitWall 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) {} 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 9 aprile 2010 50 / 57 Programmazione behaviours - p7/7 - codice BumperCar (main) 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(); } }; 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 9 aprile 2010 51 / 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 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 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 9 aprile 2010 52 / 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 9 aprile 2010 53 / 57 Un progetto complesso Figura: Unibot Figura: Schema unibot Raffaele Grandi (DEIS - LAR) Lego Mindstorm 9 aprile 2010 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 9 aprile 2010 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 9 aprile 2010 56 / 57 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