Introduzione alla robotica

I Robot

Hai visto come utilizzare Scratch per sviluppare applicazioni e giochi; adesso ne vedrai alcuni utilizzi alternativi.

Attraverso un IDE leggermente diverso, potrai ad esempio gestire il movimento di un robot, oppure utilizzare i sensori a tua disposizione per programmare azioni da effettuare sotto determinate condizioni. Ma cosa è un robot e quali sono le difficoltà nella sua programmazione? Nel linguaggio comune, un robot è una macchina in grado di compiere specifiche azioni in base ai comandi che gli vengono dati e alle funzioni che deve svolgere. L’uomo può interagirvi attraverso una interfaccia, oppure il robot può “ragionare” autonomamente utilizzando processi di intelligenza artificiale. Nella vita di tutti i giorni i robot vengono utilizzati per lo più in applicazioni industriali, per esempio nelle fabbriche automobilistiche o nei magazzini di stoccaggio, ma è possibile utilizzarli anche laddove l’uomo metta in pericolo la propria vita.

industrial robot

Alcuni esempi sono i robot artificieri, oppure robot subacquei che possono raggiungere profondità proibitive per l’uomo. Nel campo sperimentale, invece, i robot si utilizzano negli istituti di ricerca per migliorare la vita dell’uomo e studiare nuove applicazioni da utilizzare nel prossimo futuro. Per progettare e programmare un robot servono anni di studi in varie discipline: meccanica, informatica, elettronica ma anche medicina, filosofia e psicologia. Negli ultimi anni si è lavorato molto per portare piccoli robot anche nella didattica per far avvicinare già da adolescenti i ragazzi alla programmazione. Esistono in commercio diversi kit di robotica, che ti permettono di tralasciare la parte di progettazione meccanica per concentrarti sulla pura programmazione. Uno di questi è venduto dall’azienda Makeblock e si chiama mBot.

Coding vs Robotica

Se ti sei avvicinato alla programmazione attraverso Scratch, seguendo i post troverai alcune nozioni più facili ed altre più complesse. In Scratch utilizzi il coding per controllare oggetti sullo scenario, puoi indicare un valore preciso attraverso i blocchi di movimento per far spostare a delle precise coordinate x e y lo sprite. Lo puoi fare perché lo scenario è stato progettato in modo ben preciso, ovvero con l’origine degli assi al centro dello scenario.

Schermata 2018 09 25 alle 13.58.55

In robotica è raro poter indicare una zona in cui avvenga lo spostamento del robot con le coordinate cartesiane poiché gli assi di riferimento sono spesso differenti. Se posi il robot sul tavolo quale sarà l’asse delle ascisse, delle ordinate e l’origine degli assi? Il movimento funziona in modo differente e in particolare si usa un controllo sulla velocità. Inoltre, rispetto al coding, in robotica dovrai affrontare problemi legati alla costruzione del robot (es. bilanciamento, qualità costruttiva, danneggiamento, attriti, ecc.). Per esempio, il robot potrebbe andare storto durante la marcia, a causa della superficie non propriamente piana, oppure perché i motori presentano ingranaggi differenti. Non stare quindi a preoccuparti se mBot non si muove perfettamente come programmato, poiché ci sono agenti esterni che non puoi controllare. mBot è un robot perfetto per avvicinarsi a questo mondo, ma rimane pur sempre un robot da cento euro. Pensa che nel campo della ricerca, si usano robot da decine di migliaia di euro.

Sensori ed attuatori

Nei robot esistono due tipi di “strumenti”: i sensori e gli attuatori. I sensori sono strumenti elettronici che si occupano di replicare i sensi e forniscono informazioni riguardanti il mondo reale al robot. Esistono una moltitudine di sensori: calore, peso, ultrasuoni, colore, infrarossi, luminosità ecc. Gli attuatori sono invece tutte quelle parti del robot che si occupano di interagire con il mondo reale. Esempi ne sono i motori, le casse acustiche e i monitor. In sostanza, i sensori si occupano di “percepire” elementi esterni mentre gli attuatori si occupano di “reagire” nel mondo esterno.

Funzioni

mBlock offre la possibilità come Scratch di poter creare proprie funzioni da utilizzare all’interno del progetto, senza dover riscrivere il codice. Ma cosa è una funzione? Una funzione è un gruppo di blocchetti che fa qualcosa. Potrai pensare: “Ma allora tutti i blocchetti sono funzioni visto che fanno tutti qualcosa” ed effettivamente è spesso così. Ogni volta che poni un blocchetto sull’editor stai programmando utilizzando funzioni scritte da qualcuno. Normalmente a te non interessa sapere come funziona il blocchetto, per esempio sai che utilizzando il bloccoPercorso3il robot si muoverà in avanti a velocità sostenuta. Non sai cosa perché, non sai cosa c’è “dietro”.

Utilizzi il blocco (funzione) senza vedere come è stato fatto, sapendo solo che selezionando la direzione e velocità farà muovere il robot.

Un altro esempio è il bloccoSchermata 2018 09 24 alle 18.13.58. Utilizzandolo apparirà sopra lo sprite una vignetta ed esso “dirà” per due secondi qualsiasi cosa tu inserisca nel campo testuale. Anche qui, non sai perché. Sai solo che utilizzandolo lo farà. Stai usando una funzione creata da qualcuno che ti permette di far parlare lo sprite. La funzione esiste solo per lo sprite in cui la stai scrivendo. Ora vedrai come scrivere una funzione, ovvero come creare un blocchetto da poter utilizzare per scrivere il codice una volta sola oppure semplicemente per tenere l’editor pulito. Spostati sotto la categoria Dati&Blocchi. Qui potrai creare variabili, liste e blocchi!
Clicca su Crea un blocco

Schermata 2018 09 24 alle 18.25.22

Si aprirà una finestra in cui potrai dare un nome al blocco o specificare la sua funzione. Inoltre, espandendo la voce “Opzioni”, potrai selezionare dei parametri da dare in ingresso alla tua funzione, come abbiamo visto per i blocchi “robot” e “dire”. Per il momento, chiama il tuo blocco Somma e seleziona due volte “Aggiungi un parametro numerico”. Infine, clicca su OK.

Schermata 2018 09 24 alle 18.25.44

Schermata 2018 09 24 alle 18.25.56

A destra, nell’editor di mBlock, apparirà un blocco blu. Questo è il dietro della tua funzione. È come se questo blocco fosse lo scheletro del tuo corpo. A sinistra, invece, apparirà un blocchettoSchermata 2018 09 24 alle 18.36.13. Questo è come se fosse l’esterno del corpo. Concentrati sul blocco a destra, ovvero il “definisci”. La funzione dovrà fare la somma di due numeri qualsiasi e stamparla a video, per esempio con il bloccoSchermata 2018 09 24 alle 18.13.58

Schermata 2018 09 24 alle 18.26.25

Trascina i blocchetti number1 e number2 per utilizzarli come normali variabili. ATTENZIONE! Potrai utilizzarle solo all’interno del blocchetto blu, al di fuori non esistono. Se vuoi esportarle dovrai creare due variabili normali.

Schermata 2018 09 24 alle 18.41.22

Ora che hai terminato di specificare il compito della funzione puoi utilizzare il blocchetto a sinistra quante volte vuoi all’interno del tuo sprite. Per esempio, puoi stampare la somma di due numeri casuali o due numeri inseriti da te.

 

Conosciamo mBot

COME FUNZIONA

mBot è un piccolo robot costituito da due motori DC, un sensore di linea e un sensore a ultrasuoni per il rilevamento di ostacoli. Tutti i sensori e gli attuatori sono controllati da una unità centrale chiamata scheda mCore, derivata dalla famosa scheda hobbistica Arduino. Questa caratteristica rende mBot estremamente versatile in quanto può essere programmato in Arduino (linguaggio C modificato). Nella scatola troverai anche un telecomando, poiché mBot non è solo un robot “pensante”, ma può essere telecomandato. Ogni volta che andrai a posizionare un blocchetto nell’IDE di mBlock manderai comandi alla scheda mCore e non al robot. È importante ricordarselo, perché la scheda presenta alcune porte di entrata ed uscita; dovrai quindi collegare opportunatamente sensori ed attuatori per far funzionare i tuoi programmi. Il collegamento avviene tramite cavetti con terminali plug and play (collega e gioca) di facile installazione.

kit

Aperto l’IDE di mBlock, per poter controllare il robot dovrai spostarti sotto la categoria Robot.

Schermata 2018 09 14 alle 16.51.05

I blocchi che troverai sotto questa sezione sono le istruzioni necessarie per controllare i sensori e gli attuatori di mBot. Dovrai utilizzare sempre questi blocchi, ad esempio per far muovere il robot, controllare i led colorati presenti su mCore, rilevare un ostacolo… Le restanti categorie, sono le standard presenti su Scratch. La categoria Movimento si riferisce allo Sprite e non al robot. Di volta in volta ti verrà spiegato il funzionamento dei blocchi per portare a termine gli esercizi. Puoi utilizzare le Situazioni anche con il robot, quindi muovere il robot alla pressione della barra spaziatrice o effettuare delle operazioni al click del mouse ecc.

Schermata 2018 09 14 alle 17.09.03

Se vuoi caricare il programma direttamente sulla scheda mCore, dovrai iniziare la sequenza di istruzioni OBBLIGATORIAMENTE con il bloccoSchermata 2018 09 14 alle 17.04.53.Per collegare il robot al pc fai riferimento alle istruzioni presenti nella scatola, perché il collegamento varia da modello a modello.


CALIBRAZIONE ROTAZIONE

Se vuoi far compiere a mBot rotazioni di 90 gradi hai bisogno di calibrarlo. Se utilizzi il blocco “gira a destra alla velocità di…” il robot comincerà a girare su se stesso verso destra senza mai fermarsi, rendendo imprevedibili i suoi movimenti. Questo accade perché i motori di mBot sono comandati in velocità e non in posizione: il motore non conosce il significato di grado, ma solo di velocità. Per calibrare una rotazione di 90 gradi dovrai temporizzare l’accensione e lo spegnimento dei motori. Se il tempo che attendi sarà troppo elevato mBot girerà per più di 90 gradi, se troppo breve girerà per meno di 90. Puoi utilizzare questo tutorial anche per calibrare altri gradi di rotazione. Considera che il tempo che dovrai aspettare varia da robot a robot; non è detto che tu debba attendere lo stesso valore riportato in questo esempio (0.7 secondi).

Schermata 2018 09 12 alle 11.36.05

Ricorda inoltre che il tuo computer e mBot “parlano tra di loro” quando comandi mBot da pc e questa chiacchierata richiede tempo. Purtroppo, è un tempo variabile che non puoi controllare. Quindi, quando pensi di aver trovato il valore corretto, carica il programma sulla scheda mCore, come spiegato nella sezione successiva e controlla che funzioni nel modo corretto. Con questa operazione elimini il tempo della “chiacchierata” tra pc e mBot, rendendo l’esecuzione molto più veloce.

UPLOAD CODICE SU SCHEDA MCORE

Come detto precedentemente, mBot parla con il computer quando viene programmato ed è controllato direttamente da pc. Per questo motivo sono generati ritardi di comunicazione che influiscono sul comportamento del robot. Ogni volta che viene detto a mBot di muoversi in avanti per n secondi, il comando viene mandato da pc a mBot; una volta che il movimento inizia, mBot invia un messaggio di avvenuto movimento al computer che manda al robot il comando successivo. Gli scambi di messaggi provocano ritardi; per questo è probabile che il robot ritardi l’esecuzione del comando successivo.Grossi problemi si potrebbero verificare se il ritardo di comunicazione per invio/ricezione è molto grande. Per esempio, consideriamo un ritardo di ricezione. Se mBot dovesse muoversi indietro per un secondo e il ritardo fosse di un secondo si avrebbe questo scenario:

  • 1. Il computer manda a mBot l’istruzione di muoversi indietro;
  • 2. mBot riceve l’istruzione e comincia a muoversi indietro. In contemporanea, invia un messaggio al computer con scritto che si sta muovendo;
  • 3. Il computer riceve il messaggio dopo 1 secondo (intanto mBot sta continuando a muoversi indietro);
  • 4. Il computer manda l’istruzione di attesa di 1 secondo (mBot sta continuando a muoversi);
  • 5. mBot riceve il comando di attesa, attende 1 secondo (mentre si muove) e invia un messaggio che il tempo di attesa è finito;
  • 6. Il computer riceve il messaggio dopo 1 secondo;
  • 7. Il computer manda l’istruzione di arresto motori;
  • 8. mBot riceve l’istruzione e arresta i motori;
  • 9. mBot manda un messaggio al computer che ha arrestato i motori.

Con un ritardo così elevato il robot si sarebbe mosso per molto di più di un secondo, perché avrebbe proceduto in retromarcia per tre secondi: un secondo legato all’istruzione di marcia e due secondi legati al ritardo. Questo è quello che accade dietro alla programmazione. Non devi preoccuparti! Vedrai che, seguendo semplicemente le seguenti istruzioni e a meno di guasti hardware, non si verificheranno tempi di comunicazione così elevati.

Schermata 2018 05 17 alle 13.36.25

Potresti però incorrere in tali problemi se il tempo di marcia fosse di 0.2 secondi. Per eliminare del tutto i ritardi, mBot fornisce la possibilità di caricare il programma sulla sua scheda. In questo modo il robot non comunica più con il computer ma gestisce tutto in maniera autonoma. Prova a caricare il programma precedente sulla scheda di mBot. Collega mBot a pc utilizzando il cavo USB fornito in dotazione, accendi il robot e una volta riconosciuto fai un click sul blocco “Programma mBot”. Dalla finestra che compare di lato click su “Carica su Arduino”. Aspetta fino a quando in basso non compare che il processo è stato terminato. Appena terminato il caricamento mBot comincerà ad eseguire le operazioni che hai programmato.

Attenzione! mBot ora ha appreso il tuo programma. Anche se lo spegni e riaccendi lui continuerà ad eseguire il programma. Per farglielo dimenticare, puoi caricare sulla scheda un altro programma oppure resettarlo al programma di fabbrica.

Per resettarlo accendi e collega mBot via USB al computer, clicca su “collega” e poi su “Resetta il programma di default” selezionando mBot. Attendi la fine del caricamento e il robot sarà stato resettato.

Download

Qui puoi scaricare i file contenenti la soluzione. Ricorda che, se necessario, dovrai cambiare i tempi di attesa tra un’istruzione e l’altra.


A cura di Filippo Lapide.

  • Creato il