Perchè abbiamo bisogno di sviluppatori Robotici
Pubblicato il10 anni fa nessuno ci avrebbe creduto, ma in pochi anni il mondo dell’informatica è diventato mainstream. Ricordo che nel 2008, quando stavo per finire il Liceo ed iniziavo ad interessarmi su cosa avrei fatto da grande, a mala pena si parlava di programmazione, e la parola “sviluppatore” era rilegata ad ingegneri con anni e anni di esperienza che lavoravano su cose poco interessanti ai più (o almeno, questa era la visione che avevo dal mio piccolo paese di provincia in Sud Salento).
Nello stesso anno Apple lancia l’AppStore. In poco tempo la figura dello sviluppatore mobile diventa conosciuta. I ragazzi sanno tutti cosa vuol dire essere un programmatore, e adesso (ma già da qualche anno) nella mia scuola si insegna informatica.
Sembra naturale, ma fa riflettere che in soli 9 anni ci sia stata una tale rivoluzione.
Nel mondo (ma anche in Italia), infatti, è pieno di sviluppatori di vario tipo, da web, mobile, back-end, front-end, ecc.
C’è sempre più richiesta di competenze da sviluppatore nel mondo digitale, e ce ne sarà sempre di più per i prossimi anni. Tuttavia, sappiamo che il mercato delle webapp e delle app mobile è quasi saturo. C’è tantissima competizione ed è molto facile trovare esperti in questi campi.
L’Internet delle Cose è ormai realtà, ed anche in questo caso la figura dello sviluppatore di sistemi e piattaforme per la gestione di dispositivi interconnessi inizia ad essere un interessante settore lavorativo su cui investire.
Tuttavia, esiste un altro mercato in forte ascesa che in pochi anni, almeno secondo tutte le proiezioni che ho trovato girando nel web. Questo mercato è il mercato della robotica di servizio, che probabilmente vedrà nel prossimo decennio una rivoluzione ancora maggiore di quella delle applicazioni.
Attualmente, non esiste in Italia una figura professionale di riferimento per questo mercato.
La robotica di servizio
In questo blog io e Gabriele abbiamo scritto tanto sulla robotica e le applicazioni, ma non ci siamo mai fermati a parlare della robotica di servizio come campo tecnologico. Quindi ora vorrei risolvere la nostra piccola mancanza.
Non c’è una reale definizione di robotica di servizio, o meglio, ce ne sono tante e il significato di questo termine è un po’ poco chiaro. Noi crediamo che un robot di servizio non sia solamente un sistema robotico che aiuto una persona a svolgere un determinato compito in modo automatico.. Secondo questa definizione, infatti, anche una lavatrice potrebbe essere considerata un robot di servizio.
Una definizione che preferisco, e che presento spesso quando parlo di cosa è la Robotica di servizio, è la seguente:
Un sistema robotico di servizio è un sistema robotico che aiuta le persone a risolvere un determinato compito in condizioni in cui non è possibile, per il programmatore, definire a priori il comportamento del robot stesso, in quanto i fattori esterni a cui il robot è soggetto sono imprevedibili.
In parole più semplici, un sistema robotico di servizio deve essere in grado di prendere autonomamente delle decisioni in base all’ambiente esterno in cui il robot opera.
Facciamo un esempio per capire meglio questo concetto.
La lavatrice è un sistema robotico di servizio? No!! In quanto il programmatore sa esattamente cosa deve fare la lavatrice, e tutte le azioni e i movimenti che la lavatrice deve fare sono interamente pre-programmate. L’unica (forse) variabile che una lavatrice deve gestire è il peso dei vestiti con cui è caricata.
Similmente, non sono robot di servizio la maggior parte degli elettrodomestici, gli ascensori, le auto in grado di parcheggiare in modo autonomo e la maggior parte dei sistemi semi-autonomi con cui abbiamo a che fare giornalmente.
Inoltre, non sono robot di servizio nemmeno i robot industriali, perché questi funzionano allo stesso modo delle lavatrici: il programma che questi svolgono è pre impostato e molto semplice, la loro complessità risiede nella meccanica, non nella programmazione.
Un robot di servizio, anche se molto basilare, che invece è diventato popolare è il robot Roomba (e gli altri aspirapolveri robotici). Cosa sanno gli sviluppatori del Roomba dell’ambiente in cui questi robot operano, cioè le nostre case?
Se ci pensate un attimo, gli sviluppatori sanno veramente poco delle nostre case. Le poche assunzioni che si possono fare solo le seguenti:
- Il pavimento è prevalentemente piano
- Ci sono ostacoli fissi (i mobili)
- Ci sono ostacoli mobili (le persone)
Il resto è impossibile da prevedere, perché dipende da casa in casa.. Quanto è grande l’ambiente da pulire? Ci sono scale? Se si, dove sono? Dove sono i mobili? Dove devo pulire di più? ecc.
La robotica di servizio richiede intelligenza e percezione
A tutte queste domande non è possibile rispondere solo nel momento in cui il robot entra fisicamente nella casa e viene acceso, quindi l’unico modo per programmare un robot Roomba è quello di renderlo intelligente, in modo che sia in grado di capire queste cose in autonomia. L’intelligenza, nei robot, deve andare di pari passo con la percezione. Più sensori sono presenti sul robot, più cose questo è in grado capire del mondo circostante. E se riprendiamo l’evoluzione del Roomba possiamo capire come l’intelligenza e la percezione sia sempre più presente nei vari modelli..
I primissimi modelli erano dotati solo dei classici “bumber”, i sensori in grado di capire se il robot andava a sbattere da qualche parte. Quello che faceva il robot era semplicemente andare più o meno a caso e sperare di passare più o meno da tutte le parti della casa. Questo approccio funzionava un pochino, ma i robot non erano veramente in grado di eseguire il loro compito, e spesso erano pericolosi in quanto cadevano dalle scale o banalmente danneggiavano i mobile andandoci a sbattere contro.
I modelli intermedi sono stati notevolmente migliorati grazie all’introduzione di nuovi sensori.. Con una striscia di sensori infrarossi, il robot è in grado di capire se sta per scontrarsi contro qualcosa. Inserendo dei sensori di “caduta”, il robot capisce se ci sono delle scale (o un buco) evitando di cadere. Con dei sensori di polvere, il robot è in grado di valutare se deve passare più volta da uno stesso punto. Ma non sono solo aumentati i sensori, è aumentata anche l’intelligenza del robot… Per i Roomba sono stati sviluppati appositi algoritmi che garantiscono che il robot passi in ogni zona della casa. Usando gli infrarossi, il robot è in grado di seguire le pareti in modo da pulire meglio gli spigoli. Non so se ci avete mai giocato, ma se provate a metterlo in mezzo ad una stanza (lontano dalle pareti) è chiaramente visibile l’algoritmo che lo fa girare lungo una spirale fino a che non trova una parete, per poi seguirla. Guardate la figura sottostante, che riporta la traccia completa dei movimenti che fa il Roomba all’interno di una casa, per capire di cosa parlo.
Gli ultimi modelli, addirittura, montano una telecamera e sono in grado di eseguire algoritmi di navigazione complessi. Questi robot si costruiscono una mappa della casa, e quindi sono in grado di muoversi in modo molto più intelligenze, preciso e sicuro.
La robotica di servizio è una competenza richiesta
Spero sia chiaro quanto intelligenza ci sia all’interno di un Roomba, tuttavia l’applicazione che risolve è molto semplice ed è per questo che è già entrato nelle nostre case.
Nel mondo, per ricerca, si stanno sviluppando applicativi robotici molto più complessi ed interessanti, tuttavia, il livello di complessità è tale che questi sistemi sono, per la maggior parte, ancora in fase di test e sviluppo. Noi stessi, all’inizio di HotBlack Robotics, abbiamo sviluppato un robot autonomo in grado di monitorare grandi data center.
Ma l’interesse sulla robotica inizia finalmente ad uscire dal mondo della ricerca accademica, e non solo in America, dove Google e Amazon stanno investendo tantissimo su queste tecnologie, ma anche in Italia, dove, nel nostro piccolo, finalmente inizio sempre più spesso sentire parlare di questi temi.
TIM, ormai 4 anni fa, ha fondato un laboratorio di robotica di servizio, all’interno del quale lavoravano più di 10 persone tra ricercatori e impiegati Telecom Italia, tra i quali anche io e Gabriele E vero che dopo tre anni il laboratorio è stato decisamente ridimensionato, ma per dinamiche interne TIM, non per mancanza di interesse dal mercato.
Ultimamente, i vari tesisti e tirocinanti che escono dai nostri laboratori trovano facilmente lavoro in quanto conosco la robotica e ROS (the Robot Operating System). Su richiesta di aziende Torinesi, non straniere.
Ma mi stupisco sempre più del fatto che su Linkedin ricevo sempre più richieste di lavoro (o di consulenza) su ROS. E pare che, almeno su Torino, siano pochissime le persone con questo tipo di skill.
Sembra infatti che, mentre da una parte (finalmente) il mondo del lavoro si sia accorto delle potenzialità della robotica, dall’altra il mondo dell’Università (o almeno il Politecnico di Torino, l’Università che mi ha formato e a cui sono strettamente legato) sia poco interessato a questa tecnologia, e non sia in grado di addestrare i nuovi ingegneri ad affrontare un mondo del lavoro sempre più orientato alla robotica di servizio.
Chi è lo sviluppatore robotico?
Nel mondo del lavoro (almeno in quello italiano), sembra chiaro che manca una figura lavorativa il cui compito principale è quello di sviluppare applicazioni robotiche. Io e Gabriele usiamo il nome di Sviluppatore Robotico per identificare questa ipotetica figura, e giornalmente cerchiamo di formarci e di formare persone con questa competenza specifica.
Molti infatti fanno l’errore di confondere lo sviluppatore robotico con un ingegnere informatico, un ingegnere elettronico o un ingegnere meccatronico, in base alle esigenze. Ma negli ultimi anni, io e Gabriele abbiamo assistito al completo fallimento di progetti di robotica di servizio che non includevano un esperto diretto di robotica, e ciò ci ha fatto rendere conto di quanto sia importante avere competenze specifiche di robotica.
Qui la lista delle competenze chiave che uno sviluppatore deve avere:
- saper programmare sia a basso livello (embedded) che ad alto livello
- conoscere il framework di sviluppo ROS (si veda sotto)
- avere competenze basi di robotica probabilistica
- essere in grado di vedere l’applicazione robotica nel suo insieme.
Specialmente sull’ultimo punto, molti sbagliano. Chi fa Hardware vede il robot come un sistema hardware su cui viene montato del software. Al contrario, chi fa Software tende a considerare il robot come del buon software montato su un computer che si muove. Sbagliano entrambi.
Tempo fa, ho risolto un problema che aveva bloccato dei programmatori per mesi: il loro programma non funzionava e non capivano perché, dopo mesi di debug, parlando con me, capimmo che il problema era che la batteria non dava abbastanza corrente al computer di bordo, e questo andava periodicamente in risparmio energetico facendo crashare alcune parti del software.
In un’altra occasione, abbiamo risolto un problema, che sembrava hardware, semplicemente notando che il software aveva un ‘-‘ al posto di un ‘+’.
Io ritengo che, finchè non si inizierà a formare persone con competenze ibridi, sarà molto difficili, per l’Italia, riprendere la posizione di leader industriale nel mondo della robotica che aveva guadagnato tempo fa.
Ma cosa stiamo facendo?
Non sono il tipo che si da per vinto, e se trovo un problema, specialmente in un campo che tanto mi appassiona, provo a proporre soluzioni, oltre a diffondere il problema.
Nel nostro piccolo, con HotBlack Robotics ed un paio di amici di Rokers, ci stiamo impegnando a portare avanti una serie di corsi legati al mondo della robotica.
Il primo sarò un video corso introduttivo a ROS, che uscirà periodicamente in questo blog a partire da settimana prossima. Se ti interessa, iscriviti alla mailing list qui sotto, ti invieremo informazioni più dettagliate a breve.