Il robot apprende da solo: cenni di A.I.

Oggi vi mostreremo come realizzare un robot Do It Yourself (fai da te) dotato di intelligenza artificiale (A.I.).


Alcuni libri utili

Iniziamo la lezione col dare alcuni riferimenti bibliografici utili:

Artificial Intelligence. 23 Projects to bring your microntroller to life!

In esso sono contenuti esempi di progetti per dare vita al proprio microcontrollore. Non è basato su Arduino, ma fornisce un modello di riferimento per costruire un programma che dia al robot un’apparenza di comportamento intelligente.

All’interno dei progetti mostrati, si trovano modelli di codice per simulare comportamenti apparentemente intelligenti del robot (o del microcontrollore). In particolare, ci siamo soffermati sui capitoli: Roulette Wheel brain, Le reti neurali di Opfield (reinforcement machine learning, apprendimento automatizzato con rinforzo), Architettura a sussunzione (o behaviour robotics, robotica basata sui comportamenti)










Consigliamo, se si lavora con Arduino, di iniziare dal primo libro, se invece si lavora con Raspeberry Pi, meglio iniziare dal secondo.


HBRT

Il nostro è un progetto di robotica DIY (Do It Yourself) e lo abbiamo chiamato HBRT (How To Be a Robot Trainer).

Per una più chiara spiegazione, può essere scomposto nei 3 domini principali della robotica DIY:

  1. Stampa 3D;

  2. Elettronica;

  3. Coding.


HBRT


Stampa 3D

Il robot è stato interamente stampato in 3D. E’ possibile stamparlo anche con una stampante 3D di piccole dimensioni, con piatto di stampa di 12X10 cm.

Abbiamo modellato con Tinkercad tutte le parti meccaniche interne squadrate, mentre le parti curve (frontalino, ruote, dorso) sono state modellate con Rhino. E’ comunque possibile modellare il robot interamente con Tinkercad ottenendo un risultato funzionale, anche se con esteticamente diverso.



Elettronica

Il robot è alimentato con batterie ricaricabili da 2400/2450 mA/h, poiché la carica dura più a lungo e perché per muovere i servomotori serve più potenza.

Esso ha servomotori a 360°. I servomotori in genere ruotano da 0 a 180° e servono per riprodurre il movimento delle articolazioni (umane o animali).


Servomotore

Solitamente i robot con le ruote montano i DC motors (motori in corrente continua, come ad esempio quelli che troviamo in Mbot), ma noi abbiamo scelto di non usarli per motivi tecnici (avremmo dovuto aggiungere nella scheda un componente che gestisce il verso di rotazione dei motori).

DC motors

Abbiamo, invece, scelto di usare i servomotori a 360°, collegabili direttamente alla scheda e regolabili nel verso semplicemente dal codice, per risparmiare un po’ di spazio nell’hardware e nell’elettronica. Lo svantaggio è che sono un po’ più costosi e delicati dei motori in corrente continua e che, non essendo stati acquistati perfettamente tarati in coppia, possono presentare lievi differenze di velocità e impedire lo spostamento in linea retta del robot.

Troviamo poi nel robot una scheda Arduino Nano, inserita in una base, detta shield. Le schede Arduino, infatti, possono essere integrate con schede aggiuntive dette shield, che danno circuiti extra, oppure facilitano la gestione di servomotori o sensori perché sono già predisposte con ingressi a tre poli (polo +, polo -, polo che invia/riceve segnale dalla scheda), per collegare in maniera più semplice i servomotori e i sensori ad infrarossi. Gli shield fanno, quindi, risparmiare spazio e cavi.


Arduino Nano

Il robot ha:

  • il sensore ad ultrasuoni (grove);

  • un pulsantone sul dorso (arcade button);

  • un buzzer che emette un suono;

  • 5 sensori ad infrarossi, che inviano un messaggio on/off quando il campo è libero o quando l’ostacolo è vicino. Sono analogici, quindi il loro range di copertura di distanza può essere regolabile manualmente agendo con un cacciavite a stella su alcune viti. Come tutti gli infrarossi analogici risentono della presenza di elevata luce solare, quindi deve esserne regolata la sensibilità.




Come funziona HBRT

Il robot, realizzato per un progetto europeo, è una sorta di animale domestico che il giocatore deve addestrare ad assumere determinati comportamenti in relazione a specifiche situazioni.

Il robot è dotato di 3 comportamenti di base:

  1. Comportamento di caccia (hunter): appena il robot rileva qualcosa con i sensori a ultrasuoni o con gli infrarossi, si orienta in quella direzione e segue quella preda;

  2. Comportamento di fuga (prey): il robot fugge dallo stimolo rilevato;

  3. Comportamento di disinteresse (spacelove): il robot si muove dove trova uno spazio aperto in cui i sensori non rilevano ostacoli ed evita quello che si frappone tra lui e la sua passeggiata.

Il giocatore assiste e osserva con attenzione il comportamento del robot.

Il robot, avvisando con un suono, decide autonomamente di cambiare comportamento ogni 5 secondi.

Il giocatore può dare un rinforzo al comportamento che gradisce, premendo il pulsante sul dorso. Tale rinforzo, piano piano, aumenterà la probabilità che quel comportamento si ripresenti.

All’inizio, quando il robot viene acceso, la probabilità che si manifestino i tre comportamenti è la stessa, in base ad un meccanismo casuale; rinforzandone uno, con la ricompensa del pulsante premuto, il robot lo farà prevalere, grazie al meccanismo dell’apprendimento con rinforzo.

Abbiamo, inoltre, inserito un meccanismo di oblio: se non vogliamo più rinforzare un certo comportamento, possiamo rinforzare gli altri due comportamenti oppure possiamo ignorare il robot, attivando, così, il meccanismo di oblio con il quale a poco a poco la percentuale più alta (quella del comportamento precedentemente rinforzato) inizia a decadere.





Modello di programma

Il modello seguente è ripreso dall’ultimo capitolo del libro Artificial Intelligence. 23 Projects to bring your microntroller to life!: Architettura a sussunzione (architettura che si usa nella robotica basata sui comportamenti).


Schema tratto dal libro: Artificial Intelligence. 23 Projects to bring your microntroller to life!

Questo modello non fa riferimento al nostro robot, ma un robot simile con altri sensori.

Si creano vari moduli (o stati) che chiamiamo behaviour che possono essere arrangiati con vari livelli gerarchici (dal basso verso l’alto).

Sulla sinistra del modello abbiamo i sensori:

  • a ultrasuoni;

  • whiskersensor (a baffo: essi “sentono” fisicamente l’ostacolo e quando il baffo tocca una superficie si attiva il segnale);

  • a infrarossi.

Sulla destra ci sono gli attuatori, ovvero i motori.

Nel mezzo ci sono i comportamenti: caccia, spazi aperti, camminata casuale, rilevamento di un ostacolo, ecc… Tali comportamenti hanno un ordine gerarchico che va dal basso verso l’alto: ad esempio il robot si muove con camminata casuale (livello di competenza 1), quando scatta il comportamento di caccia, che è gerarchicamente superiore (livello di competenza 2), esso sopprime (c’è, infatti la “S”) il comportamento di camminata casuale.

Allo stesso modo, c’è un processo di inibizione sui sensori: quando scatta il comportamento di caccia, c‘è un’inibizione degli stimoli rilevati dai sensori infrarossi e il robot si affida solo ai sensori a baffo per evitare grosse collisioni.

Il modello basato sui livelli gerarchici permette, quindi, di arrangiare i comportamenti, che si possono vicendevolmente condizionare (uno può sopprimere l’altro, due comportamenti allo stesso livello gerarchico possono bilanciarsi, ecc…).

Abbiamo, poi usato il modello Roulette Wheel brain. Questo modello è una distribuzione delle probabilità dinamica, cioè la probabilità può variare durante l’interazione con il robot.

Nel nostro caso, per ottenere la variazione delle probabilità dei comportamenti, a partire dai due modelli visti precedentemente, si aggiungono il meccanismo di rinforzo (reinforcement learning) e il meccanismo dell’oblio.

Unendo, quindi, il modello dell’architettura a sussunzione e il modello Roulette Wheel brain ai meccanismi di reinforcement learning e di oblio, abbiamo potuto passare alla scrittura del codice.

Pur avendo inserito nel nostro codice dei punti d’ingresso per i segnali di soppressione e inibizione, non ne abbiamo fatto uso, perché di fatto i tre comportamenti di spacelover, hunter e prey non hanno un livello gerarchico, ma hanno inizialmente la stessa probabilità di comparire; ciò che determina il prevalere di uno sull’altro è il meccanismo di rinforzo attivato dall’utente mediante il pulsante.


Nel prossimo post analizzeremo il codice che sta dietro al comportamento di HBRT.


Per approfondire questo argomento, guarda la video lezione Il robot apprende sa solo: cenni di A.I. (Corso Robotica per la scuola secondaria). Vuoi certificare la tua formazione? Visita il nostro shop!



Vuoi portare la formazione PaLEoS nella tua scuola? 

Puoi avere tutti i nostri corsi, per tutti i docenti del tuo Istituto

© 2020 PaLEoS Srl
Via Sant'Angelo 25 - 50142 Firenze (FI)
Tel. 329-5983082 - info@paleos.it paleos.srl@pec.it
P.iva 06843880482 - Capitale Sociale € 39.000
Nr. iscrizione Registro Imprese Firenze: 660459

 Privacy | Dove siamo