Parliamo di robot
- Che cosa significa robot
- Che cosa può fare un Raspberry Pi per il tuo robot
- Come sterza un robot
- Quali termini imparare per parlare a un robot
- Come progettare un robot
Che cosa significa robot
Un robot è una macchina che prende decisioni autonome in base all’input dei suoi sensori. Un agente software è un programma che elabora automaticamente l’input e produce l’output. Forse un robot può essere meglio descritto come un agente software autonomo dotato di sensori e output di movimento, oppure come una piattaforma elettromeccanica dotata di software. In ogni caso, un robot richiede componenti elettronici, meccanici e software.
La parola robot evoca immagini da fantascienza, entità dalla forza e dall’intelligenza straordinarie. Spesso viene preso a modello il corpo umano, e il robot diviene un androide, un robot simile a un essere umano. Spesso gli viene data una personalità e così il robot si comporta come una persona, per qualche verso, ingenua.
La parola robot proviene dalla fantascienza. Deriva da una parola ceca che significa schiavo e fu usata per la prima volta nel 1921 nell’opera teatrale di Karel Capek Rossumovi univerzální roboti, I robot universali di Rossum. L’autore di fantascienza Isaac Asimov ha poi coniato la parola robotica mentre esplorava il comportamento dei robot intelligenti.
La maggior parte dei robot presenti nelle nostre case e industrie non è all’avanguardia e non ha certo un aspetto accattivante. Non camminano su due gambe, anzi, spesso non hanno affatto gambe. Alcuni sono dotati di ruote, ma altri non sono neppure mobili, ma tutti sono ricchi di parti mobili e sensori.
I robot come le moderne lavatrici, gli aspirapolvere autonomi, le caldaie intelligenti e i ventilatori ad analisi della qualità dell’aria si sono ormai infiltrati nelle nostre case e fanno parte della nostra vita quotidiana. Non hanno un aspetto minaccioso e ormai li consideriamo al pari di qualsiasi altra macchina, intorno a noi. Tuttavia, la stampante 3D, il braccio robotico e i giocattoli didattici sono un po’ più interessanti.
Fondamentalmente, i robot possono essere tutti semplificati fino a distinguere un output, come un motore, un input, come un sensore, e un controller, per l’elaborazione del codice. Di conseguenza, un robot:
- dispone di input e sensori per misurare e campionare le proprietà del suo ambiente;
- è dotato di output come motori, luci, suoni, valvole o riscaldatori per alterare il suo ambiente;
- utilizza i dati dei suoi input per prendere decisioni autonome su come controllare i suoi output.
Che cosa può fare un Raspberry Pi per il tuo robot
La scelta del controller da utilizzare per un robot può essere una delle più critiche. Essa determinerà quali tipi di input e output avremo, quali saranno i requisiti di alimentazione, quali tipi di sensori saremo in grado di utilizzare e quale codice dovremo eseguire. Cambiare controller può costringere a riscrivere il codice, a riprogettare la collocazione fisica del controller e adattare i requisiti di alimentazione.
Raspberry Pi è un’intera gamma di piccoli computer progettati per l’uso nel campo educativo. Il fatto di avere dei pin di I/O per collegarlo a vari componenti hardware specializzati lo rende da un lato un computer completo e dall’altro una delle scelte preferite dai maker (un termine che comprende tutti coloro cui piace creare oggetti per hobby, come robot e gadget). La scelta è facilitata dal suo costo relativamente basso e dalle sue dimensioni ridotte rispetto a un computer standard. Tutti i modelli Raspberry Pi offrono funzionalità che includono il collegamento di una fotocamera, di un display e di una tastiera, oltre a funzionalità di connessione in rete.
Velocità e potenza
Il Raspberry Pi è sufficientemente potente da gestire alcune attività di elaborazione visiva, come il riconoscimento facciale e il tracciamento di oggetti, e i nuovi modelli sono in grado di eseguire tali operazioni sempre più velocemente. Lo stesso si può dire anche per le attività di riconoscimento vocale. È per questo motivo che consiglio di impiegare i modelli più veloci: 4B, 3B+ e 3A+. I modelli Zero e Zero W sono troppo lenti e, sebbene il sistema funzioni anche su di essi, la loro lentezza potrebbe essere frustrante.
Il Raspberry Pi è un SBC (Single-Board Computer) sufficientemente potente da ospitare un sistema operativo completo, in particolare alcune distribuzioni di Linux. Questo fatto ci consente di utilizzare Python per l’elaborazione visiva e vocale, sfruttando librerie e strumenti già pronti all’uso. I microcontroller, come Arduino, Esp8266 e micro:bit, semplicemente non hanno sufficiente potenza per eseguire queste attività.
Vi sono anche altri computer SBC utilizzabili come controller con Linux, come BeagleBone, OnionIoT e Gumstix, ma sono o più costosi del Raspberry Pi o meno potenti. Solo alcuni offrono l’integrazione con una fotocamera. Sebbene il BeagleBone abbia una connettività di I/O analogica superiore, il Raspberry Pi 3A+ è più versatile e offre molte possibilità di estensione.
Connettività e networking
Il Raspberry Pi 3A+ è dotato anche di porte USB e HDMI. Non abbiamo in programma di usarle, anche se sono utili per il debug quando le cose vanno storte e si perde il controllo del robot. Per questo motivo, consiglio di avere a disposizione un display e una tastiera.
I modelli Raspberry Pi 4, 3 e Zero W hanno tutte il Wi-Fi e il Bluetooth integrati. Utilizzeremo il Wi-Fi per connetterci al robot, quindi occorre un modello che ne sia dotato. Il Wi-Fi può essere utilizzato per programmare il robot, per dirigerlo e per lanciare il codice da eseguire su di esso.
Il Raspberry Pi offre dei pin di I/O che consentono di collegarlo a vari tipi di sensori. Nel Raspberry Pi 3A+, le connessioni GPIO (General Purpose Input/Output) sono pronte all’uso, poiché i pin (chiamati anche header) sono già saldati in posizione. I modelli Raspberry Pi Zero e Zero W vengono forniti senza header. Anche le prime schede Raspberry Pi avevano connettori di I/O differenti. Per tutti questi motivi, le serie 3 e 4 Raspberry Pi rappresentano la scelta migliore.
Perché la scelta del Raspberry Pi 3A+
Per concludere, il Raspberry Pi 3A+ è un computer completo. Il seguente elenco di funzionalità soddisfa tutte le nostre esigenze.
- Funzionalità di I/O.
- Connettore per fotocamera.
- Capacità di elaborazione visiva e vocale.
- Wi-Fi e Bluetooth integrati.
- Possibilità di eseguire codice Python.
- Header presaldati pronti per il collegamento ai dispositivi dei robot.
- Piccolo e relativamente economico.
Inoltre, il Raspberry Pi 3A+ è dotato di una CPU quad-core ARM a 1,4 GHz, sufficiente per le nostre necessità. Le nuove versioni di Raspberry Pi potrebbero però sostituire questo modello offrendo ancora più velocità e funzionalità.
Leggi anche: Il manuale del maker domestico
Come sterza un robot
Come fare svoltare a sinistra o a destra un robot? Per scoprirlo, dobbiamo prima di tutto parlare di alcune forme di controllo.
Tipi di sterzo
Le tecniche più comuni per far sterzare un veicolo a ruote (compreso un robot) rientrano in due categorie principali: ruote sterzanti o ruote fisse.
Ruote sterzanti
Nei modelli a ruote sterzanti, una o più ruote di un robot possono essere rivolte in una direzione diversa dalle altre. Quando il robot procede, la ruota orientata diversamente fa sterzare il robot. Esistono due tipi di sterzo per un robot, come illustrato qui sotto.
Le frecce indicano la direzione del movimento e l’angolazione delle ruote. Osservando la figura, possiamo notare quanto segue.
- Le auto, in genere, utilizzano lo sterzo a pignone e cremagliera. Normalmente l’auto procede diritta.
- Ruotando il pignone e spostando la cremagliera, l’auto sterza.
- L’altro tipo di sterzo è quello a carro, utilizzato nei modelli più semplici. Normalmente, il mezzo procede diritto.
- Ruotando la barra, il mezzo sterza.
Vi sono anche altre varianti, oltre a queste, fra cui le seguenti.
- Robot con la capacità di riorientare indipendentemente ogni ruota, e di procedere lateralmente.
- Sterzo Ackerman, dove la rotazione di ciascuna ruota è calcolata in modo differente.
- Sterzo posteriore, dove sterzano il set di ruote anteriori e anche quello delle ruote posteriori, utilizzato nei veicoli lunghi.
Un buon esempio di sterzo a carro è il robot Unotron, mostrato nella prossma figura. Lo ha costruito mio figlio dallo chassis Unotron di 4tronix, con un controller Arduino Nano.
Nel progetto Unotron, c’è una singola ruota motrice sul retro (sotto il controller motori). Un servomotore fa girare l’intera piastra anteriore, sterzando le due ruote anteriori.
Gli svantaggi di questo tipo di sterzo sono legati allo spazio, al peso e alla complessità. Uno chassis predisposto per lo sterzo a ruote mobili richiede più parti mobili e spazio per alloggiarle. Unotron è piuttosto semplice, ma altri progetti possono essere ben più complessi, il che può portare anche a un aumento degli interventi di manutenzione.
Lo spazio necessario per effettuare una svolta completa (nota come diametro di sterzata) per i robot con sterzo a carro è maggiore, poiché questi devono andare avanti/indietro per poter sterzare.
È necessario un motore di grandi dimensioni per l’asse motore fisso, poiché non è possibile distribuire la potenza su due motori o sono necessari meccanismi complessi per bilanciare l’input. Se poi il meccanismo non si centra bene dopo aver sterzato, il robot non andrà ben dritto.
Ruote fisse
Lo sterzo tramite ruote fisse (in cui gli assi delle ruote sono fissi rispetto allo chassis) viene utilizzato frequentemente nei robot. È la velocità di rotazione di ciascuna ruota o set di ruote a impostare la direzione del robot. In questo caso le ruote non sterzano affatto; tuttavia, grazie al fatto che una ruota riceve più spinta dell’altra, il robot può compiere delle svolte. Un uso tipico è rappresentato nella figura seguente. Le frecce in basso rappresentano la velocità relativa dei motori. Le frecce in alto mostrano la direzione del robot.
Nella figura, possiamo vedere quanto segue.
- I motori operano alla stessa velocità, quindi il robot procede dritto.
- I motori a destra vanno più velocemente di quelli a sinistra, e il robot sterza verso sinistra.
Questo sistema presenta diversi vantaggi. Se intendiamo utilizzare dei cingoli, avremo bisogno di questo sistema di azionamento. È meccanicamente semplice, in quanto per girare basta azionare un solo motore per una sola ruota. Questo tipo di sterzo consente a un robot di ruotare sul posto, compiendo un giro completo di 360 gradi con un raggio di sterzata pari alla parte più larga o lunga del robot stesso.
Vi sono anche alcuni svantaggi nell’usare questo sistema. Durante la svolta, le ruote si trascinano lateralmente, causando attrito. Inoltre, qualsiasi piccola differenza nei motori, nei riduttori o nell’output del controller può causare derive laterali.
Altri sistemi di sterzo
Il controller che stiamo utilizzando sul nostro robot ci consente di controllare quattro canali per i motori. Possiamo utilizzare quattro motori per tipi di ruote speciali, noti come ruote Mecanum.
Queste ruote consentono di sterzare nel modo appena descritto (skid steering), ma anche di eseguire movimenti a granchio, in modo che il robot possa spostarsi a sinistra o a destra senza sterzare. Tecnicamente, si tratta ancora di uno sterzo a ruote fisse. La Figura che segue mostra una base dotata di ruote Mecanum.
Si tratta di ruote straordinariamente flessibili ma meccanicamente complesse, ad alta manutenzione, pesanti e un po’ più costose delle normali ruote. Tuttavia, sono divertenti.
Quali termini imparare per parlare a un robot
Mycroft è un pacchetto software che rientra nell’ambito degli assistenti vocali. Mycroft può ascoltare comandi vocali e intraprendere determinate azioni in base a tali comandi. Il codice di Mycroft è scritto in Python ed è open source e gratuito, ed esegue la maggior parte della sua elaborazione vocale nel cloud. Dopo l’elaborazione dei comandi, Mycroft utilizzerà una voce per rispondere.
Mycroft ha una ricca documentazione online e conta su una nutrita community. Vi sono varie alternative che potremmo prendere in considerazione dopo aver sperimentato con Mycroft, per esempio Jasper, Melissa-AI e Google Assistant.
Esaminiamo innanzitutto i concetti di base di un assistente vocale.
Speech-to-Text (STT)
Descrive quei sistemi che prendono in input un file audio contenente del parlato e lo trasformano in una serie di parole che il computer può elaborare.
Sono software che possono essere eseguiti localmente o nel cloud su macchine molto più potenti.
Wake-Words
Gli assistenti vocali di solito hanno una parola di richiamo: una frase o una parola che, pronunciata prima del resto di un comando, richiama l’attenzione dell’assistente vocale. Fra gli esempi vi sono le espressioni Ehi Siri, Hi Google e Alexa. Mycroft usa la parola Mycroft o la frase Hey Mycroft, che può essere cambiata a piacere.
Un assistente vocale di solito ascolta solo le Wake-Words e ignora tutti gli altri input audio fino a quando non viene svegliato. Tale parola di richiamo viene riconosciuta localmente sul dispositivo. I suoni che campiona dopo la parola di richiamo vengono poi inviati a un sistema di sintesi vocale per il riconoscimento.
Utterance
È un’espressione che contiene il parlato dell’utente. Gli assistenti vocali utilizzano un vocabolario per abbinare tale espressione a una skill. Il vocabolario farà sì che Mycroft invochi il gestore dell’intento.
Il vocabolario, in Mycroft, comprende elenchi di frasi intercambiabili, in un file.
Un buon esempio di espressione è chiedere a Mycroft del tempo: Hey Mycroft, what is the weather?.
Intento
È un compito che l’assistente vocale può svolgere, come scoprire che tempo fa oggi. Costruiremo degli intenti specifici per interagire con il nostro robot. Un intento fa parte di una skill, e definisce il codice del gestore e il tipo di risposta da dare.
Usando, per esempio, la skill meteo, l’espressione What is the weather? attiva l’intento di recuperare il meteo corrente per la località configurata e comunicarne i dettagli all’utente.
Dialogo
Nella terminologia di Mycroft, è una frase pronunciata da Mycroft. Un esempio potrebbe essere OK, the robot has been started o Today, the weather is clear.
Una skill contiene una raccolta di dialoghi, con insiemi di sinonimi e varie lingue.
Vocabolario
Le espressioni pronunciate, una volta convertite in testo, vengono confrontate con il vocabolario. I file vocabolario, come i dialoghi, fanno parte di un intento, che abbinano le espressioni alle azioni. Tali file contengono sinonimi e possono essere organizzati in set di lingue.
Per esempio, frasi come What is the weather?, Is it sunny?, Do I need an umbrella? e Will it rain? sono considerate sinonimi. Potremmo anche dividere più concetti, per esempio, un elemento del vocabolario potrebbe essere Ask the robot to e un altro drive forward.
Skill
Le skill sono contenitori per un intero set di vocabolario di utterance, dialoghi e intenti. Una skill per gli avvisi potrebbe contenere intenti come l’impostazione di un avviso, l’elenco degli avvisi, l’eliminazione di un avviso o la modifica di un avviso. Conterrebbe un dialogo per dire che l’impostazione dell’avviso è completa o per confermare ogni avviso.
Ora che conosciamo la terminologia impiegata e i componenti di un agente vocale, dobbiamo considerare che cosa costruiremo. Dove collocheremo l’altoparlante e il microfono?
Limitazioni nell’ascolto del parlato da parte di un robot
Prima di iniziare a scrivere il codice, dovremo considerare che cosa faremo. L’altoparlante e il microfono dovrebbero essere sul robot o da qualche altra parte? L’elaborazione sarà locale o nel cloud? Ecco alcune considerazioni.
- Rumore: un robot dotato di motori è un ambiente rumoroso. Porre il microfono troppo vicino ai motori lo renderà quasi inutilizzabile.
- Energia: l’assistente vocale è in continuo ascolto. Il robot presenta già molti consumi a causa dei sensori che contiene. Questo ulteriore consumo va a carico sia della batteria sia della potenza di CPU.
- Dimensioni e posizione fisica: l’HAP per l’altoparlante e la voce aggiungerebbero complicazioni in termini di altezza e di cablaggio di un robot già molto congestionato.
Una combinazione microfono + altoparlante potrebbe essere collocata su un’asta per un robot di dimensioni non banali: lì potremmo collocare anche un secondo Raspberry Pi. Ma questa soluzione non è adatta per questo piccolo e semplice robot. Pertanto, creeremo una scheda vocale separata, che comunicherà con il robot, ma non si troverà direttamente sul robot. L’assistente vocale sarà in esecuzione su un secondo Raspberry Pi.
Utilizzeremo anche un sistema che accede al cloud per elaborare il parlato. Un sistema completamente locale offrirebbe vantaggi in termini di privacy e rapidità di risposta, ma al momento non esiste un assistente vocale completo che funzioni in questo modo su un Raspberry Pi. Il software Mycroft ci offre flessibilità nell’uso delle nostre competenze e dispone di un riferimento per l’elaborazione vocale, in modo che un giorno possa essere eseguita localmente.
Come progettare un robot
È molto eccitante iniziare a immaginare tutte le cose che farà un robot. Iniziamo a farne un elenco.
- Avrà ruote e sarà in grado di spostarsi sul pavimento.
- Avrà un controller Raspberry Pi 3A+.
- Avrà un controller motori per le ruote.
- Sarà in grado di indicare il proprio stato con una serie di LED multicolori.
- Utilizzerà una coppia di servomotori per il meccanismo di panoramica e inclinazione.
- Sarà in grado di evitare le pareti e aggirare gli ostacoli, grazie ai sensori di distanza a ultrasuoni o laser.
- Avrà un encoder per ruota, per sapere di quanto si è spostato.
- Utilizzerà una fotocamera per rilevare oggetti colorati o volti.
- Sarà in grado di seguire linee grazie alla fotocamera.
- Avrà un microfono e un altoparlante per i comandi vocali.
- Avrà un gamepad come telecomando.
- Avrà bisogno di energia per alimentare tutte queste cose.
Sono parecchie funzionalità. Ora dobbiamo disegnare tutti i blocchi hardware. La figura sottostante mostra il diagramma a blocchi che ho realizzato per il nostro robot con Draw.io, ma un semplice schizzo su un foglio di carta è un ottimo inizio per pianificare il robot. La maggior parte dei miei robot è nata in quel modo.
Qui le annotazioni non sono in notazione formale: sono solo un modo per visualizzare semplicemente tutti i componenti che dovranno essere collegati. Insieme a questo, di solito abbozzo approssimativamente anche dove collocherei fisicamente i sensori e i componenti.
Lo schizzo rappresentato nella prossima figura non è esaustivo, accurato o in scala, ma è solo per farmi un’idea di dove e come voglio collocare i componenti. Notate i seguenti aspetti di questo diagramma.
- I sensori hanno un campo visivo chiaro e i sensori di distanza puntano ai lati. Entrerò più in dettaglio nei capitoli relativi ai sensori sul motivo per cui questo è importante.
- Gli encoder sono posizionati sopra le ruote alle quali verranno applicati.
- Gli oggetti pesanti, in particolare le batterie, devono essere tenuti bassi (sotto il baricentro) per evitare che il robot si ribalti.
- Le batterie devono essere sostituite, quindi devono essere facilmente accessibili.
- Cercate di mantenere i componenti direttamente collegati abbastanza vicini gli uni agli altri.
Questo è un piano approssimativo. Non è necessario che sia così dettagliato e questo non è che un esempio. Dimensioni reali, compromessi di progettazione e intoppi faranno cambiare lo schema. Consideratelo solo un punto di partenza.
Mentre procederemo, esamineremo i dettagli in questi diagrammi e inizieremo a dare corpo al vero robot, chiarendo le varie parti di questi schemi. Qualsiasi diagramma come questo, all’inizio di un progetto, dovrebbe essere considerato un po’ approssimativo: l’abbozzo di un’idea. Non è in scala e non dovrebbe essere seguito alla cieca. È solo una guida, una mappa dalla quale iniziare a lavorare.
Questo articolo richiama contenuti da Imparare a programmare robot.
Immagine di apertura di Possessed Photography su Unsplash.