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! :-/

Archivio per la 'Artificial Life and Autonomous Robotics' Categoria

Reynolds? It works!

Sviluppi interessanti per quanto riguarda il mio sforzo di applicare l’algoritmo di flocking di Reynolds agli Swinglet. Innanzitutto ho fatto le ultime modifiche ed ultimato il simulatore di boids “tradizionale” che avevo iniziato a scrivere ieri pomeriggio. Il risultato direi che e’ soddisfacente. Ne ho approfittato per montare anche un breve video, prontamente uploadato su YouTube, dove si puo’ osservare il simulatore in azione. Qui sotto trovate l’embed del filmato (chiedo venia per la telecamera un po’ “flickering” per i primi minuti, ma si tratta di un annoso problema che ho con Irrlicht e che puntualmente mi si ripresenta) (ringrazio al tempo stesso i Mad Dog McRea per la colonna sonora).

Al link che segue, nel caso potesse interessarvi, trovate anche tutti i sorgenti del software in questione. Tenete presente che l’applicazione e’ un misto di C++/Cocoa, quindi potrebbe non compilare al primo colpo su sistemi Linux/Windows. Le modifiche da apportare per far funzionare il tutto dovrebbero comunque essere decisamente marginali. Altra nota importante: i path alle risorse esterne (texture, sfondi, ecc…) presenti in gui.cpp sono hard-codati per la mia macchina. Nel caso vogliate avventurarvi nella compilazione dovrete giocoforza mettere mano pure a questi e modificarli a seconda di dove avete piazzato i file in questione.

Detto cio’, ora e’ iniziata ufficialmente la fase di implementazione del comportamento di flocking reynoldiano sui MAVs che utilizziamo per gli esperimenti. Dopo aver speso un paio di orette sul simulatore sono riuscito, almeno a grandi linee, a rendere funzionante il tutto. Ora si tratta di affinare un po’ il codice, verificare che non vi siano MAI collisioni tra i vari aeroplanini e poi provarlo sul campo. Presumibilmente tra un paio di settimane, dato che la prossima dovrei essere in quel di Roteglia per qualche giorno di relax. Stay tuned.

PS: nel pomeriggio e’ anche arrivata la risposta ufficiale dell’ESA in merito all’interview di qualche settimana fa. Come previsto non e’ andata. Vedremo ormai di farcene una ragione…

Boids in Irrlicht

La nuova settimana inizia esattamente da dove avevamo lasciato quella appena trascorsa. Ovvero si riparte da Reynolds e dal suo algoritmo di flocking per boids. I tentativi abbozzati lo scorso venerdi’ di implementare questo tipo di algoritmo nel mio simulatore di MAVs non hanno dato esiti particolarmente incoraggianti. Cosi’ ho deciso di prendermi un po’ di tempo per scrivere un’applicazione dedicata esclusivamente all’implementazione di questo algoritmo, avendo come riferimento delle “particles” 3D prive di orientamento spaziale e libere di muoversi in qualunque direzione senza essere affette da una dinamica ben precisa.

Boids on a black background

Effettuando qualche ricerca sul forum di Irrlicht ho trovato un post scritto dall’utente randomMesh, dove presenta un progetto sviluppato con l’engine grafico in questione e basato appunto sui boids di Reynolds. Il progetto e’ ospitato su SourceForge.net ed e’ stato battezzato Katastrophe. L’implementazione dell’algoritmo di flocking si basa sull’interpretazione (in pseduo-codice) di Conrad Parker. Chi non avesse voglia di scaricare e compilare i sorgenti dell’applicazione, puo’ vederla in funzione dal video pubblicato su YouTube che vi propongo qui sotto.

Vediamo un po’ cosa verra’ fuori.

Maths at work

Dopo un’intera giornata (quella di ieri) passata per l’ennesima volta di fronte a carta e penna, calcolando seni e coseni e debuggando a mano i risultati restituiti dalle mie nuove funzioni per la navigazione dei MAV, oggi e’ stata finalmente la volta buona. Al terzo test sul campo i miei MAVs hanno infatti iniziato a fare esattamente quello che mi aspettavo da loro. Il leader vola bello beato e preciso (in maniera invero molto piu’ precisa rispetto a quanto mi sarei aspettato) tra i due waypoint prefissati (vedi log sotto), mentre il follower comunica a meraviglia (anche fin troppo bene, in quanto mi aspettavo un range di comunicazione decisamente piu’ ristretto) con il leader e lo segue come un’ombra.

leader_path

Gli esperti di hardware devono ancora implementarmi la funzione per la modifica della velocita’ di crociera, quindi i due MAV rimangono ancora un po’ distanti tra di loro. Ma questo e’ un problema secondario. L’importante e’ avere ora tutto l’ambaradan funzionante per iniziare a studiare comportamenti di flocking piu’ complessi.

Momento clou della giornata quando proviamo a far atterrare il leader per vedere come si comporta il follower in sua assenza (il codice che ho scritto dovrebbe farlo ruotare attorno ad un certo “waiting point” in attesa di ricevere informazioni dal leader). Nel giro di un paio di minuti, ci troviamo il leader a terra nella zona prefissata ed il follower che, a mo di avvoltoio, continua a girare inquietante sulla sua testa. Fino a quando non stacchiamo l’alimentazione al leader ed il follower, trascorso qualche secondo, se ne va verso il suo waiting point. Lovely.

Test fiammanti

Il Signore (quello con la S maiuscola) l’aveva detto. Di domenica si riposa. Ergo non si lavora. Ci sara’ un motivo se quel saggio personaggio (rima veramente infausta, ma in questo momento non riesco a trovare un sinonimo adeguato per “personaggio”) aveva deciso in tal modo. E, lo si dovrebbe sapere, a persone di quel calibro e’ solitamente meglio obbedire. Senza neanche stare tanto a discutere. Se non altro perche’ sono capaci di ritorsioni in grande stile. Anche senza bisogno di impegnarsi tanto come quando decise di allagare il mondo conosciuto, oppure di aprire le acque del Mar Rosso, l’onnipresente puo’ combinare qualunque cosa con il semplice schiocco di un paio dita. Come, ad esempio, bruciare (letteralmente) uno degli aeroplanini con i quali tu, oltraggioso miscredente, stai lavorando. Di domenica mattina. Cosi’ impari. E la settimana prossima, di domenica, se anche non te ne vuoi proprio andare a Messa, perlomeno te ne rimani a letto ad oziare.

Flight test

Chiusa la parentesi blasfema di apertura post, confermo che durante la sessione straordinaria di test che si e’ tenuta questa mattina (a proposito, avrei un bel po’ di foto da pubblicare, ma sono stato caldamente invitato a non farlo) (aggiungo, per quanto sia scontato dirlo, che non e’ stato il sottoscritto ad avere l’idea di andare a far volare gli aeroplanini la domenica, di prima mattina) uno dei nostri MAVs e’ finito avvolto dalle fiamme. Nessuna maledizione divina, pero’, almeno all’apparenza. Semplicemente il buon Severin (che possiamo pero’ anche definire “l’ingegneraccio tedesco”, il che suona molto piu’ professionale/fantozziano) nel collegare di sfuggita una batteria ha invertito inavvertitamente i due cavi di alimentazione, provocando il disastro. Che, ad ogni modo, riparera’ lui stesso. In sostanza ha vinto qualche ora di lavoro in piu’. Mi dispiace per lui, ma ammetto che sentirlo bestemmiare in tedesco con accento francese sia stata comunque una splendida esperienza.

Per la cronaca, i test dei miei controller sono andati leggermente meglio rispetto alla volta scorsa, ma permangono problemi (che presumo essere di natura prettamente trigonometrica) in sottofondo. Ho comunque raccolto qualche MB di files di log ed ora dovrei avere tutto quanto a disposizione per poter effettuare un bel debug ed eventualmente riscrivere ex-novo le funzioni per l’aggiustamento dell’heading dei MAVs a seconda della direzione di volo desiderata. Domani si procedera’, con tutta la dovuta calma, a risolvere una volta per tutte il problema.

Nel frattempo mettiamo in cascina la lezione del giorno. Rosso con rosso, nero con nero.

Esperimenti sul campo

Ci e’ voluto un po’ piu’ del previsto, ma finalmente il gran giorno e’ arrivato. Nel pomeriggio (dopo aver mancato l’appuntamento originariamente previsto per le 8 di questa mattina causa solito rapporto decisamente conflittuale con la sveglia ed eccessivamente affettuoso con la branda) sono andato con gli altri ragazzi del laboratorio al campo di test per mettere in aria i MAVs guidati dai miei controller autonomi. Ovviamente non si poteva pretendere che tutto funzionasse alla perfezione gia’ al primo colpo. E cosi’, di fatti, non e’ stato. Ma i risultati sono comunque incoraggianti.

Pilot crew briefing before a mission

I test sono stati svolti con un solo aereo, quello che nella dinamica di flocking dovrebbe assumere il ruolo di leader e che aveva il compito di navigare verso un waypoint fissato in termini di coordinate GPS (per chi fosse curioso a riguardo, si trattava del punto di latitudine 466257091 e longitudine 65973049). E poi, presumibilmente, tornare indietro per poi spostarsi nuovamente sul waypoint e cosi’ via, generando una sorta di figura “a 8″ (non credo si tratti del termine tecnico piu’ corretto, ma serve per farci capire). I primi due tentativi sono andati completamente a vuoto con il MAV a volare dritto che piu’ dritto non si poteva, fregandosene nella maniera piu’ assoluta di quello che avrebbe dovuto fare. Il primo a causa di una conversione (gradi->radianti) di troppo che avevo nel mio codice, il secondo perche’ pensavo di aver risolto la questione, ma cosi’ in realta’ non era. Al terzo tentativo l’aereo ha iniziato a capire un po’ quello che doveva fare, ma l’intensita’ delle sterzate generate dal mio software era decisamente troppo leggera (circa un’ordine di grandezza inferiore rispetto a quella ottimale) per generare il comportamento desiderato.

Il solo svolgere questi tre semplici test ha portato via due orette abbondanti. E questo e’ lo scotto da pagare per il fatto di lavorare nel campo della robotica aerea. Ho comunque raccolto una bella massa di dati (ho un paio di logfiles registrati dal MAV di circa 3MB ciascuno) che ora Matlab si divertira’ ad analizzare per vedere se i valori raccolti dai sensori dell’aereo sono quelli che mi aspettavo e sui quali ho basato il mio simulatore. Domani cerchero’ di risistemare il codice e fare un po’ di debug sulla base dei dati di log registrati. Alla prossima uscita potremmo (condizionale d’obbligo) gia’ vedere l’aereo manovrare per aria in maniera sensata.

Locomorph project

Grazie ad una chiacchierata inaspettata avvenuta oggi pomeriggio con Lijin Aryananda sono venuto a conoscenza del progetto Locomorph, coordinato dalla University of Zurich ed a cui partecipano anche EPFL, Friedrich-Schiller University of Jean, University of Southern Denmark, Antwerpen e Ryerson. Trattasi di un progetto decisamente interessante, focalizzato sulla locomozione robotica all’interno di ambienti sconosciuti. Da un punto di vista scientifico, il vero punto di forza consiste nello studio della morfologia necessaria per muoversi in ambienti particolari, e soprattutto sulla “morphosis”, ovvero il cambiamento della morfologia, volontario per rispondere ad esigenze particolari di locomozione oppure obbligato perche’ indotto da cause di forza maggiore.

20081101_locomotion_video

Qui di seguito potete comunque leggere la descrizione del progetto, piu’ approfondita rispetto alle due righe da me redatte, presente sul sito ufficiale linkato in apertura di post.

Project Description

Locomorph’s goal is to push beyond the state of the art in robotic locomotion and movements, by increasing efficiency, robustness, and thus usability in unknown environments. As robotic research and industry are competing to increase robots’ usability towards the highly-in-demand service robotics, advancements in robotic locomotion today would give Europe a significant competitive advantage. Locomorph combines multidisciplinary approaches from biology, biomechanics, neuroscience, robotics, and embodied intelligence to investigate locomotion and movements in animals and robots, focusing on two concepts: morphology and morphosis.

Morphology

The first concept, morphology, is based on the observation that successful biomimetic designs rely on effective embodiment: on clever morphology and use of material properties. Because of the ingenious forms, materials, and mechanisms selected by nature, animals can move efficiently and stably through virtually every conceivable terrain. When the animals’ bodies undergo changes, either due to natural growth process or more extreme injuries such as limb loss, they gradually adapt and even ‘invent’ new ways of walking.

In this project, we will explore various morphological factors (shape, materials, sensors, compliance, limb segmentation, etc) to generate novel and optimal robotic designs for efficient and robust locomotion in unknown environments, based on insights from biological and biomechanical studies. We will iteratively build many diverse robots and co-develop control strategies while observing the robots in different environments in order exploit the complex dynamic which emerge from the interaction with the environment.

In order to support this morphology exploration, we will develop an infrastructure for enabling fast construction of robots with varying morphology, using a wide range of modular heterogeneous robotic components, such as legs and trunk/torso components with different shapes and materials, elastic elements, sensors, actuators with varying compliance, etc. This infrastructure will provide sharing of modular components (hardware and software) which enable fast construction of robots and an extensive collaboration among the consortium.

Morphosis

The second concept, morphosis, extends the concept of exploiting morphology further by investigating morphing, i.e. changing morphology. Voluntary morphosis – the ability to self-adjust own morphology – is a valuable skill for robots, as it can increase their adaptivity to current tasks and environments. Involuntary morphing is also a relevant issue, since it can occur in robots because of injuries or other external causes.

We will explore this topic using two complementary approaches. Firstly, we will conduct animal/human experiments to study biological strategies in dealing with voluntary/involuntary morphosis. In nature, morphosis occurs at various time scales.

Very slow morphosis occurs during the natural selection process, where new morphology is adapted from an ancestral body plan due to new environmental constraints. For example, the Takydromus sexlineatus, a species of the lacertid lizard family, has a very slender elongated body and reduced limbs ideal for ‘grass swimming’, while the Meroles anchietae has long hind limbs, long slender toes, and a short stiff trunk ideal for fast running. However, perhaps this morphology is also used in a different way because the Meroles anchietae is also good in sand swimming in the desert. Morphosis also occurs within each animal’s lifetime due to ontogenetic growth. Abnormal morphosis can also occur due to injuries, such as limb loss. Lastly, some animals sometimes perform an active form of morphosis, for example primates switch from quadrupedal to tri- or bi-pedal locomotion when holding an object.

Secondly, we will extract insights from the results to investigate how to construct robots which can voluntarily morph (self-adjust their own morphology) during runtime to adapt to current task demands and environments, for example by lengthening and contracting their limbs, altering their overall shape by trunk/torso actuation, etc (see figure below for conceptual drawing of robotic voluntary morphosis). We will also develop motor control strategies for dealing with morphosis, both voluntary and involuntary. This, combined with the robot’s modularity, will create highly robust robots, able to deal with body changes e.g. limb loss.

Through an exploration of these two concepts we aim to develop robots with increased maneuverability, self-stabilization, energy efficiency, and adaptivity to unknown environments. These advances will bring us closer to service robotics, as a large part of these robots must able to locomote safely, regardless of surfaces, layouts, or terrains.

Un elenco delle pubblicazioni prodotte fino a questo momento potete trovarlo a questo link (purtroppo non sono scaricabili da questa pagina, quindi nel caso foste interessati dovreste procedere in maniera alternativa). In chiusura, invece, vi lascio con un po’ di immagini dei robot che sono stati costruiti durante il progetto. Ovviamente grezzi (sono piu’ prototipi che non prodotti finiti), ma comunque simpatici anche da vedere.

Locomorph EU Project - Robot #1

Locomorph EU Project - Robot #2

Locomorph EU Project - Robot #3

Locomorph EU Project - Robot #4

Switching gear

Forse e’ una sorta di crisi di rigetto post-trauma esistenziale di ieri. Forse no. Non lo so. Fatto sta che da ieri sera ho una gran voglia di lavorare. Proprio tanta. E tanta voglia di tirar fuori qualcosa con coglioni e controcoglioni. Motivo per cui, a partire da oggi, in laboratorio si accelerano i ritmi. Dopo un po’ di burocrazia e studio di un po’ di paper in mattinata, c’e’ stato un meeting pomeridiano con i supervisor locali al termine del quale sono entrato in possesso di un “mio” swinglet. Sul quale (tramite un percorso un po’ contorto: dongle wi-fi esterno collegato via USB al mio computer e fatto riconoscere alla macchina virtuale Linux sulla quale girano drivers modificati appositamente per questo dongle) ho caricato un po’ di codice scritto prima di partire per Barcellona e che da domani si iniziera’ a debuggare nei minimi dettagli. Venerdi’ pomeriggio, tempo permettendo, si andranno a fare invece i primi test dei miei controller sul campo.

senseFly swinglet

Per quanto riguarda l’ormai classico angolo di letteratura (scientifica), segnalo un ottimo paper che ho trovato oggi pomeriggio e che, chissa’ perche’, fino a questo momento ci era completamente sfuggito. Lo trovate qui sotto. Titolo ed abstract dovrebbero gia’ di per se darvi un’idea di quanto sia attinente con il lavoro che stiamo portando avanti qui a Losanna.

Infine, sempre per stare in tema di boids, segnalo questo link, dal quale e’ possibile scaricare codice C++ molto ben fatto e che implementa, in maniera semplice, lineare, efficiente, ma soprattutto fedele, il modello di Reynolds. Un ottimo modo per integrare il paper originale di Reynolds, latitante di dettagli tecnici. Nel caso aveste tempo/voglia di smanettarci un po’ sopra… buon divertimento!

Come i programmatori di una volta

Ricordo ancora quei giorni come fossero ieri. Sono tra i pochi ricordi nitidi che ho dei tempi delle superiori. 26 (o giu’ di li’) studenti accampati in uno dei laboratori di informatica. Seduti in maniera ordinata lungo i banchi che in piu’ file scorrevano al centro della stanza e circondati da cassoni ronzanti, spinti dai primi processori Pentium, collegati ai loro rigorosi monitor CRT da 14 o 15 pollici e soprattutto connessi attraverso una bella rete a bus (l’Ethernet ancora doveva affermarsi, mentre il Wi-Fi era un miraggio). Curioso se pensiamo che questi ricordi risalgono soltanto a poco piu’ di 10 anni fa.

A secretary operating an old computer

26 studenti in una stanza, dicevo. Pronti per il tradizionale (uno ogni due/tre settimane ci toccava) compito in classe di informatica. Che pero’ si svolgeva con modalita’ anni ‘70. Vietato utilizzare i computer. In compenso plichi formato famiglia di fogli a protocollo a disposizione di tutti. I primi quindici/venti minuti passavano con la professoressa che dettava le specifiche. Che erano sempre qualcosa di improponibile. Il resto delle due ore (talvolta tre) lo si passava invece con la testa chinata sul banco, scrivendo (letteralmente) codice fino all’ultimo secondo disponibile. Codice che doveva essere corretto al 100% (ogni errore di sintassi un punto in meno, figurarsi quelli concettuali) ed anche indentato alla perfezione. In maniera tale che, quando ci si trovava ad avere a che fare con tre o quattro cicli annidati, una pagina ti partiva solo per scrivere un paio di istruzioni. Ma la parte piu’ divertente era ovviamente il debug. Matita e gomma. E via a provare decine combinazioni dei parametri piu’ implausibili per verificare che tutto funzionasse a dovere. Ovviamente, quando all’ultimo anno sono entrati in gioco i puntatori, le fasi di debug si sono trasformate in una sorta di seduta spiritica.

Perche’ questo lungo incipit? Semplicemente perche’ oggi ho passato un giorno come quelli descritti qui sopra. Non perche’ fossi impegnato con qualche esame o compito in classe, ma piuttosto perche’ ho iniziato a scrivere il codice da caricare sullo swinglet per i primi esperimenti di flocking. E’ una sensazione strana, dopo essersi abituati a lavorare sempre e solo in simulazione, quella di digitare istruzioni che non si possono compilare sulla propria. E tantomeno debuggare. Si procede un po’ alla cieca, prestando enorme attenzione ad ogni passaggio e sperando che non ci sia dimenticati niente. E per quanto riguarda il debug? Beh, sono tornate fuori la gomma e la matita…

An Incremental Approach to the Evolutionary Design of Autonomous Controllers for Micro-unmanned Aerial Vehicles

Altra fatica letteraria conclusa, come sempre durante il weekend. Ma siccome le modifiche da apportare che sono state suggerite dai reviewers erano questa volto molto contenute, il processo di revisione del mio paper per TAROS 2010 e’ durato relativamente poco. Al punto che (dopo appena due mesi di permanenza a Losanna…) sono finalmente riuscito a dedicarmi ad un paio d’ore di tintarella in riva al lago. Caldo bestiale, ma ne e’ valsa decisamente la pena. Riuscire a far diventare un’abitudine questa di passare la settimana al lavoro e poi spaparanzarmi in spiaggia durante il weekend sarebbe qualcosa di davvero notevole. Ma so gia’ che la cosa non si ripetera’ oltre che un paio di volte ancora.

Evolution (look behind, there are monkeys!)

Ad ogni modo, bando alle ciance. Lascio la parola al mio paper, che potete scaricare in versione camera ready dal link qui sotto. Buona lettura.

Ma che meraviglia la (fantascientifica) TV italiana

Uno degli svantaggi di essere in Svizzera consiste nel fatto che, accendendo la TV, e’ possibile imbattersi in un paio di canali come Rai 1 e Rai 2. Questa mattina, mentre sono intento a fare colazione, finisco su uno di questi. Attratto da un servizio dove Giulio Sandini parla un po’ dell’iCub. Servizio fatto piuttosto bene, con lo scienziato a cui viene lasciato spazio per parlare e dire cose sensate. Cose sensate che, invece, la conduttrice della trasmissione (che credo si intitoli “Quello che“) proprio non riesce a dire. Appena il servizio termina, infatti, la brillante donzella se ne esce con una frase meravigliosa: “Ed ora rimaniamo nell’ambito della fantascienza presentando il prossimo servizio“. Fantascienza. E pensate che c’e’ gente che scrive i testi per questi programmi TV e gente che prima della messa in onda li ricontrolla pure. Nota a margine: il servizio successivo trattava di astrofisica. Non so cosa darei per vedere la reazione di una Margherita Hack qualunque di fronte alle allegre parole della scosciata conduttrice in questione.

Ignorance - beware the book

Ma il culmine lo si raggiunge comunque qualche minuto piu’ tardi. Nuovo servizio e questa volta viene intervistata una (storditissima) ricercatrice sarda. Racconta che si e’ laureata ed ha trascorso un anno all’estero presso il Max Planck Institute. Ora e’ tornata in Italia. E la voce narrante, con enfasi da Ventennio, non manca di sottolineare come: “ora ha ottenuto un contratto da €1,500 mensili, grazie al quale puo’ svolgere la sua ricerca in Italia, felice e in tutta tranquillita’“. Segue la faccia della ricercatrice che sorride e ribadisce la sua gioia.

Signori, siamo messi cosi’…

Pagina Successiva »