Educazione alla robotica con Totem RoboBoard X4: sviluppo e programmazione di applicazioni innovative

Impariamo a sviluppare applicazioni e a programmare con la RoboBoard X4 di Totem, la piattaforma per la robotica educativa dell’ecosistema Totem.

Molti progetti di robotica sono accomunati da determinati requisiti: essere in grado di controllare i motori e servocomandi, disporre di interfacce di controllo e programmazione e poter funzionare autonomamente alimentati da batterie. Tutto ciò richiede un hardware adeguato ed un controllore programmabile versatile, come può essere quello di Totem che offre una soluzione all-in-one con driver e connessione wi-fi e Bluetooth, chiamata RoboBoard.

Fig. 1 La scheda Totem RoboBoard

Qui descriveremo le proprietà e il principio di funzionamento, quindi passeremo alla pratica proponendo alcuni progetti di esempio, che coprono diversi casi d’uso. Totem RoboBoard (la vedete dettagliata nella Fig. 1) implementa le funzionalità di base che vengono utilizzate più spesso nei progetti di robotica ed elettronica, che nello specifico sono:

  • un alimentatore a doppio ingresso; l’adattatore di alimentazione può essere utilizzato come fonte di alimentazione primaria, così come una batteria opzionale può essere utilizzata come fonte di alimentazione di backup o principale;
  • driver per motori CC, in numero di quattro canali da 1A con protezioni integrate; i driver possono essere collegati a ponte per il controllo di motori che assorbono fino a 2A;
    collegamenti servomotore (3 canali che possono fornire fino a 1A ciascuno);
  • 4 connessioni ingresso/uscita per uso generico;
  • LED RGB controllabile dall’utente;
  • ampia connettività, comprendente Bluetooth, interfacce WiFi e una coppia di connettori TotemBUS per estensioni.
  • Tutta la connettività I/O è protetta contro sovraccarico o collegamenti errati per evitare danni alla scheda. Inoltre, utilizzando l’interfaccia servo standard, è possibile gestire controller RC e driver motore di terze parti senza alcuna difficoltà.

Espansioni

Alla scheda Totem RoboBoard, che è il cervello di ogni applicazione, possono essere associati moduli di espansione, ognuno dei quali svolge una funzione periferica specifica per la robotica (Fig. 2).

Collegando moduli aggiuntivi tramite il canale TotemBUS integrato si estendono le capacità del sistema.

Fig. 2 Schede di espansione Totem

 

I moduli attualmente disponibili includono sensori di distanza, riflettività, dispositivi di input come potenziometri, pulsanti e moduli di interfaccia come audio e display.

Ogni modulo può essere immediatamente utilizzato dopo essere stato collegato; nessuna configurazione o programmazione è necessaria per utilizzare i moduli d’interfaccia.

L’interfacciamento con i moduli di espansione avviene tramite un bus proprietario chiamato TotemBus

TotemBUS

I moduli collegati alla RoboBoard formano una rete a margherita, poiché ogni modulo ha almeno due connettori TotemBUS che consentono ulteriori estensioni. L’alimentazione viene trasmessa sullo stesso cavo a 6 poli, richiedendo un solo filo indipendente dal numero di moduli collegati.

TotemBUS utilizza l’interfaccia CANBUS per una trasmissione dati veloce, affidabile e a lunga distanza. Inoltre nella comunicazione viene utilizzato il sistema di messaggistica in stile MQTT, per lo scambio di messaggi tra i moduli. Ogni modulo può trasmettere dati (“pubblicare” un messaggio) in qualsiasi momento e chiunque sia interessato a riceverne dei contenuti può richiedere l’inoltro di tali messaggi.

Ciò rende il sistema veloce, in quanto non è necessario eseguire il polling di nuovi dati, poiché vengono trasmessi immediatamente.

Controllo di robot

Il sistema Totem RoboBoard supporta due modalità di controllo: la prima attraverso una specifica app per smartphone e la seconda tramite programmazione in ambiente Arduino.
Entrambi i metodi possono essere utilizzati allo stesso tempo e si complementano a vicenda.

Applicazione per smartphone

L’app fornisce il punto di partenza più semplice per interagire con RoboBoard e agisce come un telecomando personalizzabile per esso.

Permette di seguire le istruzioni fornite, oppure creare le proprie interfacce di controllo trascinando e rilasciando vari widget, come pulsanti, joystick e slider.

Quindi è alla portata di tutti perché per utilizzarla non è richiesta alcuna codifica o conoscenza avanzata; l’app (la cui schermata è proposta nella Fig. 3) consente di creare qualcosa di unico e personale.

L’app è disponibile per dispositivi sia Android che iOS e può essere scaricata cercando “TotemMaker” nei rispettivi app store.

Fig. 3 Applicazione totem per smartphone

Programmazione Arduino

Per i casi più avanzati, in cui è necessaria la programmazione, RoboBoard può funzionare anche come dispositivo compatibile con Arduino.

Per questo viene fornita una libreria speciale che consente agli utenti di utilizzare le funzionalità integrate nella scheda stessa o di comunicare con i moduli di estensione.

La libreria fornisce non solo i driver Totem da installare nell’IDE, ma anche numerosi esempi funzionali, che possono essere utilizzati come trampolino di lancio.

La “Libreria Totem” può essere installata come qualsiasi altra libreria dal gestore delle librerie di Arduino (Strumenti -> Gestore della libreria -> cerca “Libreria Totem”).

RoboBoard utilizza il processore ESP32 utilizzato anche in numerose altre schede basate su Arduino, semplificando l’inclusione e il codice da altri progetti su RoboBoard.

Un dettaglio importante è che le periferiche time-critical (ossia quelle di cui occorre la certezza temporale del controllo) come i servomotori e i motori CC, sono controllate da un processore dedicato, il che rende libero l’ESP32 di eseguire del codice utente.

Esempi applicativi

Ora che conosciamo meglio la RoboBoard, proviamo a spiegarvi come realizzare alcuni progetti dimostrativi delle potenzialità del nostro hardware; nello specifico andremo a proporre e spiegare tre diverse tipologie di progetti.

Robot che segue la linea

In questo progetto utilizziamo Totem TRUCK kit, una piattaforma su ruote (un telaio di camion) che lavora insieme al sensore di riflettività montato in basso sul paraurti anteriore.

Quando il sensore, montato diretto verso il suolo, si sposta insieme al robot, cambia la luce riflessa in base al colore, quindi è possibile rilevare una linea e capire se la si sta seguendo o meno.

Se programmiamo la RoboBoard affinché faccia sterzare il mezzo in modo che il punto a maggiore contrasto rimanga sempre nel centro, l’automezzo seguirà un percorso precostituito lungo una rotaia realizzata con un nastro di colore contrastante posato a terra. Poiché il sensore rileva il contrasto, più scuro è il materiale della striscia rispetto al suolo, meglio il robot potrà funzionare.

Per impostazione predefinita, la RoboBoard governa inizialmente solo la direzione di marcia del camion e la velocità avanti/indietro è controllata dall’app; ciò consente di mettere a punto l’algoritmo di guida e scoprire la velocità massima, il raggio di curva massimo rilevato e altri parametri.

Per la modalità di guida autonoma completa, la velocità massima dell’auto è limitata dal software ed oltre all’errore vengono gestite condizioni, come i casi in cui non viene rilevata alcuna linea; in tal caso, se il camion perde la linea torna indietro fino a quando non viene ristabilito il rilevamento della traccia. Il codice completo per il progetto può essere trovato sul web alla pagina github.

Movimento evitando le collisioni

Il progetto del robot che segue la linea può essere ampliato utilizzando un modulo di rilevamento della distanza aggiuntivo; in questo modo, il camion sarà in grado di guidare in una stanza ed evitare collisioni con pareti e altri oggetti.

Il progetto finito funziona in modo simile a un robot aspirapolvere, che rileva anche l’ambiente circostante allo scopo di muoversi nelle stanze scansando gli ostacoli.

Il modulo sensore di distanza di Totem si basa sulla misurazione del tempo di volo di un impulso laser a bassa potenza; ciò offre vantaggi rispetto ai consueti sensori a ultrasuoni, in quanto consente non solo una maggiore precisione e misurazioni di frequenza, ma anche di utilizzare diversi di questi sensori per ottenere una stima non solo della distanza dall’ostacolo, ma anche della sua forma e della direzione verso cui si trova.

In questo modo il robot sarebbe in grado di prendere una decisione migliore su come circumnavigare l’ostacolo.

In questo esempio, un singolo sensore è sufficiente per ottenere una capacità di guida autonoma. In linea di principio il metodo di funzionamento è descritto nella porzione di codice riportata qui di seguito:

void onDistanceMeasured(distance) {
    //no close obstacles ahead 
    if (distance & gt; threshold) {
        driveForward();
        //we see an obstacle ahead, turn 
    } else if (distance & gt; 0) {
        driveLeft();
        //if we drove into an obstacle,
        run backwards
    } else {
        driveBackwards();
    }
}

Questo esempio di pseudo-codice illustra tre differenti operazioni che il robot farà in funzione delle informazioni ricevute dal sistema di misura della distanza: se la manovra non riesce a superare l’ostacolo (ad esempio un muro), e si avvicina troppo ad esso, il mezzo tornerà indietro e continuerà a girare fino a quando non avrà successo, imitando le svolte a “n” punti della vita reale.
Il codice completo può essere trovato alla pagina Github di Totem su https://github.com/totemmaker/RoboBoard.

Stazione meteo IoT

Nell’ultimo progetto di esempio, proveremo a comunicare con RoboBoard attraverso Internet; allo scopo useremo la piattaforma IO di Adafruit, anche se qualsiasi altra piattaforma del genere può andare bene. Lo schema di cablaggio corrispondente è proposto nella Fig. 6.

Fig. 6 Schema di collegamento per stazione meteo IoT

 

Una volta assemblato il tutto, ci collegheremo e leggeremo i dati dai sensori.

Registrando il nostro account sulla piattaforma Adafruit IO, otterremo una chiave API, che sarà utilizzata da RoboBoard per caricarvi nuovi dati; dovremo inserirla insieme alle credenziali WiFi nel file config.h.

Il codice completo del progetto è disponibile sulla pagina del repository GitHub Totem su https://github.com/totemmaker/RoboBoard, ma l’importante sono le parti mostrate qui di seguito, la prima delle quali serve per leggere i dati dal modulo sensore:

TotemModule sensor(22);
//Setup module object
//callback on module data receive
void onModuleData(ModuleData data) {
    TODO
}
void setup() {
        sensor.attachOnData(onModuleData);…

Quella che segue, invece, è il loop dello sketch:

void loop() {
        io.run() //call Adafruit IO runner
        if (millis() & gt;
            (lastUpdate + IO_FREQUENCY_MS)) {
            float temp = read(“temperature”);
            temp /= 100;
            temperature - & gt;
            save(temp);
            humidity - & gt;
            save(read(“humidity”));
            luminosity - & gt;
            save(read(“light / lumen”));

 

La definizione IO_FREQUENCY_MS stabilisce quanto frequentemente inviamo nuovi valori alla piattaforma Internet.

Dopo aver caricato lo schetch sulla scheda, siamo in grado di ispezionare i nuovi valori caricati sull’interfaccia web su io.adafruit.com (Fig. 7).

Fig. 7 Dati raccolti dal modulo sensore sul dashboard IO

 

Come possiamo vedere, il lavoro richiesto per implementare nella RoboBoard la connettività IoT di base è davvero poco.

Anche se questo progetto mostra solo come caricare dati dei sensori locali su Internet, può essere modificato per utilizzarlo in una direzione diversa, permettendo di gestire la RoboBoard tramite comandi inviati da remoto attraverso il web.

Questo apre a ulteriori applicazioni.

Conclusioni

Come abbiamo visto dagli esempi qui proposti, RoboBoard può essere utilizzata in numerose applicazioni che vanno dall’utilizzo in semplici modelli RC fino all’implementazione di dispositivi avanzati connessi all’IoT.

Inoltre, le funzionalità del sistema possono essere sempre ampliate collegando nuovi moduli via TotemBUS, coprendo una gran quantità di applicazioni nell’ambito della robotica, dell’automazione e dell’Internet of Things.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu