Obiettivi
- Comprendere il funzionamento del sistema audio e dei moduli linguistici di Nao.
- Analizzare il ruolo dell'intelligenza artificiale nel riconoscimento vocale e nella gestione del dialogo.
- Sperimentare la programmazione di regole dialogiche con QiChat e ALDialog.
- Stimolare interesse per la robotica educativa e le sue applicazioni pratiche.
Contenuti
Nao è un robot umanoide avanzato, progettato per interagire con gli esseri umani attraverso il linguaggio naturale, movimenti espressivi e riconoscimento vocale. La sua capacità di comprendere e rispondere a input vocali rende Nao ideale per applicazioni educative, di intrattenimento e assistenza. Questa guida introduce il funzionamento del dialogo uomo-macchina, e ai moduli audio e linguistici di Nao.
Sistema Audio di Nao
Hardware
Il sistema audio di Nao è progettato per rilevare suoni provenienti da diverse direzioni e per riprodurre audio con una qualità sufficiente a garantire una comunicazione chiara.
- Altoparlanti: Nao è dotato di due altoparlanti integrati nelle orecchie, progettati per riprodurre suoni in stereo. Questi altoparlanti sono ottimizzati per emettere suoni comprensibili, riducendo al minimo le distorsioni.
- Microfoni: Il robot dispone di quattro microfoni omnidirezionali, posizionati attorno alla faccia (frontale, posteriore, sinistro e destro). Questa configurazione consente a Nao di determinare la direzione di provenienza del suono (localizzazione acustica), migliorando l’interazione con più utenti contemporaneamente.
- Gamma di Frequenza: La gamma di frequenza operativa dei microfoni varia tra 300Hz e 8kHz, coprendo la maggior parte delle frequenze vocali umane.
Software
A livello software, Nao utilizza il modulo NAOqi Audio, che si occupa di gestire l’intero sistema audio del robot. Questo include la rilevazione, localizzazione e interpretazione dei suoni, nonché la sintesi vocale per rispondere agli utenti.
- ALAudioDevice: Gestisce l’input e l’output audio.
- ALAudioPlayer: Riproduce file audio sul robot.
- ALAudioRecorder: Registra audio in tempo reale.
Moduli Principali
ALAudioDevice (Gestione Audio)
- Funzione: Il modulo ALAudioDevice fornisce un’interfaccia API che permette ad altri moduli di accedere agli input dei microfoni e agli output degli altoparlanti. Questo modulo è fondamentale per l’acquisizione e la riproduzione del suono.
- Tecnologia di Base: ALAudioDevice utilizza la libreria ALSA (Advanced Linux Sound Architecture) per comunicare direttamente con l’hardware audio di Nao. ALSA garantisce una gestione avanzata delle periferiche audio, supportando anche funzionalità MIDI.
- Interazione tra Moduli:
- ALAudioPlayer: Permette la riproduzione di file audio locali.
- ALAudioRecorder: Registra file audio in tempo reale, consentendo la memorizzazione di conversazioni o la registrazione di eventi.
ALSpeechRecognition (Riconoscimento Vocale)
- Funzione: ALSpeechRecognition consente a Nao di riconoscere parole e frasi predefinite in più lingue, contribuendo a rendere il robot più versatile in ambienti multilingue.
- Tecnologia di Riconoscimento:
- ACAPELA GROUP: Tecnologia di sintesi vocale avanzata per Nao v3.x, progettata per creare voci umane realistiche.
- NUANCE: Per Nao v4, il riconoscimento vocale utilizza servizi cloud-based e moduli di text-to-speech espressivi, migliorando la naturalezza delle conversazioni.
Fasi Operative:
- Preparazione: Le frasi da riconoscere vengono caricate nel modulo.
- Rilevamento Vocale: Se un suono viene rilevato, viene impostato un valore booleano nella chiave SpeechDetected.
- Riconoscimento: La parola o frase che corrisponde maggiormente all’input viene associata a WordRecognized con un livello di confidenza.
- Analisi Grammaticale: In aggiunta, la frase viene memorizzata nella chiave WordRecognizedAndGrammar, con l’indicazione della grammatica utilizzata.
Moduli di Dialogo
ALDialog (Gestione del Dialogo)
- Funzione: ALDialog gestisce il flusso del dialogo, creando un database di conoscenza organizzato in regole di risposta. Consente a Nao di rispondere a domande e di avviare conversazioni spontanee.
- Tipologie di Regole:
- Regole Utente: Associano input specifici (frasi o parole chiave) a risposte predefinite.
- Regole di Proposta: Nao può avviare una conversazione o fare domande in autonomia, senza che l’utente fornisca un input iniziale.
Esempio:
topic: ~greetings
language: it
u: (Ciao Nao come stai oggi) Ciao uomo, sto bene grazie e tu?
proposal: Hai visto quel ragazzo in TV ieri?
u1: (si) Mi sembrava un pazzo, non credi?
u1: (no) Mi dispiace ma non capisco
- Memoria e Contesto: ALDialog utilizza ALMemory per salvare e recuperare informazioni durante una conversazione, consentendo continuità e coerenza nel dialogo.
- Integrazione Avanzata: ALDialog può essere integrato con QiChat per la creazione di regole conversazionali più complesse e dinamiche.
QiChat: Linguaggio di Programmazione per Dialoghi
QiChat è un linguaggio progettato per gestire interazioni naturali tra esseri umani e robot, come Nao. La sua struttura consente di associare input umani (ciò che viene detto) con output pertinenti del robot. La chiave del successo di QiChat è la possibilità di definire regole e concetti che facilitano dialoghi flessibili e contestuali.
Caratteristiche principali:
-
- Concetti (Concepts): Liste di parole o frasi che rappresentano un’idea. Possono essere statici (immutabili durante l’esecuzione) o dinamici (modificabili a runtime).
- Regole (Rules): Associano input specifici con risposte del robot, includendo azioni o frasi.
- Gestione del Focus: Solo un topic può essere attivo alla volta, garantendo che il robot segua una logica di priorità per l’attenzione.
- Sintassi:
- Input utente:
u: (frase) - Output robot:
risposta del robot
- Input utente:
Concetti Statici e Dinamici
I concetti sono fondamentali per costruire un dialogo ricco e flessibile.
Concetti Statici
Sono visibili a livello globale all’interno del robot e non possono essere modificati durante l’esecuzione.
Esempio:
concept: (saluto) ["ciao", "salve", "buongiorno"]
Questo concetto permette al robot di riconoscere e rispondere a diversi tipi di saluto.
concept:(pianeti)[mercurio, venere, terra, marte]
Concetti Dinamici
Sono specifici di un singolo topic e possono essere aggiornati durante l’esecuzione.
Esempio:
dynamic: mp3
u: ("ascoltiamo" ["vorrei cantare"] _~mp3)
Qui, il robot associa il comando di ascoltare musica con un’azione che può essere aggiornata a runtime.
Creazione delle Regole
Le regole sono utilizzate per definire il comportamento del robot in risposta a un input umano.
Struttura di una Regola
Una regola include:
- Input umano: Il testo o il comando che il robot deve riconoscere.
- Output del robot: La risposta o azione eseguita dal robot.
Esempio di regola semplice:
u: ("ciao nao") ^pCall(ALMotion.wakeUp()) ~saluto
In questo caso, il robot si alza e saluta quando riconosce “ciao nao”.
Proposte e Ripetizioni
Le regole possono includere proposte che il robot utilizza per guidare il dialogo o richiedere chiarimenti.
Esempio di proposta casuale:
proposal: %go "Che ne dici di parlare di musica?"
u: (~next) ^gotoRandom(go)
Gestione dei Topic
I topic rappresentano gruppi di regole e concetti per gestire argomenti specifici. Solo un topic alla volta può avere il focus, ma è possibile attivarne diversi contemporaneamente.
Esempio di definizione di un topic:
topic: ~music()
language: iti
u: ({"che tipo"} di musica ti ["piace", "preferisci"]) ^topicTag(music, musica) ~musica
u: (~piacere {musica} rock) "Oh sì, molto!" ^switchFocus(chacha_music/.)
Questo topic consente al robot di rispondere a domande sulla musica e attivare azioni come ballare.
Integrazione con Python
I dialoghi possono essere gestiti e richiamati tramite codice Python. Questo offre maggiore controllo e possibilità di personalizzazione.
Esempio di richiamo di un concetto dinamico:
proxy = ALProxy("ALDialog")
proxy.setConcept("mp3", "it", ["pink floyd", "jimi hendrix"])
Esempio di un topic che permette al robot di rispondere a saluti e parlare dei suoi hobby.
Esempio di Codice:
topic: ~hobbies()
language: iti
concept: (saluto) ["ciao", "salve", "buongiorno"]
u: (~saluto) "Ciao! Come posso aiutarti?"
u: ("Quali sono i tuoi hobby?") "Mi piace ballare, cantare e aiutarti!"
Animazioni e Suoni
- Animazioni:
- ^run(animation_name): Esegue animazioni durante il dialogo.
- ^start(animation_name): Avvia animazioni.
- ^stop(animation_name): Interrompe animazioni.
- Suoni:
- ^runSound(sound_file): Riproduce un suono e riprende il dialogo.
Esempio:
^start(animations/Stand/Gestures/Hey_1) Ciao ragazzi!
Esempio : Dialogo con Nao
topic: ~introduction
language: it
u: (Ciao Nao) ^pCall(ALMotion.wakeUp()) Ciao! Piacere di conoscerti.
u: (Come stai?) Sto bene, grazie per aver chiesto!
proposal: Ti va di ascoltare un po' di musica?
u1: (si) Certo! Avvio la playlist.
u1: (no) Nessun problema, dimmi pure cosa vuoi fare.
Conclusioni
Questa guida fornisce una panoramica sulle capacità di dialogo di Nao, illustrando come i vari moduli audio e linguistici si integrano per creare interazioni naturali. La combinazione di regole statiche e dinamiche, unita a animazioni e suoni, rende Nao uno strumento potente per applicazioni educative e di intrattenimento.