Sviluppo di un robot mobile a comando vocale

4 01 2008

Pubblico la mia tesi di laurea triennale in Ingegneria Informatica presso l’Università degli Studi di Trieste (DEEI).

La laurea è avvenuta il 14 dicembre 2007.

Tesi “Sviluppo di un robot mobile a comando vocale” - PDF - 1.20 MB

L’obiettivo è quello di realizzare un robot mobile controllato a comando vocale, cioè un robot in grado di muoversi in ambienti domestici comandato tramite parole o brevi frasi pronunciate da una persona. Questo comporta la realizzazione di un software distribuito (su più processori) in modo che un calcolatore possa registrare delle parole o frasi pronunciate da una persona e occuparsi del movimento mentre un secondo calcolatore effettua il riconoscimento vocale sulla registrazione e invia il risultato testuale alla prima macchina. Il software deve occuparsi di tutte le fasi: la registrazione della voce, il riconoscimento delle parole, del comando, il controllo a basso livello dei motori e di un sonar per rilevare la distanza del robot dagli ostacoli.


L’idea è di equipaggiare il robot con due ruote motrici e un sonar, collegati ad una scheda ARM con un sistema Linux che serve a coordinare tutto. La scheda ARM deve essere autosufficiente per quanto riguarda la registrazione dei comandi vocali, il controllo dei motori, del sonar e un minimo di logica per evitare di scontrare il robot sugli ostacoli, mentre solamente la fase di riconoscimento vocale viene assegnata a un sistema esterno Windows per il riconoscimento vocale.


Il funzionamento tipico da realizzare risulta essere il seguente:

1. la scheda ARM montata sul robot registra tramite il microfono USB la voce umana

2. viene rilevata una parola o una breve frase e inviata tramite ethernet in formato WAVE al computer con Windows che fa da “server”

3. il server riceve la registrazione ed esegue il riconoscimento vocale, restituendo al robot la frase trascritta

4. la frase viene decifrata per rilevare la presenza di un comando per il movimento

5. il comando viene eseguito dalla scheda ARM che si occupa anche di generare l’onda per muovere i motori

6. nel frattempo la scheda ARM sta leggendo un sensore ad ultrasuoni posizionato davanti al robot per controllare la distanza dagli ostacoli e fermare i motori in caso di pericolo.

Per supportare queste operazioni è necessario che il sistema che gira sulla scheda ARM sia allo stesso tempo ad alto livello di astrazione (per poter comunicare tramite socket in TCP, registrare in WAVE, supportare un microfono USB, ecc) e a basso livello, per poter controllare direttamente i motori elettrici e il sensore ad ultrasuoni. Per quanto riguarda la logica ad alto livello è sufficiente compilare e configurare appositamente la distribuzione Linux basata su Debian fornita insieme alla scheda ARM.

Per poter controllare in tempo reale i motori e il sonar, che richiedono tempistiche precise e veloci, sarebbe necessario un vero sistema real-time, dove la parallelizzazione tra le routine viene controllata in modo preciso. Fortunatamente esiste la patch RTAI Magma da applicare al kernel di Linux e alcuni moduli da avviare nel caricamento che serve a questo scopo. Grazie a questa patch è infatti possibile eseguire dei moduli in tempo reale con priorità altissima, che non vengono schedulati da Linux come i processi utente ma controllati direttamente a basso livello. Questi moduli quindi possono essere programmati per eseguire alcune operazioni secondo tempistiche accurate e deterministiche, a differenza dei processi utente, quindi risultano particolarmente utili per le operazioni come la lettura del sonar e la generazione dell’onda quadra per controllare i motori. Si vuole realizzare un’architettura “orientata al processo”, in modo da poter sostituire in futuro ogni singolo componente del sistema semplicemente sostituendo degli eseguibili.

Risorse

Tesi “Sviluppo di un robot mobile a comando vocale” - PDF - 1.20 MB


Actions

Informations

Leave a comment

You can use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>