Attirati dall'
articolo di presentazione su Technology News, Elijah Baley, Daneel Olivaw ed io - i primi due protagonisti, umano e robotico, del ciclo dei robot di Asimov - abbiamo dato un'occhiata alla CTP (Community Technology Preview) di
Microsoft Robotics Studio, l'IDE presentato martedì scorso alla
RoboBusiness Conference 2006, con l'intenzione di cavalcare il mercato della robotica. Sul sito indicato sono presenti le demo di terze parti presentate alla conferenza, oltre ad una nutrita
serie di tutorial.
Con
Robotics Studio si possono generare servizi modulari per pilotare l'hardware dei sensori/attuatori attraverso interfacce Web o classiche applicazioni Win32. Il motore di simulazione
PhysX, licenziato dalla
AGEIA nella versione 2.4.2, offre un ambiente di simulazione 3D (potete vederne qualche
spettacolare esempio), installato purtroppo solo su Windows XP (l'altra piattaforma supportata è Windows 2003 Server), ove richiede l'installazione della versione datata aprile 2006 delle DirectX.
Robotics Studio usa una libreria concorrente basata su .NET, che semplifica lo sviluppo di applicazioni asincrone, ed un'architettura di messaggistica modulare orientata ai servizi, basata sul
modello REST, usata per determinare lo stato dei sensori/attuatori tramite browser.
Quest'architettura assicura la possibilità di sviluppo con qualsiasi linguaggio compatibile, ma quelli supportati da Microsoft sono: C#, VB.NET, JScript ed il nuovissimo
IronPython.
Il
file di setup pesa circa 25 MB, e la CTP può essere installata anche con la
Visual C# 2005 Express Edition gratuita. Il setup non presenta alcuna difficoltà ma, come ricordato, se volete usufruire del motore 3D di AGEIA dovrete scaricare l'ultima versione delle DirectX: un download da 12 MB e passa.
Troverete tutti i file del prodotto in una cartella sotto la root del vostro disco fisso; in particolare nella
bin, oltre agli Assembly, sono forniti i quattro DSS tools a linea di comando per creare e gestire i nodi DSS (vedi oltre), nella cartella
documentation abbiamo la versione attuale dell'help, mentre le altre cartelle ospitano numerosi esempi. E' probabile che, come me, Elijah e soprattutto Daneel, siano attirati dalle spettacolari simulazioni della sottocartella
samplesSimulationTutorials: basta lanciare in esecuzione il Microsoft Robotics Studio Command Prompt da
Start | Programmi, e digitare
devenv, seguito dal nome del file di progetto di uno degli esempi (per es.
SimulationTutorial1.csproj), per poi premere il magnifico F5. Il rendering è ottimo anche su una modesta scheda grafica come la mia ATI Mobility Radeon X300.
I servizi del runtime sono forniti dai DSS (Decentralized System Services), che implementano lo scambio di messaggi asincroni fra nodi DSS; un meccanismo di
isolamento garantisce l'affidabilità ed il parallelismo dei componenti in un sistema distribuito. I componenti dei DSS sono tre: il
Common Concurrency Runtime (CCR), una libreria di costrutti di programmazione usati per coordinare le operazioni fra applicazioni sviluppate con Robotics Studio, il WSAP (Web Services Application Protocol), ed i servizi
core di attivazione, discovery, persistenza, debugging e diagnostica. Per motivi prestazionali, la comunicazione con le
porte esposte dai Web Services viene gestita da
delegates C#, invece di usare thread del sistema operativo.
Per far partire un nodo DSS useremo l'utility
dsshost.exe da riga di comando, specificando una porta per ricevere le richieste HTTP come parametro; potremo poi collegarci dal browser al nodo DSS, digitando http://localhost:
numero_porta. Lo sviluppo di un'infrastruttura di servizi avviene in maniera mista: i servizi vengono creati e fatti partire dal Microsoft Robotics Studio Command Prompt, mentre il codice di integrazione viene scritto in Visual Studio. In generale, per utilizzare un servizio sono richiesti tre step: aggiungere un riferimento all'assembly che contiene il proxy del servizio da contattare (per es.
RoboticsCommon.Proxy.dll per i sensori di contatto), inserire nel codice una direttiva
using per il servizio, e creare una porta per la comunicazione con il servizio.
Verrà automaticamente generato un file
manifesto XML, che contiene anche il riferimento al contratto del servizio. Si scrive poi il codice per far partire il servizio, che contiene anche il metodo per le sottoscrizioni, e si procede implementando gli
handler per gli eventi. Per l'apprendimento, oltre alla Development Guide nell'Help, è anche disponibile una
serie di tutorial, le consuete demo (corredate da intervista al team di sviluppo) su
Channel 9, e ci si può rivolgere con fiducia al blog ed al newsgroup della
Community.