Home    About me    Publications    Blog    Photo gallery
Some other old good stuff

Fabio Ruini’s blog

Because Italians do it better! What the f**k? Ehm… the blogs, I mean… obviously! :-/

Vittoria!

Ebbene si’. Dopo tre giorni di lotta sono finalmente riuscito a compilare il mio simulatore per girare sotto Windows. Successo pieno. Tutto sembra funzionare alla perfezione: sia l’engine evolutivo, sia il viewer.

Screenshot of Microsoft Visual C++ 2008 Express Edition while compiling my 3D MAVs evolutionary engine

Pochissime le modifiche che ho dovuto apportare al codice. I path vengono infatti gestiti bene dalle Qt (l’unica avvertenza consiste nel fatto che, nel file di configurazione che uso e, quindi, all’interno del codice, occorre specificare i percorsi utilizzando il carattere / al posto di \ anche quando si compila/esegue l’applicazione su Windows) e per quelle poche parti dei sorgenti per le quali si e’ reso necessario scrivere istruzioni diverse a seconda del sistema operativo in uso ho potuto fare ricorso alle macro Qt per il preprocessore Q_WS_WIN e Q_WS_MAC.

My MAVs 3D evolutionary engine running on the Windows command prompt (VC++ 2008 EE)

Preso dall’euforia ho pure preparato un piccolo package del viewer che, in teoria, dovrebbe essere in grado di girare su qualunque macchina Windows, anche in assenza delle varie librerie richieste per la compilazione. Tutto cio’ MOLTO in teoria. Nella realta’ sono abbastanza scettico che il tutto possa funzionare cosi’ al primo colpo, ma non si sa mai. Se qualcuno di voi volesse fare un tentativo e darmi qualche feedback, il pacchetto e’ scaricabile da qui sotto. Una volta scompattato l’archivio, l’eseguibile lo trovate nella directory bin, mentre un controller di esempio e’ contenuto nella cartella nn.

Nel caso l’applicazione non volesse saperne di avviarsi, vi lascio comunque con uno screenshot che mostra quello che vi siete persi (se ve lo state chiedendo, l’immagine e’ tagliata in quanto la dimensione verticale della finestra di Irrlicht e’ troppo grande in confronto alla risoluzione del mio netbook, che pure e’ di tutto rispetto).

MAVs 3D simulator (screenshot of the viewer captured on Windows)

Ok, lo ammetto. Non e’ che vi siate persi un granche’. Ma dato tutto il tempo che ci ho speso sopra, fate almeno finta di essere piacevolmente colpiti, dai…

Irrlicht and NNFW 1.1.5 on Visual C++ 2008 Express Edition

Alla fine non e’ neppure stato cosi’ difficile. Come avevo accennato nel post di martedi’, lo step successivo al quale sarei dovuto sottopormi nel tentativo di portare il mio simulatore di MAVs (ed il corrispondente visualizzatore) su Windows riguardava il ricompilare Irrlicht in Visual Studio 2008. L’operazione e’ stata molto piu’ semplice del previsto. E’ bastato infatti scaricare i sorgenti (versione 1.7.1) dal sito ufficiale, fare le modifiche necessarie (nel mio caso ho apportato la correzione per il bug discusso qui, nonche’ disabilitato il supporto per le DirectX 8 e 9, che non mi erano necessarie), aprire in VC++ il progetto Irrlicht9.0.vcproj e compilarlo sia in modalita’ debug, sia in release.

Quello che non avevo preso in considerazione era il fatto che mi sarei anche dovuto ricompilare il Neural Network Framework, dato che i binari per Windows sembrano non funzionare. Parlando con Gianluca ho scoperto che nel repository SVN del progetto c’e’ una versione piu’ aggiornata dei sorgenti, che ho provveduto a scaricare (svn checkout https://svn.berlios.de/svnroot/repos/nnfw/trunk da *NIX/MacOS), configurare attraverso CMake (nella figura qui sotto il settaggio finale) e poi compilare con il solito Visual C++ 2008 Express Edition mediante il progetto appena creato. Ancora una volta sia in modalita’ debug che release, ed alternando tra una compilazione statica ed una dinamica della libreria (opzione modificabile assegnando o meno il valore shared alla variabile NNFW_CONFIG in CMake).

CMake settings for compiling the Neural Network Framework (NNFW)

Una volta fatto tutto questo, una giornata ed un’infinita’ di bestemmie sono volate nel tentativo di compilare un’applicazione di esempio basata su Qt e NNFW. Per qualche motivo, la DLL delle NNFW sembrava essere corrotta. O, perlomeno, questo e’ cio’ che VC++ andava sostenendo al momento del linkaggio. Anche ricompilando il framework le cose non cambiavano di una virgola. Pazienza. Utilizzando il LIB, tutto compilava e linkava correttamente. La cosa comica e’ che quando lanciavo l’applicazione (anche in una versione ipersemplificata, che avrebbe semplicemente dovuto stampare alcuni caratteri a schermo e scrivere un file di testo sul disco), non succedeva assolutamente nulla. Nessun errore e terminazione con codice 0. Ma sia dell’output grafico che del file di testo nessuna traccia. Grazie all’aiuto di un collega sono poi riuscito a venire a capo di questa situazione prima che mi portasse alla follia. C’era una mancanza nel file progetto di Qmake che avevo utilizzato per generare il progetto VC++. Una mancanza che pare essere del tutto innocua su sistemi *NIX-like, ma che evidentemente e’ molto importante in Windows. Semplicemente mancava una riga (CONFIG += console) che specificasse il fatto che l’applicazione da creare era un’applicazione da console.

Ora che tutto sembra funzionare inizia il divertimento. In nottata si faranno le prime prove di compilazione del simulatore e si guardera’ un po’ che succede. Fingers crossed.

Nota a margine. Se volete includere le NNFW in un file progetto CMake, apparentemente quello che segue e’ il codice da utilizzare.

FIND_PACKAGE( NNFW )
ADD_DEFINITIONS( ${NNFW_DEFINITIONS} )
INCLUDE_DIRECTORIES( ${NNFW_INCLUDE_DIRS} )
LINK_DIRECTORIES( ${NNFW_LINK_DIRS} )
SET_TARGET_PROPERTIES( evoicub PROPERTIES COMPILE_FLAGS “${LARAL_COMPILE_FLAGS} ${WORLDSIM_COMPILE_FLAGS} ${NNFW_COMPILE_FLAGS}” )
SET_TARGET_PROPERTIES( evoicub PROPERTIES LINK_FLAGS “${LARAL_LINK_FLAGS} ${WORLDSIM_LINK_FLAGS} ${NNFW_LINK_FLAGS}” )

iCub&UoP@CurrentTv

Un po’ in ritardo, ma mi giunge la notizia che l’intervista condotta qualche tempo fa, qui nel nostro laboratorio, dalla troupe italiana di Current TV (un particolare canale televisivo creato da Al Gore nel 2005) e’ stata infine montata, trasmessa ed anche resa disponibile on line.

Il contribuito plymouthiano potete trovarlo all’interno del File #9 (Intelligenza Artificiale) dei cosiddetti Geek Files, nonche’ embeddato qui sotto. Nel dettaglio potete trovare il buon Davide Marocco parlare dal minuto 4:45, mentre Martin Peniak mostra l’iCub, all’opera con la sua classica demo, a partire dal minuto 10:55.

Qt 2010.02.1 e Visual C++ 2008 Express Edition

Non mi ricordo se qui sul blog avevo gia’ accennato al fatto che mi e’ stato rifilato un altro schiavo studente di master per fare la sua tesi di MSc su qualche aspetto del lavoro che sto portando avanti. Lo studente in questione, oltre a essere francese, ha l’ulteriore sfortuna di essere un utente Windows e per di piu’ di lavorare in Visual Studio. In questi giorni ci si sta quindi divertendo come matti nel tentativo di far girare il mio simulatore sotto XP, con tutti i problemi derivanti dal fatto di dipendere da diverse librerie esterne.

Qt Demo splashscreen

Primo passo fondamentale consiste nel ricompilare le Qt per farle funzionare in Visual Studio (VC++ 2008 Express Edition, per la precisione). Due i problemini nei quali mi sono imbattuto e che a quanto leggo in giro per la rete sembrano essere piuttosto comuni.

Al primo tentativo di compilazione (dopo una configurazione fatta con configure -debug-and-release -platform win32-msvc2008), dopo qualche ora di calcolo nmake mi ha restituito un errore di linkaggio relativo al modulo QtWebKit. Poco male. Seguendo le indicazioni presenti a questo link (ovvero aggiungendo l’opzione -no-webkit al configure) e’ possibile escludere il modulo in questione e compilare quindi senza problemi.

Questo in teoria. La pratica, come spesso accade in questi casi, e’ leggermente diversa. Ed infatti, dopo essere ripartito con la compilazione, mi sono trovato davanti ad uno strano errore di undefined interface. Ancora una volta, pero’, Google ci viene incontro e ci mostra (a questo indirizzo) come risolvere la questione (per la cronaca andando a cancellare manualmente il file mocinclude.tmp da entrambe le sottodirectory contenute in \Qt\2010.02.1\qt\src\script\tmp\moc e rilanciando nmake).

Utile ricordarsi che, per utilizzare Qmake al fine di generare progetti Visual Studio, occorre aggiustare la variabile QMAKESPEC, settandola sul valore win32-msvc2008. La cosa puo’ essere fatta di volta in volta dal terminale delle Qt (con l’istruzione set QMAKESPEC=win32-msvc2008), oppure andando a modificare le variabili d’ambiente di Windows.

Prossimo appuntamento sara’ con il tentativo di ricompilare Irrlicht in Visual Studio (per via del bug discusso qualche post fa e la cui correzione non e’ ancora stata integrata in una release ufficiale della libreria). Non so perche’, ma ho il presentimento che non si trattera’ di una cosa del tutto indolore…

PS: mi e’ appena arrivata la notifica dell’accettazione del mio paper per WCCI 2010. Ergo, dal 18 al 23 di luglio saro’ ufficialmente a Barcellona.

PPS: video-conferenza pomeridiana con Losanna via Skype. Tutto confermato. Passero’ li’ il periodo compreso tra maggio e settembre. Da definire nei dettagli il piano d’azione.

Incremental evolution

Negli ultimi giorni ho lavorato in maniera abbastanza intensa sul codice del mio simulatore di MAVs, con l’intento di implementare una forma, seppur basilare, di evoluzione incrementale per i diversi scenari studiati finora con il modello 3D. La necessita’ nasce dal fatto che ancora faticano ad evolvere comportamenti di navigazione cooperativa all’interno di un’ambiente tridimensionale, con i MAVs dotati della possibilita’ di ruotare su tutte e tre le loro assi (yaw, pitch e roll).

Finalmente sono riuscito a rendere il mio codice funzionante. I grafici che trovate qui sotto mostrano le differenze in termini di performance tra una popolazione evoluta da zero (primo grafico) ed una invece gia’ evoluta (secondo grafico) nello scenario di base (navigazione 3D in un ambiente sgombro di ostacoli per il raggiungimento di un’area target statica), entrambe alle prese con un task cooperativo (ancora target statico ed ambiente privo di ostruzioni, ma necessita’ di raggiungere il target con almeno due MAVs contemporaneamente).

MAVs 3D simulator - results after 100 generations of evolution, without using incremental evolution

MAVs 3D simulator - results after 100 generations of evolution, using incremental evolution

Come si puo’ vedere (e come, d’altronde, era facilmente intuibile), la seconda popolazione parte da subito su ottimi livelli di fitness, nonostante vi sia anche una differenza architetturale tra le reti neurali all’opera nei due setup. Nel nuovo scenario, infatti, i MAVs hanno alcuni neuroni di input aggiuntivi rispetto a quello di base, con le conseguenti connessioni che vengono impostate a zero nel momento in cui l’evoluzione incrementale prende le mosse.

Come di consueto, vi lascio con qualche lettura sull’argomento. Si tratta di tre articoli ben fatti e che, sebbene non siano tarati sull’approccio che ho seguito io, possono comunque risultare interessanti da addocchiare.

Un blog interinale

Parallelamente al mio processo di ricerca, per ora non troppo intenso, di una posizione da post-doc, continuo a condividere sulle pagine di questo blog un po’ di annunci interessanti che ho trovato in giro. Questa volta si tratta di due posti disponibili in Italia, per la precisione presso l’Universita’ La Sapienza di Roma, rispettivamente nell’ambito dei progetti NIFTI (l’home page e’ ancora under construction, ma nel frattempo potete trovare qualche informazione qui) e COSMO-SkyMed.

Universita' La Sapienza, Roma - Statua della Minerva all'ingresso

2 Post-Doc position at the Department of Computer and System Science at Sapienza University of Rome for 4 years.

One position is in relation with the EU Project NIFTi and the other position is in relation with COSMO-SkyMed project.

The positions offer the possibility to work in areas of computer vision and satellite imaging, applied machine learning, 3D/4D segmentation, tracking and information fusion, pattern recognition, and graphical models.

Candidates preferably should have good programming skills (Matlab and C++), but also knowledge of logic and discrete mathematics and want to work in teams. We will only consider candidates holding a Ph.D. in Computer Science, Computer Engineering, EE or related fields with a proven record in problem solving and research.

For information please contact Fiora Pirri (fiora.pirri@dis.uniroma1.it)

La dura vita del guerrigliero rivoluzionario

Direttamente dalle pagine del Diaro in Bolivia, di Ernesto ‘Che’ Guevara, alcuni passaggi illuminanti riguardo le condizioni nelle quali versavano i guerriglieri rivoluzionari latinoamericani. Non tutte rose e fiori, diciamo.

Ernesto 'Che' Guevara - Diario in Bolivia (front cover)

16 maggio (1967)

Al principio della marcia mi e’ venuta una colica fortissima con vomito e diarrea.
Me l’hanno bloccata con demerol e ho perso conoscenza mentre mi portavano all’amaca; al risveglio mi sentivo meglio, ma mi ero sporcato come un lattante. Mi hanno prestato un paio di calzoni, ma, senza acqua, puzzo di merda a un chilometro di distanza. Abbiamo passato li’ tutto il giorno, io mezzo addormentato. Coco e Nato sono andati in ricognizione e hanno trovato un sentiero con direzione nord-sud. Lo abbiamo seguito di notte finche’ c’era la luna e poi ci siamo riposati.
Ricevuto il messaggio N.36, dal quale ci rendiamo conto di essere completamente isolati.

10 settembre

[...] Mi dimenticavo di sottolineare un fatto; dopo piu’ di sei mesi oggi ho fatto il bagno. E’ un record che gia’ alcuni di noi stanno raggiungendo.

Trust Researchers

Segnalo con il post odierno un’iniziativa lanciata da Sabine Herlitschka, Olivier Küttel, Gülsün Sağlamer ed Erika Szendrak. Si tratta di una petizione attraverso la quale si chiede agli organismi preposti dell’Unione Europea di semplificare in maniera significativa le normative che regolano il finanziamento di progetti di ricerca, le quali rappresentano un ostacolo piuttosto serio che tutti i ricercatori devono affrontare nel momento in cui desiderano attingere a fondi europei. E, soprattutto, costringono a spendere piu’ tempo in management di quanto non si possa fare sulla ricerca vera e propria.

The only bush i'd trust

Il sito al quale e’ possibile visionare la petizione ed eventualmente firmarla e’ www.trust-researchers.eu. Qui di seguito i semplici punti nei quali essa e’ articolata.

Mutual Trust
Funding of research in Europe should be based on mutual trust and responsible partnering.

Focused on research
Research has to be funded according to the nature of research, meaning concentrated on output.

Consistency
The European Research Area (ERA) should benefit from a consistent vision shared by all actors for funding research throughout the different programmes that is avoiding all kinds of unnecessary technical and administrative details but instead promoting key funding principles based on an appropriate level of accountability.

Reliablility
Research and development is of utmost importance for Europe and its future oriented development. However, we need effective, reliable and stable funding principles to make it happen.

Risk taking
Research and innovation are risk taking activities. An appropriate level of tolerable risks is vital for success and should be supported by European research programmes.

We ask the European Council of Ministers and the Parliament to urgently simplify the financial and administrative provisions related to the Framework Programme and other European funding instruments considering their important leverage effect for the competitiveness of the European Research Area.

Se la RyanAir avesse un programma per i frequent flyers sarei miliardario…

Chiusa la parentesi Portoroz (bellissima esperienza, ma appuntamento con la prima bandierina rimandato per la seconda volta) sono finalmente riapprodato a Plymouth.

plymouth2

Ho volato per la prima volta dall’aeroporto di Parma (decisamente lol), beccato una scolaresca intera sull’aereo (sviluppando, come potete ben immaginare, istinti omicidi che non mi sono eccessivamente preoccupato di tenere nascosti), atterrato a Stansted, trasferitomi a Heathrow e, da qui, dopo un’ora passata nella sala d’attesa piu’ stupida che abbia mai visto in vita mia (porte automatiche su tutti e quattro gli angoli, con conseguenti vortici d’aria gelida che si creavano non appena entrava/usciva qualcuno, ovvero continuamente) sono finalmente partito in pullman alla volta di Plymouth, dove sono sbarcato alle 2.20 di mattina. Disfatti alla veloce i bagagli, lavati i denti e fumato un paio di sigarette, sono pronto per andare a nanna. Domani si riparte carichi, con una giornata intera di workshop (Cognitive Robotics Research Methods Workshop) organizzata nel contesto di RobotDoc. In bocca al lupo a me.

Pronti per Portoroz

Nel momento in cui leggerete questo post saro’ probabilmente gia’ a bordo del mio trenino, che da Reggio Emilia muovera’ dapprima a Bologna, per poi toccare Venezia Mestre ed approdare infine a Trieste. Da dove ci dovrebbe essere (dita incrociate) la navetta che poi mi portera’ al di la’ del confine, per la precisione in quel di Portoroz, dove oggi pomeriggio avra’ inizio il Grand Slam of Poker organizzato da AssoGold.

Ricordo agli intrepidi che volessero seguirmi che PokerItaliaWeb seguira’ l’evento con un blog live che potete trovare a questo link. Io esordiro’ al day 1-B (alias venerdi’). Visti i precedenti di Campione, vi consiglio di fare presto a collegarvi con il blog e non perdervi i primi livelli, che sono gli unici durante i quali posso garantire un po’ di azione.

In questo momento, con la valigia pronta, un po’ di musica ed un libro di Phil Hellmuth ad accompagnarmi, ho solo un rammarico. Vorrei tanto, nella mia valigia, avere un hoodie come questo (foto tratta da Flickr).

Poker hoodie: Fuck the crisis - I'm all in!

Pagina Successiva »