Il linguaggio usato per programmare i movimenti e le azioni del nostro robot è stato Python.
Python è un linguaggio di programmazione dinamico orientato agli oggetti utilizzabile per molti tipi di sviluppo software. Offre un forte supporto all'integrazione con altri linguaggi e programmi, è fornito di una estesa libreria standard e può essere imparato in pochi giorni.
Possiamo dire, grazie alla nostra esperienza, che questo linguaggio consente di fare davvero di tutto e non a caso è diventato uno dei linguaggi più diffusi e usati, soprattutto per fare scripting, sul panorama mondiale.
La versione da noi usata è stata la 2.7.2 che abbiamo preferito alla più recente 3.6 poiché quella da noi scelta è una versione completamente stabile e di cui in rete si trovano abbastanza snippets. La principale, nonché a nostro parere la più fastidiosa, differenza tra le due versioni è che una semplice print trasportata da una versione all'altra crea problemi.
Possiamo vedere la differenza:
2.7 3.6
print “Hello world” print (“Hello world”)
Di seguito il link che rimanda al sito ufficiale in italiano con tutta la documentazione del linguaggio: Python
Per la parte BCI invece abbiamo sfruttato la potenza di MatLab.
MatLab è un ambiente per il calcolo numerico e l'analisi statistica scritto in C, che comprende anche l'omonimo linguaggio di programmazione creato dalla MathWorks. MatLab consente di manipolare matrici, visualizzare funzioni e dati, implementare algoritmi, creare interfacce utente, e interfacciarsi con altri programmi.
Grazie a questo potente ambiente di calcolo siamo stati in grado di eseguire pesanti elaborazioni per l’estrapolazione delle onde P300 che ci hanno permesso di individuare, con un certo margine di errore, il comando da inviare al robot.
Per la comunicazione MatLab – Robot vedi più avanti.
Per la documentazione rimandiamo al sito ufficiale: MatLab
Abbiamo poi voluto anche schematizzare graficamente i collegamenti eseguiti sul nostro robot.
Uno dei software che meglio soddisfa questo compito è il noto Fritzing.
Fritzing è un software libero per la progettazione elettronica (EDA) focalizzato sul passaggio da semplici prototipi al circuito stampato da inviare alla produzione.
Esso dispone già da default tantissimi moduli ( Sonar, Servo motore, Infrarossi) e quelli che mancano ( come il driver L298N ) sono facilmente reperibili online.
Questo è sicuramente un ottimo strumento di supporto per chi vuol dare dimostrazione di come è stato costruito il proprio progetto e riesce quindi ad essere anche un ottimo strumento didattico.
Per il download e la documentazione rimandiamo al sito: Fritzing
Il sistema operativo utilizzato è stato Raspbian Jessie. Raspbian è un sistema operativo basato sui rilasci ufficiali di Debian per l'Architettura ARM (armhf), adattato per l'utilizzo su Raspberry Pi.
Tra le note più importanti si trova la modifica dell'interfaccia grafica da GDM3 a LightDM, che consente di alleggerire il carico della CPU nell'esecuzione del sistema. Oltre a questo si trova l'aggiunta in APT di alcuni repository, ufficiali e non, contenenti quasi tutti i pacchetti ricompilati nella corretta architettura.
Viene inoltre aggiunto il logo del progetto, un lampone, sia come sfondo del desktop che come contorno della shell durante il caricamento del sistema.
Nella release del 23 settembre 2016, viene aggiunto una versione modificata di X server chiamata "Pixel", oltre a una splashscreen all'avvio del sistema operativo.
Per il download e la documentazione rimandiamo al sito: Raspbian
Per il riconoscimento del colore e della forma degli oggetti è stato fondamentale l’utilizzo della libreria OpenCV.
OpenCV (acronimo in lingua inglese di Open Source Computer Vision Library) è una libreria software multipiattaforma nell'ambito della visione artificiale in tempo reale. È un software libero originariamente sviluppato da Intel, centro di ricerca in Russia di Nižnij Novgorod. Successivamente fu poi mantenuto da Willow Garage e ora da Itseez.
Grazie a questa libreria riusciamo ad eseguire elaborazioni in tempo reale, discriminare il colore dell’oggetto ( a seconda di valori in HSV preimpostati ), contornare l’oggetto e quindi in base alle informazioni del centro possiamo direzionare il robot in modo tale da posizionarlo in una posizione desiderata rispetto all'oggetto.
Per il download e la documentazione rimandiamo al sito: OpenCV