Introduzione
Un sistema
multirobot e' costituito da un insieme di robot automi situati in un ambiente
con il compito di perseguire un predeterminato obiettivo. Ogni robot
e' dotato di sensori per acquisire informazioni sull'ambiente, di attuatori
per alterare lo stato dello stesso e di un software di decisione che elabora
i dati acquisiti e delibera le azioni da intraprendere. Tali sistemi, attualmente
oggetto di numerose ricerche ed iniziative, sono piuttosto costosi e le
simulazioni vengono spesso utilizzate nel primo stadio di sviluppo
per testare la bonta' delle soluzioni adottate. VLAB e' un simulatore per
sistemi multirobot, con la particolarita' di essere scritto in Java, linguaggio
tradizionalmente snobbato nell'ambito delle simulazioni in quanto ritenuto
scarsamente performante; il rendering tridimensionale dei risultati
ottenuti si basa su VRML 2.0. Il laboratorio "virtuale" creato risiede
sul web e diversi utenti-sperimentatori possono contemporaneamente, e da
qualunque postazione collega alla rete, accedere, osservare quanto accade,
ed inserire i propri agenti robotici. La scelta di utilizzare Java proviene
dalle positive esperienze maturate nell' interfacciamento tra Java
e VRML, dalla natura distribuita dell'ambiente che si intende sviluppare
e dalle possibilita' offerte dall'API Java3D recentemente rilasciata da
Sun.
Architettura
del sistema
VLAB e' una
applicazione client-server. Il server VLAB costituisce un nucleo di basso
livello su cui costruire di volta in volta ambienti di simulazione ad hoc,
sfruttando le possibilita' offerte dall'approccio object-oriented proprio
di Java. Il client e' invece un applet che consente all'utente di visitare
il laboratorio utilizzando un browser in grado di operare con VRML. Il
server VLAB e' una applicazione che opera secondo la nota modalita' multithread
serving; dopo una fase di inizializzazione questa si pone in ascolto
su di un port TCP e quando rileva una connessione crea ed avvia un
thread cui affida la gestione della comunicazione con l'utente appena entrato
nel laboratorio. Le classi dei package java.net e java.io rendono
estremamente rapido lo sviluppo secondo questo approccio, peraltro
oramai diffuso.
La connessione
avviene quando un utente visita la pagina HTML del laboratorio.
L'applet Client,
dopo aver aperto un socket di comunicazion con il server ha due compiti:
spedizione dei comandi impartiti da client e gestione delle informazioni
ricevute dal server. Tali informazioni possono essere stringhe di comunicazione
da visualizzare sullo schermo o particolari comandi di visualizzazione
che l'applet, dopo averle opportunamente formattate, passa al plug-in
di gesione di VRML per l'aggiornamento della scena.
Il cuore di
VLAB e' comunque la gestione della simulazione vera e propria; l'aggiornamento
dell'ambiente comporta la modifica della posizione degli elementi
presenti, nel rispetto delle leggi della fisica. Il modulo
Environment
e' un thread che si occupa di tutto cio'; Environment ciclicamente analizza
posizioni, velocita', accelerazioni ed effettua gli aggiornamenti necessari,
avendo cura di mantenere una rappresentazione coerente del modello. E'
quindi necessario controllare che due robot non si compenetrino andanto
ad occupare lo stesso spazio fisico, o aggiornare le velocita' in seguito
ad urti, ecc. In questo contesto si possono testare gli algoritmi sviluppati
di recente per questi scopi.
Per la gestione
del modello si e' rivelato particolarmente utile il package javax.vecmath
facente parte dell'estensione standard Java3D.
Tale package
dispone di una libreria estremamente fornita di oggetti matematici per
la gestione di oggetti posizionati nello spazio tridimensionale. Esistono
classi che definiscono punti, vettori, quaternioni,
matrici e matrici
di trasformazione, ognuna delle quali e' dotata di metodi che permettono
di realizzare efficientemente operazioni come traslazioni, rotazioni attorno
ad un asse, prodotti vettoriali, ecc.
Java3D e VRML
Java3D e' stata
utilizzata anche per la simulazione dell'input proveniente dalle telecamere.
I robot mobili sono infatti sempre piu' spesso dotati di hardware dedicato
all'acquisizione di immagini ed il simulatore VLAB permette di modellare
questa possibilita'. La simulazione in questione si basa sull'uso congiunto
di VRML e Java3D; gli oggetti che devono essere inseriti nell'ambiente
vengono definiti come modelli VRML (semplici file testo) e successivamente
vengono caricati ed istanziati all'interno delle strutture dati di Java3D
(detta scene-graph). Il passaggio da VRML a Java3D e' estremamente
semplice, e comunque esistono delle librerie che possono essere utilizzate
allo scopo (si veda ad esempio http://www.vrml.org/WorkingGroups/vrml-java3d/);
successivamente e' possibile richiedere a Java3D di effettuare il rendering
della scena definendo il punto di osservazione da utilizzare. In VLAB questo
e' stato fatto sfruttando le funzioni di compatibilita' di Java3D che mettono
a disposizione delle primitive simili a quelle che si trovano in OpenGL
e che permettono di specificare le caratteristiche ottiche del dispositivo
utilizzato per osservare la scena, quali l'apertura, la risoluzione,
l'orientazione, ed altro. Java3D dispone comunque di un view-model piu'
sofisticato, ma il suo impiego esula dall'utilizzo previsto in VLAB.
Le immagini
prodotte da Java3D possono successivamente essere utilizzate dalle routine
di controllo dei robot per estrarre informazioni sull'ambiente in cui operano;
un aspetto operativo importante e' costituito dal fatto che tali
immagini sono delle istanze della classe BufferedImage del package java.awt.image
e quindi l'utente-sperimentatore puo' elaborarle utilizzando tutti gli
strumenti per l'elaborazione delle immagini
messi a disposizione
da Java. La figura 1 riporta un esempio di cio' che vede un robot all'interno
dell'ambiente; sono visibili un disco rosso sul pavimento ed un altro robot
in alto a destra.
Possibilita'
offerte da VLAB
Vediamo ora
come si svolge una tipica sessione di sperimentazione in VLAB, assumendo
che sia attivo un server VLAB che gestisce una estensione per la
simulazione di un determinato task per sistemi multirobot. L'utente decide
come saranno strutturati gli agenti che intende inserire nel simulatore,
ovvero quali sensori ed attuatori avranno. Tali specifiche vanno scritte
su di un file ASCII secondo una sintassi stabilita da VLAB. Successivamente
viene scritto il software che controlla il robot, che e' necessariamente
una estensione della classe VLAB.agent. In tale modulo tipicamente vengono
richiesti degli input dai sensori, vengono elaborate tali informazioni
e vengono inviati dei dati agli attuatori. Dopo aver compilato tale
classe l'utente puo' connettersi con un browser al server VLAB ed entrare
nel laboratorio; a questo punto si possono spedire i due file prodotti
in precedenza (il bytecode ed il file ASCII che definisce la morfologia)
al server VLAB e richiedere una simulazione.
VLAB legge il
file che specifica la struttura del robot ed istanzia il robot corrispondente
nell'ambiente; successivamente carica il bytecode e lo manda in esecuzione
permettendogli di controllare l'agente inserito. Quando il modulo
di controllo richiede dei dati in ingresso (ad esempio una immagine
dalla telecamera, o una stima di prossimita' di eventuali ostacoli) VLAB
provvede produrre tali informazioni
ed a fornirgliele;
analogo comportamento si manifesta quando il software impartisce
al robot ordini del tipo "ruota di due gradi a destra" o "chiudi la prima
delle due pinze". In background viene eseguito un
thread che periodicamente
invia delle informazioni all'applet client per aggiornare la scena VRML
che si presenta nel browser dell'utente. Ovviamente e' possibile istanziare
piu' di un robot contemporaneamente,
aventi tutti
lo stesso modulo di controllo e la stessa morfologia, oppure inserire in
sequenza piu' agenti diversi tra di loro. Se durante una simulazione un
sencondo utente entra nel laboratorio, il server VLAB fornisce all'applet
Client tutte le informazioni necessarie per inziare un rendering della
scena a partire dallo stato attuale della simulazione; il nuovo utilizzatore
puo' a sua volta inserire i propri agenti ed osservarne il comportamento.
I diversi utenti presenti possono inoltre comunicare tra di loro, immettendo
del testo nell'applet, che lo invia al server VLAB, il quale lo rispedisce
in modalita' broadcast.
|
Figura 1
Sistema ed
implementazioni utilizzate
Il server VLAB
viene normalemente eseguito su di un biprocessore Pentium III a 450 MHz
che utilizza il sistema operativo Linux. VLAB e' stato scritto utilizzando
JDK 1.2 per Linux e Java3D 1.1.1. Un problema che tuttora permane e' la
mancanza di una release stabile di JDK 1.2 per Linux; quella che viene
attualmente utilizzata e' una pre-release che in alcune situazioni presenta
dei comportamenti anomali. Se si opta per un utilizzo basato su green-thread
e JIT disabilitato si ottiene comunque un comportamento piu' che buono,
anche se non ottimale.
I sistemi su
cui sono stati eseguiti i client sono stati PC con sistema operativo MS-WIN,
Machintosh e workstations Silicon Graphics.
Per quanto riguarda
VRML si e' utilizzata la versione conforme alla specifica 2.0.
|
Figura 2
Conclusioni
e prospettive
Il lavoro presentato
costituisce un banco di prova insolito per il linguaggio Java ma
i risultati ottenuti premiano la scelta fatta. Lo sviluppo dell'applicazione
e' stato rapido e ci si e' potuti concentrare sugli aspetti inerenti
alla simulazione senza dover dedicare troppo tempo ai dettagli di basso
livello, che vengono gestiti agilmente basandosi sulle classi standard
di Java. L'aspetto forse piu' eclatante e' la facilita' con cui in Java
si riesce ad avviare e gestire un sistema mutlithreading con una dozzina
di thread che cooperano o concorrono per l'utilizzo di risorse condivise.
L'utilizzo di Java3D congiuntamente a VRML si e' dimostrato potente
e di facile impostazione. Nel prossimo futuro si sviluppera' una libreria
estesa di sensori ed attuatori
per equipaggiare
i robot mobili inseriti e si provvederà ad integrare in VLAB le
varie tecnologie che si stanno rendendo disponibili per rendere piu' performanti
le applicazioni Java.
VLAB fa parte
del progetto "Sviluppo di sistemi per la simulazione e la restituzione
in grafica 3D e Realta' Virtuale di robot autonomi e di sistemi flessibili
per l'automazione industriale", nell'ambito della convenzione tra ENEA,
LADSEB (Istituto di Sistemistica e Bioingegneria - Consiglio Nazionale
delle Ricerche) e DEI (Dipartimento di Elettronica ed Informatica) dell'Universita'
di Padova, relativa all'accordo di programma ENEA-MURST, Legge 95/1995,
settore "Calcolo Parallelo con Applicazioni alla Robotica".
Un particolare
ringraziamento va a Stefano Tognon, che ha sviluppato l'applet Client.
|