Il futuro dell’elettronica: robot, intelligenza artificiale e machine learning (con Arduino)

Facciamo una panoramica sulle soluzioni adottate nell’interazione tra robot e ambiente e integrate nel concetto di Machine Learning e in quello più ampio di AI.

I robot amatoriali o didattici ed in particolare quelli semoventi (detti “rover”) utilizzano, per muoversi autonomamente nell’ambiente, sensori che comunemente sono del tipo con uscita digitale; con questo termine intendiamo che forniscono un’informazione sulla semplice presenza o assenza di ostacoli, quindi non sulla distanza da essi.

Con questo tipo di interazione con l’ambiente, l’algoritmo di guida difficilmente può avvicinarsi ad un approccio AI (Artificial Intelligence, ovvero Intelligenza Artificiale), rimanendo piuttosto nell’ambito della programmazione tradizionale. Per chiarire questa premessa occorre tentare di schematizzare la natura della AI, per cui introdurremo brevemente questo concetto di cui ultimamente si parla tanto.

Intelligenza Artificiale: cos’è?

Tutti sanno che un computer può essere idealizzato come uno scatolotto che riceve dei dati, da tastiera o tramite la selezione con il mouse, e produce il risultato dell’elaborazione di questi dati su schermo o stampante.

In questo tipo di utilizzo l’essere umano, che inserisce i dati e riceve il risultato, è la fondamentale interfaccia del computer.

Ma in diverse situazioni è possibile, ed anche più utile, eliminare questa mediazione umana e far agire il computer sulla base di input raccolti direttamente dall’ambiente.

In questo caso, in genere, il computer produrrà un output che agirà sull’ambiente e l’uomo sarà solo uno spettatore che ne raccoglie i risultati in termini di modifiche fatte alla sua realtà.

In genere è proprio questo il futuro immaginato, dall’informatica e dall’elettronica, per il computer.

Non è un caso se ultimamente l’elettronica si è molto concentrata sulla produzione di sensori ed attuatori.

Un sistema autonomo di questo genere dovrà, per definizione, essere “intelligente”, nel senso che dovrà comportarsi in maniera tale da raggiungere uno scopo per il quale è stato creato (Fig. 1).

Fig. 1 Sistema intelligente autonomo.

 

Concentriamoci ora sull’algoritmo che lega funzionalmente l’output all’input di un sistema intelligente autonomo.

La capacità di soddisfare più o meno bene gli obiettivi, a prescindere dalla variabilità dell’input, definisce il grado di “intelligenza” dell’algoritmo. In realtà anche un algoritmo molto sofisticato non può ovviare ad una povera qualità dell’input e, in seconda battuta, ad una scarsa qualità dell’output.

Questo vale anche per l’uomo, dove la deprivazione sensoriale non permette uno sviluppo adeguato o confonde il comportamento di un adulto.

Viceversa, un sistema sensoriale sofisticato necessita di un algoritmo sofisticato per esprimere bene le potenzialità del sistema autonomo.

Ecco che un input digitale ON/OFF non permette un comportamento particolarmente intelligente ed occorre passare almeno a sensori con risposta continua (para-analogica).

Nel caso di sistemi autonomi se-moventi, per esempio, un sensore di valori di distanza su diversi angoli è il minimo necessario per semplici compiti di orientamento e ricerca; ma avendo un tal genere di sensori, sorge subito il problema di interfacciarli con un algoritmo che gira su un elaboratore digitale.

Dunque, come gestire questa ricca quantità di informazioni? Non sono praticabili serie infinite di “if … then” e perciò occorre utilizzare altri paradigmi. Ed è qui che si comincia a parlare di Intelligenza Artificiale.
Occorre innanzitutto fare una distinzione di base fra questi due tipi di algoritmi: algoritmi programmati ed algoritmi che imparano.

Algoritmi programmati

I sistemi a logica fuzzy sono algoritmi che in un certo senso fanno in modo da adattare la sensoristica continua al mondo digitale del computer.

La logica fuzzy se la cava simulando un computer virtuale con logica non booleana ma continua, ovvero facendogli trattare variabili che possono avere un grado di verità continuo tra 0 ed 1.

È stata utilizzata con successo anche nei microcontrollori, perché permette di gestire sensori continui in modo efficiente anche con hardware limitato.

Tale tecnica è il modo più semplice per realizzare, ad esempio, sistemi di controllo automatico semplificati o per comandare robot semoventi con sensori complessi e a risposta continua.

Siamo dunque entrati nel campo dell’AI? Non è detto, perché dipende dalla complessità dell’algoritmo che utilizza la fuzzy logic. Definire il settore dell’AI è infatti complesso. In prima approssimazione, possiamo dire che un sistema rientra nell’AI se il suo comportamento simula il comportamento umano (vedi “Test di Turing”). Ma a questo punto si tratta di definire il “comportamento umano”.

Ce la possiamo cavare affermando che un comportamento umano è sostanzialmente adattativo, cioè capace di adattare la propria risposta al variare della risposta ambientale.

Esempi di applicazioni di AI, sono i sistemi esperti e i programmi di esplorazione euristica; si tratta di algoritmi che trattano comunque dati digitali, quindi poco adatti a a gestire sensori che forniscono segnali analogici.

I sistemi esperti tentano di simulare il comportamento di un essere umano descrivendo una grande serie di regole (booleane del tipo “if … then” dette “basi della conoscenza”), ricavate interpellando gli esseri umani per ogni possibile situazione di input.

Chiaramente questo approccio è limitato ad argomenti molto circoscritti della realtà ed è stato uno dei primi tentativi di AI che ha ottenuto qualche significativo risultato ma che ormai è in fase di superamento. Gli algoritmi euristici hanno ambiti ristretti e specialistici come per esempio i programmi di gioco.

Algoritmi che imparano

Gli algoritmi programmati prevedono l’esistenza di un essere umano che costruisca ed implementi la relazione tra input e output, spesso molto complessa.

Al contrario, gli algoritmi che imparano prevedono che l’essere umano costruisca ed implementi un sistema che sia capace di rappresentare autonomamente questa relazione, in base ad alcune direttive di massima la cui natura differenzia i vari tipi di apprendimento.

Poiché l’apprendimento è caratteristico dell’essere umano (ma anche degli altri essere viventi) possiamo dire con maggiore sicurezza che entriamo nel campo dell’AI.

Anche questa volta dobbiamo fare una suddivisione fra due tipologie: apprendimento supervisionato e apprendimento non supervisionato.

Apprendimento supervisionato

Questi algoritmi, per imparare, hanno bisogno di una serie consistente di esempi input/output; in base a questi esempi costruiscono una corrispondenza anche complessa ed in genere statistica tra i valori dei sensori e il corretto output.

La Fig. 2 propone un esempio di addestramento supervisionato.

Quindi, dopo l’addestramento, possono rispondere in maniera appropriata a qualunque insieme di valori di input oltre a quelli degli esempi.

Questi algoritmi si rifanno, in genere, a sistemi a “reti neurali”. Anche i sistemi “Deep Learning” (Fig. 3), molto di moda attualmente, sono di questo tipo. Il riconoscimento di pattern e di immagini è l’applicazione più comune.

Rispetto alle prime reti neurali, i sistemi moderni hanno inserito una serie di elaborazioni e filtri che permettono alle reti neurali di estrarre meglio la conoscenza dagli esempi.

È evidente che in queste applicazioni, fermo restando che l’input sensoriale rimane complesso, l’output può anche essere un avviso all’interfaccia umana e non un azionamento.

Il punto di forza di questo tipo di algoritmi basati sulle reti neurali è l’efficiente modalità che aggiusta i parametri al verificarsi di un errore sull’output; tale modalità è chiamata “Error Back Propagation”.

 

Fig. 2 Addestramento supervisionato.

Fig. 3 Apprendimento con algoritmo evolutivo.

Apprendimento non supervisionato

Adesso le cose si fanno più difficili: non c’è più un essere umano che addestra e quindi il sistema deve acquisire tutte le informazioni dall’ambiente, compreso l’errore che commette ad ogni passo.

Dato che gli serve per correggere la propria risposta allo scopo di migliorare le proprie performance.

Ma sulla base di quale criterio si definisce l’errore o la bontà della risposta, se non sono più disponibili gli esempi?

Per chiarire questo aspetto facciamo riferimento alla natura: come fa un essere vivente a modificare il suo comportamento per adeguarlo alle condizioni ambientali con la massima efficienza?

In due modi: con l’evoluzione e con il rinforzo. La prima agisce in tempi lunghissimi e a livello di popolazione, mentre il secondo, durante la vita e sul singolo individuo, cercando di soddisfare uno o più stimoli interni, “cablati” dall’evoluzione. In genere fame e spinta alla procreazione.

L’imitazione dell’evoluzione naturale ha prodotto gli algoritmi genetici o evolutivi (Fig. 4) che prevedono il test di una popolazione di sistemi intelligenti con la selezione dei migliori in base ad un criterio di “fitness” stabilito a priori.

La popolazione di partenza è prodotta con parametri casuali per ogni singolo sistema: per esempio, pesi casuali delle sinapsi della rete neurale che implementa l’algoritmo. Dai migliori viene generata una successiva popolazione di figli applicando piccole mutazioni casuali ai parametri dell’algoritmo. Popolazione dopo popolazione, il comportamento degli individui migliora anche se non è garantito il raggiungimento del comportamento ottimale.

Però tale tecnica è in genere utilizzata in un mondo virtuale con individui simulati, per ragioni pratiche; ma nulla vieta di riutilizzare gli algoritmi risultati migliori per gestire un sistema fisico, chiaramente a patto che la simulazione di vita artificiale sia stata soddisfacentemente realistica.

 

Fig. 4 Apprendimento per rinforzo.

 

Però l’essere vivente ed in particolare l’uomo, impara per tentativi ed errori anche durante la vita; in questo paradigma occorre perciò immaginare un algoritmo che corregga l’azione del sistema intelligente, in base ad uno o più criteri di soddisfazione.

Questi algoritmi sono detti di “rinforzo” perché cercano di valorizzare le azioni che avvicinano all’obiettivo (o agli obiettivi) mentre cercano di far dimenticare le azioni poco produttive. Il tutto per ognuno dei pressoché infiniti possibili valori dell’input (o se vogliamo degli stati del sistema).

È evidente che occorrono algoritmi che ancora una volta estraggano e sintetizzino classi di azioni per classi di input sensoriale.

Sono i sistemi più complessi ed ancora non risolti in modo generale ed ottimale. Infatti oltre al sistema agente c’è bisogno anche di un sistema che valuti la situazione in termini di raggiungimento di obiettivi.

Lo sviluppo di questi algoritmi potrebbe portare, probabilmente un domani, addirittura all’auto coscienza dei sistemi intelligenti autonomi, ovvero alla cosiddetta “AI forte”, che si distingue dalla “AI debole” che è relativa al comportamento intelligente per compiti limitati, come quella realizzata dalle reti neurali, Deep Learning, ecc.

Sensori ToF

Tornando al nostro “rover”, senza scomodare la complessa gestione delle immagini di una eventuale telecamera posizionata su di esso, già un sistema di tipo “radar” basterebbe a fornire una ricca informazione per un movimento intelligente.

Un metro ad ultrasuoni di costo accettabile non ha risoluzione e orizzonte necessario, perché bisognerebbe montarlo su un sistema ruotante, tipo servo, per realizzare una scansione continua; oppure metterne molti a coprire un ampio angolo.

Ultimamente, però, sono apparsi nuovi tipi di sensore di distanza basati sul “tempo di volo” (ToF: Time of Flight) di un raggio laser, che hanno un prezzo relativamente basso (< 20€) e sono più precisi di un sistema ad ultrasuoni, anche perché l’angolo di misura può essere ben più ristretto.

Un primo prodotto è quello basato sull’integrato VL6180 (della ST) di cui Futura Elettronica distribuisce il circuito di test (breakout board, mostrata nella Fig. 5) con il codice “BREAKOUT017 “.

La piccola scheda non fa altro che adattare la tensione di alimentazione e i livelli logici del bus I²C; può essere alimentata anche a 5V e i livelli logici del bus di comunicazione possono essere anch’essi a 5V, mentre l’integrato, di suo è compatibile con i livelli 0/3V.

Il collegamento con Arduino o altro microcontrollore avviene tramite il bus seriale I²C e sfruttando una libreria predisposta scaricabile dalla pagina del prodotto.

 

 

La libreria rende il funzionamento molto semplice e, una volta inizializzato il sensore, basta chiedergli la distanza che rileva in quel momento.

La distanza massima può arrivare a quasi 15cm ed è garantita una certa immunità alle variazioni di luminosità ambientale ed alle variazioni di riflettanza degli oggetti.

L’emissione del laser è sull’infrarosso (850nm) ed il suo angolo di rilevamento è di circa 25°, mentre il tempo di risposta è al massimo di 15ms.

Per provare ad avere una rilevazione continua su 180°, possiamo posizionare il sensore su un servo e fare una scansione bidirezionale. Purtroppo un servo troppo economico (GS-9018) non ha un corretto posizionamento assoluto e la scansione cambia asseconda del verso di rotazione.

Si può allora provare ad utilizzare un motore passo-passo, l’economico SM28BYJ (codice SM2003DB), che è anche più silenzioso ed affidabile per una scansione continua.

Il risultato è stato migliore, ma rimane il problema del posizionamento assoluto di partenza: infatti, non avendo un “feedback” di posizione come i servo, lo spostamento va gestito da software a partire dalla posizione di start che deve essere inizializzata a mano.

La verifica dello “scanner” è stata fatta utilizzando una sagoma di cartone rappresentata dalla linea spessa in Fig. 6.

Nella Fig. 7 potete invece vedere la differenza tra l’utilizzo di un servo GS-9018 e di uno stepper come SM28BYJ per la scansione.

Comunque anche nel primo caso applicando un “offset” sulla scansione di ritorno si ottiene un buon risultato. In ambedue i casi è opportuno scansionare con angoli <= 15° ed applicare una media.

Questo scanner così composto potrebbe essere utilizzato su un “rover” a due ruote molto piccolo, dato il range limitato che lo contraddistingue. In sostanza, per esempio un robottino didattico da scrivania, a patto di mantenere una piccola dimensione anche per lo scanner.

Fig. 6 Rilevazione ToF su servo o stepper (mediata e corretta).

 

Fig. 7 a) scansione con servo economico b) scansione con stepper-motor.

 

Il secondo prodotto ToF è più sofisticato e raggiunge in teoria i 150/200cm.

Con una tale visibilità degli ostacoli è pensabile un utilizzo su un semovente da pavimento o da terreno.

L’integrato che lo implementa ha la sigla VL5310X (sempre della ST) e la breakout board corrispondente (sempre prodotta dalla Futura Elettronica) è praticamente identica a quella descritta poco fa, ma è siglata “BREAKOUT018”.

Vediamo come potrebbe funzionare nell’ambito di una scansione continua.

Il laser emesso è su un infrarosso un po’ più spinto (940nm), ma soprattutto ha un microprocessore integrato più potente per poter elaborare più rilevazioni, fornendo un risultato ripulito dai disturbi.

Infatti i tempi di risposta sono più alti, circa 30ms di base, fino ad arrivare anche a 300ms nella modalità “High accuracy”.

La libreria è diversa dalla precedente e permette maggiori possibilità di messa a punto. Infine l’angolo di rilevazione è anche questa volta di 25°.

Le prove effettuate utilizzando la libreria hanno però dimostrato alcuni limiti. Innanzi tutto un test come metro ha rilevato una soddisfacente misura solo fino alla distanza di poco più di un metro.

Con un errore di ±3cm in questo range. Anche la configurazione “Long Range” non ha cambiato la situazione. In ogni caso applicando la scansione a 180° limitata ad una distanza di 120cm si è evidenziata una maggiore approssimazione dei risultati rispetto al precedente ToF.

In Fig. 8 è mostrato un esempio di scansione per il rilevamento di un perimetro rappresentato dalla linea più spessa.

Con questi presupposti, una navigazione può contare su una visione della realtà frontale solo approssimativa e poco precisa; siccome l’integrato ha un largo margine di configurazione, non è escluso che un approfondito studio e regolazione della libreria e dei parametri possa migliorare la resa.

Ma un prodotto più completo e utilizzabile è quello descritto nel prossimo paragrafo.

Fig. 8 Scansione con ToF VL5310X.

Sensori Lidar

Lo sviluppo della ricerca finalizzata a creare auto a guida autonoma ha portato sul mercato una serie di prodotti con funzionalità radar.

Tra questi i LIDAR (Laser Imaging Detection and Ranging) sono diventati molto popolari ed hanno cominciato ad essere portati anche in campo hobbistico. Sono sostanzialmente dei ToF più sofisticati ed integrati con un sistema di scansione.

Uno di questi è il YDLIDAR X4 della “EAI” visibile nella Fig. 9 e distribuito da Futura Elettronica con il codice FR704.

Ha destinazione amatoriale ed ha un costo orientativo poco maggiore di 100€.

Ha dimensioni di circa 7X10 cm con una altezza di circa 5 cm. Un motore passo-passo silenzioso fa ruotare la testa che supporta il laser emettitore ed il ricevitore.

Ha una risoluzione angolare di mezzo grado ed un range da 10 cm a 10 m, con una precisione maggiore di 1 cm (mediamente 5 mm).

Ruota con una velocità di circa 1,5 giri/sec, quindi compie circa 5.000 scansioni al secondo. Comunica tramite seriale a 128.000 baud tramite un protocollo applicativo proprietario.

Viene fornita comunque una libreria per il suo utilizzo.

 

Fig. 9 Lidar YDLIDAR X4.

 

Come si può vedere dalla Fig. 10, la scansione anche a distanze metriche fornisce una pianta plausibile dell’ambiente scansionato.

In ogni caso occorre avere a disposizione algoritmi e software che possano utilizzare efficacemente questa quantità di input sensoriali di tipo analogico.

 

Fig. 10 Esempio di scansione con YDLIDAR X4 di una stanza + corridoio + mobili.

1 Commento

  1. Caro direttore, Forse non ho letto con attenzione il suo articolo al punto da non trovare al suo interno alcun riferimento ad Arduino pur presente, invece, nel titolo ed inusualmente tra parentesi. Credo, anzi sono certo, che il suo articolo sarebbe stato comunque interessante dal punto di vista editoriale anche senza Arduino nel titolo, così come sono certo che i prodotti sviluppati da Futura avrebbero maggiore identità e uguale se non maggiore appeal anche senza la desinenza "ino". Storicamente, per necessità e virtù siamo sempre stati un popolo di inventori con un carattere fantasioso che ci ha sempre contraddistinto. Un cordiale saluto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu