Programmare LEGO NXT con Java



Documenti analoghi
Programmare LEGO NXT con BricX

Programmazione dei robot

Java: Compilatore e Interprete

IRSplit. Istruzioni d uso 07/10-01 PC

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

La nuova generazione (NXT) di

Arduino: Programmazione

Progettazione del robot

Tale attività non è descritta in questa dispensa

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Gamma BRUSHLESS CROUZET

Controllo di un Motore Elettrico in Corrente Continua

Università degli studi di Roma LA SAPIENZA

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

REALIZZAZIONE DI UN LABORATORIO REMOTO PER ESPERIENZE DI ROBOTICA EDUCATIVA: LATO CLIENT

Gli attuatori. Breve rassegna di alcuni modelli o dispositivi di attuatori nel processo di controllo

A.S Presentazione del materiale hardware MINDSTORMS.

ICARO Terminal Server per Aprile

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

10 - Programmare con gli Array

Eclipse. Avviare un progetto e compilare un semplice programma

Sezione di PWM e Generatore di D/A Converter.

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Manuale IT_VNA by IZ1PMX

Progetti reali con ARDUINO

Corso PLC - Manuale Pratico 1

TASTIERA DI COMANDO E CONTROLLO PER INVERTERS EL.-5000

Corso Eclipse. Prerequisiti. 1 Introduzione

Descrizione del Test Range della Società SAMA

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Traduzione ed esecuzione di programmi. Dispensa 08

Sistema di monitoraggio delle correnti in ingresso in impianti fotovoltaici

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

MONITORAGGI STRUTTURALI WIRELESS A LETTURA REMOTA

Calcolo Focale. Ing. Vincenzo Falanga

6 Cenni sulla dinamica dei motori in corrente continua

MICRO USB OTG TO SERIAL Adattatore da Micro USB OTG a Seriale RS232 per Tablet & Smartphone

TRONCATRICE DOPPIA TESTA ELETTRONICA 500 TS

MT2 e MT3: Schede e sistemi di controllo motori passo passo

Arduino UNO. Single board microcontroller

Indruduzione... 1 Il modulo Bluetooth HC Il firmware... 3 Collegamento della scheda... 4 Software PC e l applicazione Android...

RETI E SISTEMI INFORMATIVI

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Memoria Secondaria o di Massa

FRANCESCO MARINO - TELECOMUNICAZIONI

Dal protocollo IP ai livelli superiori

Sensori di temperatura a termocoppia K Guida Utente

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

MODELLIZZAZIONE, CONTROLLO E MISURA DI UN MOTORE A CORRENTE CONTINUA

DATA LOGGER. Modello LR8410/20 LR8400/20 LR8401/20 LR8402/20 LR8431/ Portate: K, J, E, T, N, R, S, B, W, da -200 C a C

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

Algoritmi di Ricerca. Esempi di programmi Java

Architetture Applicative

Dispositivo di conversione di energia elettrica per aerogeneratori composto da componenti commerciali.

Guida alla compilazione on-line delle domande di Dote Scuola A.S per le Famiglie INDICE

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Programmare in Java. Olga Scotti

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2015

Tutorial 3DRoom. 3DRoom

Registratore Dati Umidità e Temperatura

PROGETTAZIONE DI UN CONTROLLO ON-OFF CON CRITERI E METODOLOGIA

MODULO STAMPA BOLLETTINO PDF

La tecnica proporzionale

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

DESCRIZIONE GENERALE E ARCHITETTURA HARDWARE DI I-DROID01

PR aprile 2012 Motion Control Pagina 1 di 5. XTS extended Transport System: un nuovo modo di concepire il Motion Control

Programmazione in Java Parte I: Fondamenti

2 Gli elementi del sistema di Gestione dei Flussi di Utenza

Hardware delle reti LAN

Compatto, espandibile e potente. Il controller che cresce con l applicazione.

Interfaccia BL232 con uscite RS232/422/485 MODBUS e 0-10V. Interfaccia BL232

Distanziometro Laser ad alta velocità IDP-RFD100K CARATTERISTICHE: DESCRIZIONE:

WEBDYNSUN LA SOLUZIONE DEDICATA AI SISTEMI DI MONITORAGGIO DI IMPIANTI FOTOVOLTAICI

Sistemi di Automazione Industriale

Le command line di Java

INFORMAZIONI PER LA REGOLAZIONE DELLE SOGLIE DI FREQUENZA NEGLI INVERTER POWER-ONE IN ACCORDO ALLA DELIBERA DELL AEEG 243/2013/R/EEL (6 Giugno, 2013)

U SB M I N I ADAPTE R BLUETOOTH

CONTROLLO NUMERICO Z32

MultiPresa MPP Serie Intell SNMP ver. 1.2

Concetto di Funzione e Procedura METODI in Java

Appunti di Informatica 1

Caratteristiche Generali

Pixel Pitch (mm) 0.248x0.248 Peso solo monitor 2,8kg Profondità (mm) 11,9 Colore nero

Progetto di un sistema di controllo per un robot basato su CAN

HD HD HD HD

Manuale di programmazione BerMar_Drive_Software

C. P. U. MEMORIA CENTRALE

Provincia di Siena UFFICIO TURISMO. Invio telematico della comunicazione dei prezzi e dei servizi: istruzioni per l uso

uadro Soluzione software e hardware Per le rilevazione presenze Gestione Aziendale Fa quadrato attorno alla tua azienda

Il sensore rilevatore di presenza modalità d uso

Scrivere un programma in Java

Realizzazione di un robot olonomo

Distributori DPI DESCRIZIONE SERVIZIO. Informazioni Generali

esercizi Esercizi / problemi

Fondamenti di macchine elettriche Corso SSIS 2006/07

Una guida per l utilizzazione educativa del robot Mindstorms NXT con programmazione Java

Transcript:

Programmare LEGO NXT con Java

Overview NXT Hardware Ambiente di sviluppo Eclipse Java Virtual Machine Programmare con JAVA

NXT hardware 4 Inputs (digitali e analogici) 3 Outputs (supporto per encoders) Schermo (100x64 pixels) 4 Bottoni Suono USB e Bluetooth

Processori Processore principale: Atmel 32-bit ARM processor, AT91SAM7S256 256 KB FLASH 64 KB RAM 48 MHz Co-processore: Atmel 8-bit AVR processor, ATmega48 4 KB FLASH 512 Byte RAM 8 MHz

Comunicazione tramite Bluetooth e USB Bluetooth wireless communication CSR BlueCoreTM 4 v2.0 +EDR System Supports the Serial Port Profile (SPP) Internal 47 KByte RAM External 8 MBit FLASH 26 MHz USB 2.0 Full speed com port (12 Mbit/s)

Monitor, Suono e bottoni Display in bianco e nero 100 x 64 pixel LCD Uscita audio con canale con risoluzione a 8-bit resolution 4 bottoni

Schema a blocchi del mattoncino intelligente

Qualche dettaglio 3 output con connessione a 6-fili che supportano anche l'input dagli encoder 4 input con connessione a 6-fili che supportano: - segnali digitali - segnali analogici - protocollo I2C - high speed port, IEC 61158 Type 4/EN 50170 LEGO ha distribuito tutta la documentazione

Documentazione online http://mindstorms.lego.com/ - cliccare sul bottone NXTreme button per informazioni e downloads per utenti avanzati Open source firmware!!! SDK Software Developer Kit HDK Hardware Developer Kit BDK Bluetooth Developer Kit

Motori Encoder integrato nel motore con sensibilità 1 Posizioni relative e non assolute Velocità massima pari a circa 200 RPM Coppia massima 24 Ncm Motori estremamente robusti

Motori

Sensori nel kit Sensore a ultrasuoni (3cm-100cm) Sensore di luce attivo Sensore acustico DB and DBA Sensore di contatto

Cavi di connessione I cavi LEGO NXT (come I connettori DEC RJ-12 ma al contrario) Schemi: Analog input

3 rd Party Sensors Prezzi da $30 a $50 HiTechnic (www.hitechnic.com) Esteticamente simili ai sensori LEGO Autorizzati da LEGO MindSensors (www.mindsensors.com) Compatibili ma meno curati esteticamente

HiTechnic Sensors Color Sensor Compass Sensor Acceleration Sensor More coming Prototype board Gyro sensor (analog, not I2C digital) IR Link (to talk to RCX and other LEGO IR devices) IR Seeker (for robo soccer, for example)

MindSensors Sensors Acceleration Sensor RCX to NXT communications link PS2 controller interface Motor Multiplexor Magnetic Compass Pneumatic Pressure Sensor

Bluetooth Utilizzabile per scaricare i programmi Permette il trasferimento di dati da un NXT all'altro (fino a quattro collegati in rete) Permette il controllo a distanza da parte di qualsiasi dispositivo con BT

Linguaggi di programmazione NXT-G NXC e NBC (in ambiente BricX) Robot C pblua Java ed altri

NXT-G code Ambiente di sviluppo della LEGO Programmazione grafica Basato su National Instruments LabView Ottimo per programmi semplici Ideale per I ragazzi delle scuole medie inferiori ed elementari

NXC e NBC NXC (Not exactly C) è un linguaggio simile al C Costruito sull'assembler NBC, the Next Byte Code Utilizza il firmware standard della LEGO e un firmware potenziato

NXC in BricxCC BricxCC è un ambiente di sviluppo Supporta tutte le piattaforme LEGO E' opensource e compatibile anche con hardware non LEGO

Robot C Linguaggio di programmazione di Carnegie Mellon s per varie piattaforme (tra cui VEX, RCX e NXT) Firmware dedicato Costo30 $

Robot C Linguaggio di programmazione di Carnegie Mellon s per varie piattaforme (tra cui VEX, RCX e NXT) Firmware dedicato Costo30 $

pblua New firmware, and language Small portable language for embedded systems By Ralph Hemple, the author of pbforth for the RCX Compiles on brick! Use any terminal device to talk to it

Altri linguaggi Java MS Robotic Studio!!!!!!!!!! Si deve scaricare un piccolo programma client Il controllo reale è fatto dal PC

Programmare con Java Linguaggio orientato agli oggetti Senza fare un corso sul linguaggio cercheremo subito di: Utilizzare i motori Acquisire dati dai sensori

Link utili http://www.tutorialspoint.com/java/ http://www.html.it/guide/guida-java/ http://android.devapp.it/01-corso-completo-diprogrammazione-java-hello-world

La rivoluzione di Java - permette la realizzazione di programmi non legati ad una architettura precisa - Macchina Virtuale (JVM), i programmi non vengono compilati in codice macchina (nativo) ma in un codice intermedio chiamato bytecode - JVM e JDK

Architettura JVM

Paradigma della OOP Entità fondamentale è la classe, contenente: - lo stato, cioè i campi dell oggetto; - le procedure per la gestione, i metodi. Incapsulamento, ereditarietà

Classi e Oggetti

Un problema...

La soluzione Nel package navigation c'è la classe differentialpilot DifferentialPilot(float wheeldiameter, float trackwidth, Motor leftmotor, Motor rightmotor)

Esempio di oggetto

LEJOS lejos è una VM Java ridotta per l'nxt lejos NXJ offre: Object oriented language (Java) Preemptive threads (tasks) Arrays, including multi-dimensional Recursion Synchronization Exceptions Java types including float, long, and String Most of the java.lang, java.util and java.io classes A Well-documented Robotics API

Il NOSTRO riferimento http://www.lejos.org/nxj.php

Installazione in window http://www.lejos.org/nxt/nxj/tutorial/preliminaries/gettingstartedwindo Oppure dalla cartella sul desktop: - fantom driver - jdk - Lejos - Eclipse

Trasferire il firmware nell'nxt http://www.lejos.org/nxt/nxj/tutorial/menusystem/menusystem. htm

Il primo programma import lejos.nxt.button; public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World"); Button.waitForAnyPress(); } }

Per fortuna abbiamo Eclipse http://www.lejos.org/nxt/nxj/tutorial/preliminaries/usingides.htm http://www.lejos.org/nxt/nxj/tutorial/preliminaries/usingeclipse.htm

Controllo dei motori I nostri motori sono a corrente continua dotato di due morsetti, la velocità e il verso di rotazione dell'albero dipendono da: - tensione applicata - corrente assorbita dal rotore - carico applicato

Struttura dei motori DC la corrente scorre negli avvolgimenti e si genera un campo magnetico la parte sinistra del rotore è respinta dal magnete di sinistra ed attirata da quello di destra. la coppia genera la rotazione

Struttura dei motori DC quando gli avvolgimenti si allineano orizzontalmente, il commutatore inverte la direzione di corrente attraverso gli avvolgimenti, modificando il campo magnetico; il processo ritorna quindi allo stato di partenza e il ciclo si ripete (http://it.wikipedia.org/wiki/file:electric_motor.gif)

Controllo PWM dei motori DC Modulazione di larghezza di impulso, dall'inglese pulse-width modulation onda quadra di duty cycle variabile che permette di controllare la potenza assorbita da un carico elettrico

Controllo dei motori dell'nxt i connettori sono a sei fili. controllo degli attuatori con segnali PWM alla tensione di 4,3 V e con correnti da 700 ma fino a 1 A valore di picco il motore è anche equipaggiato con una protezione termica interna due collegamenti per le informazioni provenienti dal decoder integrato nel motore

Controllo software dei motori http://www.lejos.org/nxt/nxj/tutorial/motortutorial/controllingmotors. htm

La classe NXTRegulatedMotor Ha tre istanze, una per ogni motore e i seguenti metodi principali: - forward(), backward(), stop() - gettachocount(), setspeed(int speed), Delay - rotate(int angle), rotateto(int angle) - rotaterotate(int angle,boolean immediatereturn), rotateto(int angle,booleanimmediatereturn), (boolean)isrotating()

Primi esempi di gestione motori http://www.lejos.org/nxt/nxj/tutorial/motortutorial/motortutor1.html Per un uso di base http://www.lejos.org/nxt/nxj/tutorial/motortutorial/motortutor2.html Per utilizzare l'encoder. http://www.lejos.org/nxt/nxj/tutorial/motortutorial/motortutor3.html Gestione della rotazione, inerzia e freno. http://www.lejos.org/nxt/nxj/tutorial/motortutorial/motortutor4.html Esecuzione rotazione in un thread http://www.lejos.org/nxt/nxj/tutorial/motortutorial/motortutor5.html Regolazione della velocità

Il primo programma

Cosa usare

La soluzione

Controllo software dei motori

Altri metodi della classe NXTRegulatedMotor boolean ismoving(); int getlimitangle() int getspeed() int getactualspeed() boolean isstalled() resettachocount() void setacceleration(int acceleration) void getacceleration() suspendregulation()

Altre classi per i motori La classe NXTMotor per esempio è utile quando non si vuole regolare la velocità dei motori. - setpower(int apower) Used to control motor power directly. Use a value between 0 and 100. - int getpower()

Provare i programmi Riportati al seguente link: http://www.lejos.org/nxt/nxj/tutorial/motortutorial/controllingmotors.ht Scrivere un programma per replicare il movimento di un motore B in base allo spostamento manuale di un motore A

Gli encoder Il trasduttore di posizione angolare, è un dispositivo elettromeccanico che converte la posizione angolare del suo asse rotante in segnali elettrici numerici digitali Gli encoder si possono dividere in due grandi categorie: * assoluti (http://it.wikipedia.org/wiki/codice_gray) * relativi (noti anche come incrementali)

Gli encoder relativi

Gli encoder relativi hanno in genere da 100 a 6.000 aree per giro due piste fuori fase permettono di ottenere sia la posizione che la direzione della rotazione

Controllo dei motori in retroazione Gli encoder, tramite opportune funzioni, permettono di controllare la velocità, la posizione e di sincronizzare i motori.

Controllo dei Sensori Lejos mette a disposizione diverse classi per controllare e interrogare i sensori, le porte di collegamento vengono identificate con SensorPort.S1, S2, S3 o S4. Iniziamo dal più semplice: il sensore di contatto La classe è la TouchSensor, che va istanziata con il costruttore TouchSensor(SensorPort port)

Il sensore di contatto

Esempio di utilizzo del sensore di contatto import lejos.nxt.lcd; import lejos.nxt.sensorport; import lejos.nxt.touchsensor; public class TouchTest { public static void main(string[] args) throws Exception { TouchSensor touch = new TouchSensor(SensorPort.S1); while (!touch.ispressed()) { // try again } LCD.drawString("Finished", 3, 4); } }

Lettura dei valori dal sensore Come si può notare dall'esempio, per interrogare il sensore si usa il metodo Bool ispressed()

Programma di esempio task main() { SetSensor( S1, SENSOR_TOUCH ); } while( true ) { if( Sensor(S1)==0 ) { OnFwd(OUT_AB,50); } else { OnRev(OUT_AB,50); Wait(500); OnFwd(OUT_A,50); Wait(500); } }

Esercizi 1) Spostare in avanti per 2 secondi con potenza pari al 25% e tornare indietro per 1 secondo con velocità al 50%. 2) Mettere a velocità massima solo una ruota per tre secondi. 3) Mettere a velocità massima una ruota e massima negativa l'altra, per 3 secondi.

Esercizi da svolgere 4) Cosa cambia nel comportamento dell'esercizio 2 e 3? 5) Ripetere le istruzioni degli esercizi precedenti per tre volte usando un blocco di ripetizione, intervallando ogni ripetizione con tre secondi di pausa. 6) Usando il righello e gli altri strumenti necessari, determinare per quanto tempo devo far funzionare i motori al 50% perché il robot si sposti di 20 cm in linea retta. Come posso fare per avere una risposta più precisa?

Esercizi da svolgere 7) Far muovere il robot lungo il perimetro di un quadrato di lato 40 cm, al 60% della velocità utilizzando una delle funzioni degli esercizi precedenti. 8) Il robot si deve muovere a velocità costante pari al 50%. In caso di urto (rilevato dal sensore di contatto) deve arretrare di 20 cm, ruotare di 120 e ripartire al velocità costante.

Esercizi da svolgere 9) Contiamo gli urti: il robot si deve muovere a velocità costante, pari al 60%, in caso di urto (rilevato dal sensore di contatto) deve incrementare un'apposita variabile. Se il numero nella variabile è pari deve arretrare di 20 cm, ruotare di 120 e ripartire a velocità costante, se il numero è dispari deve arretrare di 20 cm, ruotare di 180 e ripartire a velocità costante.

Il sensore di luminosità Il sensore determina il livello di luminosità nell'ambiente; può anche emettere luce per poi rilevare quella riflessa.

Il sensore di luminosità

Controllo e utilizzo del sensore di luminosità La classe per l'utilizzo del sensore di luminosità è LightSensor istanziata con il costruttore LightSensor(SensorPort port) Possiamo interrogarlo con i metodi getlightvalue() getnormalizedlightvalue() oppure SensorPort.S1.readRawValue() SensorPort.S1.readValue()

Esempio di utilizzo del sensore di luminosità import lejos.nxt.lcd; import lejos.nxt.lightsensor; import lejos.nxt.sensorport; public class LightTest { } public static void main(string[] args) throws Exception { } LightSensor light = new LightSensor(SensorPort.S1); while (true) { } LCD.drawInt(light.getLightValue(), 4, 0, 0); LCD.drawInt(light.getNormalizedLightValue(), 4, 0, 1); LCD.drawInt(SensorPort.S1.readRawValue(), 4, 0, 2); LCD.drawInt(SensorPort.S1.readValue(), 4, 0, 3);

Il monitor dell'nxt Il monitor risulta utile per Debugging Settaggio di parametri Messaggi durante l'esecuzione Grafica Giochi

Carateristiche del monitor Il display ha una risoluzione 100 x 64 px è possibile disegnare qualsiasi cosa sullo schermo, ma visualizzeremo solo numeri o testi

Principali funzioni per il controllo del monitor La classe non ha istanze, solo metodi statici In modalità testo x da 0 to 15 e y da 0 a 7 void drawstring(string str, int x, int y) void drawint(int i, int x, int y) void drawint(int i, int places, int x, int y) void clear()

Esempi di utilizzo del display import lejos.nxt.lcd; public class LCDTest { public static void main(string[] args) throws Exception { LCD.drawString("Free RAM:", 0, 0); LCD.drawInt((int) System.getRuntime().freeMemory(), 6, 9, 0); Thread.sleep(2000); } }

Esercizi 1) Visualizzare sul monitor dell'nxt il valore di luminosità rilevato dal sensore impostato in modalità percentuale e poi in modalità raw. 2) Scrivere un programma per seguire una linea scura su fondo bianco utilizzando un solo sensore di luminosità.

Esercizi 3) Far ruotare per 360 il robot attorno al proprio asse. Memorizzare per ogni grado la luminosità rilevata utilizzando un vettore. Al termine della rotazione individuare l'angolo in cui è stata rilevata la massima luminosità e quindi riportare il robot in quella posizione.

Sensore ad ultrasuoni Valuta la distanza degli oggetti tramite onde acustiche E' un sensore intelligente, utilizza il protocollo I2C

Programmi 1) Far muovere in linea retta il robot fino a quando incontra un ostacolo ad una distanza inferiore a 40 cm. In questo caso farlo ruotare su se stesso di un angolo casuale compreso tra 100 e 180 e farlo di nuovo muovere in linea retta. Terminare il programma dopo cinque incontri.

Programmi 2) Far muovere il robot in linea retta. Quando viene rilevato un ostacolo ad una distanza inferiore al metro, la velocità deve diminuire direttamente proporzionale alla distanza fino ad annullarsi a 40 cm dall'ostacolo stesso. In ogni caso, giunto a 50 cm dall'ostacolo, il robot deve ruotare di 180 e riprendere il movimento rettilineo al 75% della velocità massima.

Programmi 3) Usare il sensore ad ultrasuoni per determinare la velocità di avvicinamento ad un muro (in cm/s) del vostro robot e visualizzarla sul monitor in modo che sia leggibile. Confrontare il risultato con una misura spazio/tempo effettuata da voi e con i calcoli teorici effettuati conoscendo il diametro della ruota e il numero di giri della ruota.