Zero Robotics è una competizione internazionale di programmazione di robotica aerospaziale, che si basa sulla programmazione di speciali robot denominati SPHERES, ovvero satelliti artificiali simil-sferici (in realtà a 18 facce), realizzati dal MIT, situati all'interno della Stazione spaziale internazionale.
La competizione inizia online, sul sito web della competizione, dove le persone si possono registrare per far poi parte di una squadra (Team), capitanata da Capi Squadra (Mentors). Le squadre che si vengono a formare possono così partecipare ad una gara che si ripete annualmente.
I partecipanti alla gara possono creare, modificare, condividere, simulare, e presentare il proprio codice, attraverso il proprio browser web. Dopo varie fasi di svariate competizioni virtuali secondarie, si selezionano i finalisti per competere dal vivo in un campionato a bordo della ISS. Un astronauta condurrà la competizione finale in una situazione di microgravità attraverso un canale di comunicazione in diretta.
La competizione Zero Robotics si divide in tre tipi di torneo.
I partecipanti competono tutti insieme per vincere un gioco tecnicamente impegnativo, motivato da un problema di attuale interesse per il DARPA, la NASA e per il MIT. A seconda della sfida da affrontare, gli studenti devono programmare i loro satelliti per completare alcuni obbiettivi (evitare ostacoli, raccogliere oggetti virtuali, distruggere obbiettivi, etc.) preservando le risorse primarie (carburante, cariche di energia, etc.) e completare la sfida all'interno di determinati limiti di tempo e di spazio per la scrittura del codice. Il software degli studenti deve poter controllare fattori quali la velocità del satellite, la rotazione, la direzione di marcia, e molti altri, per poter trovare l'algoritmo perfetto per raggiungere lo scopo e vincere le sfide nel minor tempo possibile rispetto agli avversari.
La difficoltà sta anche nel fatto che i programmi sono "autonomi", nel senso che nel momento in cui vengono eseguiti essi durano per l'intera durata della sfida e non è possibile controllarne o modificarne l'esecuzione. È da notare in aggiunta che la memoria programmabile dello SPHERES ha un limite, il che porta a forzare all'uso di uno stile di programmazione pulito e senza sprechi di risorse.
I partecipanti a Zero Robotics sono spinti a imparare e/o migliorare le proprie conoscenze inerenti alla fisica di base, in quanto la situazione ideale della gara consiste nel trovare l'ottimale algoritmo di spostamento in assenza di gravità, imponendo forze, e/o velocità al satellite. È comunque possibile ottenere discreti risultati lavorando esclusivamente tramite imposizione di coordinate al satellite.
I partecipanti alla sfida Zero Robotics imparano a programmare in un linguaggio simil-C/C++, in cui si possono usare diverse APIs per imporre i parametri principali dei movimenti del satellite. L'ambiente di sviluppo per scrivere il codice si trova online sul sito ufficiale della competizione, ed è chiamato IDE.
Elemento molto importante, talvolta il principale, sono le scelte strategiche che una squadra deve effettuare per ottenere il meglio dal proprio codice e vincere in modo efficace la sfida contro l'avversario. Le scelte strategiche, talvolta controintuitive, derivano da attente analisi matematiche, fisiche, operative, che stimolano l'utilizzo approfondito delle conoscenze apprese in varie materie.
La programmazione del satellite è solitamente familiare a coloro che hanno avuto esperienze con Arduino. Per comandare il satellite vi sono infatti due metodi che saranno sempre presenti nel codice: Si tratta di init e loop.
init è necessario per inizializzare le variabili all'inizio dell'esecuzione. Questo perché init viene eseguito una sola volta all'avvio del satellite. In aggiunta bisogna notare che le variabili non possono essere pre-assegnate fuori da questo metodo: devono essere istanziate in maniera globale all'esterno di init, ma non possono essere pre-assegnate se non al suo interno.loop è il metodo di esecuzione. Dopo che init termina l'esecuzione, il satellite inizierà ad eseguire tutto ciò che si trova all'interno nel metodo loop, e lo farà automaticamente, ogni secondo, all'infinito (o comunque fino a che non scadrà il tempo massimo di esecuzione che varia di gara in gara).È importante rimarcare che loop viene ripetuto all'infinito. Prendere atto di ciò è alla base della programmazione degli SPHERES.
Per spostare il satellite è necessario utilizzare alcuni metodi presenti nell'ambiente, appartenenti alla classe informatica api. Ecco le alcune funzioni appartenenti a questa classe:
ZRState è una definizione che corrisponde ad un vettore di 12 elementi a virgola mobile (float). api.getMyZRState( ZRState myState ) popola una variabile di tipo ZRState con informazioni necessarie per capire dove si è nel piano, con che velocità ci si sta spostando, e altre. Precisamente le informazioni sono indicizzate con quest'ordine:Esempi di utilizzo:
/**
* Il codice utilizza l'API: api.getMyZRState( ZRState myState );
* Il codice utilizza il metodo DEBUG(()) per mostrare a video quale sia la posizione del satellite.
*/
void init() {
}
void loop() {
ZRState myState;
api.getMyZRState( myState ); // Ora myState è popolato
DEBUG(("Il satellite si trova in X: %f Y: %f Z: %f \n", myState[ 0 ], myState[ 1 ], myState[2] ));
}
Verrà istanziata una variabile di nome myState e di tipo ZRState, e verrà scritta tramite api.getMyZRState( myState ) che restituisce le coordinate e le velocita' dello SPHERES. Il risultato sarà che verrà continuamente mostrata a video (tramite DEBUG()) la posizione del satellite (in X, Y, Z, rispettivamente indicizzati in 0, 1 e 2 nel vettore myState, seguendo l'elenco riportato in alto).
Nel codice è utilizzato un metodo speciale: DEBUG(()). Esso va utilizzato con le doppie parentesi tonde, come riportato dalla documentazione ufficiale. DEBUG si comporta in modo analogo a printf.
Il codice sorgente di un programma tipico dell'ambiente IDE di Zero Robotics può essere il seguente.
/**
* Il codice fa spostare il satellite alle coordinate X Y Z {0.5, 0.3, -0.4}
* Il codice per spostarsi usa l'API: setPositionTarget( [3] );
* Il codice utilizza DEBUG(()) per stampare il tempo di esecuzione
* Il tempo di esecuzione è salvato in una variabile globale 'time'.
*/
int time;
void init() {
time = 0;
}
void loop() {
float obbiettivo[3] = {0.5, 0.3, -0.4};
api.setPositionTarget( obbiettivo );
DEBUG(("Tempo di esecuzione: %d \n", time));
time++;
}
Dal codice si denota come il satellite, all'infinito, tenterà di andare alle coordinate X Y Z = {0.5, 0.3, -0.4}.
Le squadre che hanno vinto l'High school tournament sono le seguenti:
| Anno | Alleanza Vincitrice | 2º posto | 3º posto | 4º posto |
|---|---|---|---|---|
| 2011 - Campionato Europeo Sperimentale | CyberAvo:
|
|
||
| 2012 - Campionato Europeo | Team "B.E.E.R."
|
|
|
|
| 2013 - Campionato Europeo | Team "C.O.F.F.E.E."
|
|
||
| 2013 - Campionato Italiano | ||||
| 2014 - Campionato Mondiale | Team LakeElevenVADARS:
|
Team BACON Zanneio BRRobotics:
|
Team CrabTachyonsMontaVista:
|
Team NullPointerO.L.E.Ohms:
|
| 2014 - Campionato Italiano | LSA Robotics Team #2 (Liceo Scientifico Avogadro, Vercelli) | The Fermi Floating Team (Liceo Scientifico "E.Fermi", Padova) | Dominoes (Liceo Scientifico F. Vercelli, Asti) | Zero Satellite (Liceo Scientifico F. Vercelli, Asti) |
| 2015 - Campionato Mondiale | EX-AEQUO
|
EX-AEQUO
| ||
| 2015 - Campionato Italiano | TeamOre (Istituto Tecnico F. Marchi, Pescia) | ArtoBotics (ITIS A. Artom, Asti) | Schrödinger's Dead Cat (Liceo Leonardo da Vinci, Firenze) | Kalypso (IIS Europa Unita, Chivasso (TO)) |
| 2016 - Campionato Mondiale | Team SpaceLinguine:
|
Team FlyingFalconsTheQuarkCharmCode::Space:
|
EX-AEQUO
| |
| 2016 - Campionato Italiano | Millennium Falcon (Liceo Scientifico Cecioni, Livorno) | ZeRo LSA Robotics Team (IIS Avogadro - Liceo Scientifico, Vercelli) | Pablitis (I.T.I "R. Elia" , Castellammare di Stabia) | JvNeumann_POLLENZA (I.I.S.S. "J von Neumann", Roma) |
| 2017 - Campionato Mondiale | EX-AEQUO
|
EX-AEQUO
| ||
| 2018 - Campionato Mondiale | Team Naughty Dark Spaghetti:
|
TeamHit or Miss:
|
Tutte le altre squadre sono ex aequo "partecipanti"
NON sono state definite graduatorie oltre il 2º posto. | |
| 2019 - Campionato Italiano | LSA Spoleto A. Volta (Liceo scientifico A. Volta, Spoleto) | Spaghetti Programmers (Lss Galileo Ferraris, Torino) | Made in Heaven Technologies (IIS Giulio Natta, Rivoli (TO) + Liceo Juvarra, Venaria Reale (TO)) | Fermi4Tech (Liceo S.S. “E.Fermi”, Padova) |