Intelligenza Artificiale con Arduino

L'attività di apprendimento automatico all'interno del campo della robotica è la tematica che maggiormente stimola la ricerca al fine di ottenere “circuiti” in grado di replicare il comportamento umano. Le difficoltà sono innumerevoli, tra cui sicuramente la potenza di calcolo richiesta che deve essere notevole al fine di poter gestire contemporaneamente sia l’acquisizione da diversi sensori che l’elaborazione delle informazioni, con la produzione di un risultato finale (output) elaborato in autonomia dall’Intelligenza Artificiale. In questo articolo affronteremo la tematica calata all'interno dell'ecosistema Arduino, valutando i progressi degli ultimi anni ed i limiti di questa tecnologia a basso costo.

Introduzione

Tutti ormai ci siamo cimentati almeno una volta nel realizzare uno sketch o un progetto più complesso hardware/firmware con il mondo Arduino. Nonostante negli ultimi anni siano state rilasciate versioni più performanti con processori Arm, le schede Arduino sono conosciute per le loro limitate potenze di calcolo. Questo forte limite in realtà consente di avere a disposizione delle schede di sviluppo dal costo contenuto ed accessibile a chiunque voglia cimentarsi nel mondo dei Makers, ma di conseguenza limita le possibili applicazioni. Di fatto, la maggior parte dei progetti sono relativi ad applicazioni di IoT o capaci di automatizzare funzioni molto semplici quali acquisizione dati, visualizzazione informazioni su display e trasferimento attraverso interfacce di comunicazione wired o wireless.

Il Machine Learning

Nel mondo della robotica e dei processi industriali, da anni si parla del concetto di Intelligenza Artificiale, ossia l’evoluzione dell’elettronica che diviene abile nell'elaborazione di informazioni a prescindere da modelli o equazioni specifiche, come farebbe l’essere umano durante l'apprendimento sul campo. Dunque nell’ambiente dell’Intelligenza Artificiale viene prestata attenzione in modo particolare ad un sottoinsieme applicativo dell’AI che comprende le tecniche e gli algoritmi di Machine Learning. Le metodologie di Machine Learning, ossia di apprendimento automatico, sono basate in linea di principio su metodi computazionali di estrazione delle informazioni a partire dai dati acquisiti. Elemento fondamentale dell’apprendimento diviene l’esperienza nel produrre risultati validi. La definizione contemporanea di Machine Learning (apprendimento delle macchine) è stata fornita da Tom M. Mitchell:

Machine Learning is the study of computer algorithms that allow computer programs to automatically improve through experience.

L’apprendimento automatico prevede diverse tipologie di tecniche e/o algoritmi, classificabili nelle seguenti macro-categorie:

  • tecniche di apprendimento supervisionato: vengono forniti degli esempi di connessione tra input e output in modo da formare la macchina a prevedere nuovi output in futuro. In particolare, la macchina sarà in grado di definire una relazione tra ingressi e uscite fornite e imparerà ad utilizzarla in seguito per casi simili agli ingressi ottenuti;
  • tecniche di apprendimento non-supervisionato: la macchina deve individuare modelli nascosti all’interno dei dati di input già strutturati. L’assenza di output associati agli ingressi consente di trovare modelli nascosti a partire dal set dei dati di ingresso;
  • tecniche di Deep Learning: il Deep Learning è definito come un sottoinsieme di tecniche di Machine Learning (come rappresentato in Figura 1) basato su reti neurali stratificate in grado di processare elevate quantità di dati.

Figura 1: Dall'Intelligenza Artificiale fino al Deep Learning

In realtà, a partire da queste 3 macro-categorie esistono molte sotto-categorie che, sfruttando le peculiarità delle varie tecniche di apprendimento, realizzano ulteriori algoritmi e tecniche che di fatto trovano la vera applicazione nei sistemi dotati di Machine Learning. Tra le tecniche più conosciute ed adoperate troviamo gli alberi decisionali, il clustering per la classificazione degli oggetti nei metodi non supervisionati, algoritmi basati su calcoli probabilistici, stratificazione dell’elaborazione (con l’utilizzo di reti neurali) e tanto altro.

TinyML e TensorFlow applicati ad Arduino

Il progetto TinyML nasce con l’esigenza di sviluppare tecniche di apprendimento semplici da applicare a sistemi a basso consumo con l’obiettivo di supportare lo sviluppo di una varietà di oggetti adatti o adattabili a molteplici casi d'uso, garantendo una semplicità di utilizzo e una larga diffusione del concetto di Machine Learning. In questa evoluzione, e grazie al trend Makers in atto da diversi anni, il team di Tiny si è prefissato di realizzare anche una versione compatibile con i microcontrollori meno prestanti come quelli adoperati sulle board Arduino, e dunque oggetti che dispongono di una potenza di calcolo ancora più limitata. L’idea di base è poter avere a disposizione oggetti economici e piccoli in grado di poter eseguire operazioni di Machine Learning in maniera localizzata. Ovviamente, la strada del successo è lunga in quanto gli algoritmi di apprendimento automatico applicabili su piattaforme ad elevata potenza computazionale necessitano di un ridimensionamento e dell’introduzione di nuove tecniche adeguate alle limitate risorse quali potenza e memoria a disposizione. Una delle principali modifiche apportate dal team alla versione Lite è quella dell’abolizione dei numeri in virgola mobile attraverso l’utilizzo di interi a 8 bit.

E’ disponibile anche il progetto TensorFlow Lite che consente l’estensione delle funzionalità di Machine Learning e reti neurali a sistemi basati su microcontrollori. La differenza sostanziale tra le due librerie è che TensorFlow è basata su reti neurali che richiedono comunque una maggiore complessità di calcolo. Il Machine Learning non è necessariamente reti neurali, e la libreria TinyML fornisce una valida alternativa di tecniche di apprendimento applicabili anche a microcontrollori a 8 bit e con una quantità di RAM esigua.

A partire da questi due progetti di Machine Learning e le relative librerie, sono stati sviluppati all’interno della Community Arduino diversi esempi applicativi sfruttando le capacità di una delle schede Arduino di ultima generazione, ossia la scheda Arduino Nano 33 BLE Sense. Questa tipologia di scheda (dotata di un processore ARM Cortex-M4) è stata scelta per la presenza anche di diversi sensori interessanti (IMU, microfono, modulo BLE, sensori ambientali) su una superficie dell’oggetto veramente ridotta. Gli esempi prodotti dalla combinazione delle librerie di Machine Learning e questa fantastica scheda sono:

  • Riconoscimento vocale grazie all’utilizzo di un microfono integrato sulla scheda
  • Riconoscimento gestuale adoperando i dati acquisiti dal modulo inerziale IMU

Machine Vision applicata ad Arduino

La Machine Vision, detta anche visione artificiale, è un aspetto molto importante nel settore industriale in quanto è possibile realizzare sistemi automatici per monitorare i processi industriali ed ottenere maggiori livelli di qualità ed efficienza nella produzione. Le tecniche e le tecnologie utili alla realizzazione di sistemi di Machine Vision sono innumerevoli e presentano molte peculiarità che dipendono dall’obiettivo prestazionale finale. Inoltre, la combinazione di queste informazioni con la possibilità di controllare dei sistemi di attuazione (o veri e propri robot industriali) consente di realizzare sistemi complessi molto avanzati. L’introduzione delle tecniche di Machine Learning combinate a dati forniti dall’acquisizione di immagini video, fornisce una combinazione per ottenere sistemi dotati di Intelligenza Artificiale evoluta, che trovano larga applicazione non solo nel settore industriale ma anche in quello della sicurezza nazionale in luoghi sensibili (stadi durante eventi importanti, aeroporti, luoghi di culto, etc.). Come introdotto precedentemente, le forti limitazioni prestazionali di Arduino non consentono la realizzazione di veri e propri progetti di Machine Vision, ma esiste comunque una soluzione valida per dotare la nostra fidata scheda del dono della vista (Figura 2).

Figura 2: Modulo OV7670 accoppiato a ELEGOO UNO R3

L’oggetto che voglio mostrarvi è il modulo OV7670 (vedi Figura 3) distribuito da AZ delivery. Questo è un modulo di espansione a 18 pin dotato di sensore di immagine (appunto il sensore OV7670 prodotto dalla OmniVision Technologies Inc.) che consente di acquisire immagini con le seguenti risoluzioni: VGA (640x480) (valore di default), QVGA (320x240), CIF (352x240) e QCIF (176x144).

Figura 3: Modulo camera OV7670

L’interfacciamento con Arduino avviene attraverso un bus dati parallelo a 8 linee e secondo uno standard configurabile quale: YCbCr422 (protocollo di default), RGB565, RGB555 e RGB444. Le ulteriori caratteristiche del modulo sono le seguenti:

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2043 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

3 Commenti

  1. Giordana Francesca Brescia 9 Febbraio 2022

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend