mercoledì 18 giugno 2014

Direi che possiamo iniziare!

Basta con le presentazioni: direi che possiamo iniziare a parlare degli aspetti tecnici del progetto. In questo post tratto un analisi generale del progetto che toccherà i seguenti punti:

  • Ideazione
  • Struttura Hardware
    • Struttura Originaria
    • Struttura Finale
  • Struttura Software
  • Obbiettivi

Ideazione
Vorrei iniziare la trattazione parlandovi di come è nata l’idea. Insomma, perché costruire proprio un umanoide? Ho scelto di portare avanti questo progetto perché credo che una delle massime applicazioni dell’Ingegneria Informatica sia la robotica.
Nei vari anni in cui ho lavorato da autodidatta ho toccato davvero tantissimi campi di questo vastissimo mondo: io in realtà ho interesse per qualsiasi cosa tecnica o meccanica, a dire la verità qualsiasi cosa scientifica. Mi incuriosiscono i computers da quando sono piccolo: fanno quello che dici loro di fare, e se di punto in bianco fanno cose strane, è colpa tua. È una cosa che mi ha sempre affascinato: sono perfetti a modo loro. Sono passato da Java ai linguaggi di programmazione per il Web (XML, HTML, CSS, JavaScript, PHP), poi alcuni dei linguaggi offerti dal .NET Framework (Visual Basic/C#/C++), l'Objective-C dei Frameworks Cocoa e Cocoa Touch (sviluppo di applicazioni per OSX e iOS), il Windows Phone SDK (sviluppo di applicazioni per Windows Phone 7.1+), Android Studio e Eclipse (sviluppo di applicazioni per Android), e altri linguaggi quali il C, C++ e il Python. Ho lavorato con la scheda elettronica Arduino e ho notevole esperienza con il Raspberry Pi. Tuttavia, credo che uno dei fini più nobili (se così si può dire) per cui valga la pena impegnarsi sia la robotica: ovviamente non si tratta di un progetto di robotica di alti livelli, ma è comunque un primo passo verso questo mondo, e credo che tutti debbano incominciare da qualche parte e io ho deciso di incominciare così. La robotica: un mondo che io considero essere il futuro e in cui spero di poter continuare i miei studi universitari.

L’idea di per se invece è sempre stata con me, da anni. C’ho pensato più e più volte ma non ho mai fatto il primo passo, non c’ho mai provato. Una volta all’Università, ho pensato che fosse arrivato il momento di farlo, o meglio di provarci. Insomma

“When you grow up you tend to get told the world is the way it is and your life is just to live your life inside the world. Try not to bash into the walls too much. Try to have a nice family life, have fun, save a little money. That’s a very limited life. Life can be much broader once you discover one simple fact, and that is - everything around you that you call life, was made up by people that were no smarter than you.”
~ Steve Jobs

Struttura Hardware
Per struttura Hardware intendo le componenti di cui è fatto Ciclope (dai pezzi utilizzati per montare la struttura del corpo, i motori servo alla scheda madre o le batteria). Tutto quello insomma che può essere toccato con mano di Ciclope. La struttura Hardware che avevo pensato io quando iniziai a buttare giù i primi schizzi era differente da quella che poi ho montato: questo a causa di problemi strutturali in cui mi sono imbattuto durante il montaggio delle schede elettroniche che Ciclope porta addosso. Vi parlerò quindi prima della struttura originaria: di come io avrei voluto che Ciclope fosse strutturato. E poi della struttura finale: come poi in realtà è stato montato Ciclope. Tuttavia, io sono ancora convinto che la struttura migliore sia quella originaria e cercherò di implementarla nel secondo tentativo che farò (se e quando lo farò). Questo problema strutturale sta anche alla base del cambio di nome del progetto da JARVIS a Ciclope. Inizialmente pensavo di montare due schede madri su Ciclope (emisfero cerebrale destro ed emisfero cerebrale sinistro - concetti che approfondirò nel paragrafo successivo), il che mi avrebbe permesso di utilizzare due camere on board (in parole povere due occhi). Dato che causa di problemi con lo spazio (non vi era abbastanza spazio sul corpo dell’umanoide che ho assemblato per montarvi due schede madri e una scheda motori) Ciclope porta una sola scheda madre e quindi una sola camera on board, quindi ha un solo occhio in posizione centrale da cui prende il nome Ciclope.

Struttura Originaria
La struttura originaria nasce da un concetto in cui credo profondamente, in parte ereditato dal film Pacific Rim, che io riassumo con: “Controllo emisfero destro, controllo emisfero sinistro”.

Controllo emisfero destro, controllo emisfero sinistro

Avrei cioè voluto realizzare un umanoide che avesse avuto un "cervello" che ricordasse la struttura di quello dell'essere umano (ovviamente su linea molto generale dato che non mi intendo di corpo umano): pensavo cioè di dividere il centro di controllo di Ciclope in due entità collegate tra di loro in continua comunicazione ma allo stesso tempo indipendenti: ognuno addetto a determinati compiti: proprio come succede nel nostro cervello. Entrambi gli emisferi sarebbero dovuti essere in comunicazione con la scheda motori, e avrei voluto montare tutte e tre le schede sulla parte posteriore del busto.
Purtroppo le dimensioni dei due Raspberry Pi era eccessive e non vi era abbastanza spazio per montarle. Inoltre i cavi per connettere la telecamera on board del Raspberry Pi alla scheda madre non era sufficientemente lunghi perché questa potesse essere posizionata nella parte posteriore del busto: è quindi stata posizionata sul corpo di Ciclope, si potrebbe dire sul petto.

Struttura Finale
La struttura hardware finale di Ciclope è venuta abbastanza diversa da come io me l'ero immaginata. La struttura finale è composta (tralasciando lo scheletro di per se e i motori servo che collega tra di loro le parti dello scheletro - che analizzeremo nel dettagli nei post successivi) da un Raspberry Pi posizionato sulla parte anteriore del busto, collegato alla telecamera che è montata sul motore servo che rappresenta la testa e con un cavo USB (vedremo più avanti il perché della scelta di comunica trhya RPi e scheda motori in questo modo) alla scheda motori che si trova sulla parte posteriore del busto. La scheda motori è collegata ai 18 motori servo presenti nello scheletro. Sono presenti inoltre due batterie al litio posizionate all'intero del busto. Queste foto renderanno sicuramente l'idea molto meglio:



Cosa manca?
In queste foto (le più aggiornate al momento della pubblicazione) manca ancora da inserire l'adattatore wifi per il RPi (sino ad oggi ho comunicato con il RPi utilizzando il cavo ethernet ma ho già acquistato la penna USB WIFI Edimax EW-7811Un e attendo che mi venga consegnata), e mancano anche microfono e speakers (probabilmente utilizzerò delle unicolori e un qualsiasi microfono compatibile con RPi per iniziare) per poter permettere l'iterazione vocale con Ciclope (dato che questa è una delle ultimi parti da realizzare, sto ancora riflettendo sul modo migliore di procedere).


Struttura Software
Con "struttura software" indico l'insieme dei programmi da utilizzare per far funzionare adeguatamente le varia componenti di Ciclope. Secondo i miei piani di sviluppo, alla fine ci sarà un unico programma (in esecuzione sul RPi) che permetterà di ricevere output su terminale e di interagire manualmente con Ciclope. Al momento di questa pubblicazione la parte software è ancora molto arretrata rispetto a quella hardware (dato che mi sono concertato sino ad oggi a finire la struttura esterna dell'umanoide per poi focalizzarmi sulla parte di programmazione. Ad oggi, a livello software abbiamo due gruppi di software principali:

  • Software per il controllo dei motori servo (ricordo infatti che Ciclope monta 18 motori servo MG996R)
  • Software per il controllo della visione computerizzata
  • Cosa manca?
    • Software per il controllo vocale (questa parte del progetto è la meno sviluppa al momento di questa pubblicazione)

Ecco alcune foto dell'ambiente software del RPi (foto più aggiornate al momento della pubblicazione):




Come potete vedere anche dalle foto, ad oggi, il livello di sviluppo del software di Ciclope è molto arretrato (non ho scritto praticamente niente a livello di codice e quello che ho fatto rappresenta giusto un punto di partenza). Questo perché ho dedicato molto tempo all'assemblaggio del corpo di Ciclope (dato che ci tenevo a completare prima la struttura esterna per poi occuparmi della parte software) e a causa del fatto che configurate il RPi perché si possa avere IN UN SOLO LINGUAGGIO DI PROGRAMMAZIONE sia la comunicazione seriale, che lo streaming della camera on board o il riconoscimento voce è stata abbastanza dura e ha richiesto ore e ore di lavoro per innumerevoli tentativi.


Obbiettivi
Da questaoverview generale è ovvio che, ad oggi, il progetto è ancora sotto sviluppo. Quindi è bene parlare anche di dove intendi arrivare con tale sviluppo. In linea di massima, considererò "concluso" lo sviluppo di Ciclope quando l'umanoide avrà le seguenti abilità:

  • Movimenti motori: camminare, alzarsi, sedersi, afferrare oggetti e altri movimenti basilari.
  • Riconoscimento facciale: Ciclope dovrà essere in grando di riconoscere gli individui che lo circondano utilizzando la camera in board della scheda madre: interagire con gli individui già classificati e poter salvare nel sui database nuovi individui che si presentano.
  • Riconoscimento vocale: Ciclope dovrà essere in grandi di ricoscoere ciò che li viene detto da individui esterni e agire di conseguenza.

Insomma, il progetto Ciclope sarà considerato concluso quando l'umanoide avrà le capacità di iterazione umani Basilari ridotte all'estremo. Ad oggi non so ovviamente quando e se riusciro in questo obbiettivo: non mi resta quindi che tentare, sviluppare e vedere cosa riesco a fare: quanto riesco ad andare avanti.

Nessun commento:

Posta un commento