Nuova sezione libri disponibile!

Collegare un Arduino in parallelo al raspberry

Pietro Chiro

lettura in 3 minuti

In questo tutorial vedremo come collegare un Arduino UNO al nostro Raspberry con ROS. In questo modo potremmo sfruttare l'alto livello del codice di programmazione di ROS in parallelo alla versatilità nel controllo di sensori/motori/periferiche di Arduino.

# Nota Bene

Per far funzionare questo tutorial, prima di tutto è necessario accedere al terminale, utilizzando questa guida, ed eseguire il seguente comando (basta fare copia incolla). Una volta fatto questo, riavviare il robot!

curl https://gist.githubusercontent.com/ludusrusso/a3533daae7a03c07ce55b90019f2a0ba/raw/c20b544de544f0c13577c31a3bc0322718c884d8/arduino_patch_hbrain | bash

Includiamo le librerie di ROS su Arduino

Utilizzando il pacchetto rosserial_arduino si "trasforma" Arduino in un nodo ROS a tutti gli effetti, che può pubblicare o sottoscriversi a topic ROS. La comunicazione con ROS è resa possibile dalla libreria ros_lib, quindi basta implementarla nella cartella delle librerie di Arduino in questo modo:

  • scaricate da qui (premendo su clone or download) le librerie presenti

  • aprite l'Arduino IDE e andate su sketch/include library/manage libraries, cercate Rosserial Arduino Library e cliccate su install

A questo punto Arduino è in grado di comunicare con ROS pubblicando o sottoscrivendosi ai topic. E' però necessario predisporre anche il Raspberry per poter comunicare con l'Arduino: collegate la vostra scheda al portale hotblack e digitate nella bara di ricerca di Google l'indirizzo IP assegnatovi dal sito (nel mio caso 192.168.0.112)

Si aprirà in questo modo una pagina chiamata supervisor status. Cercate la voce ros_serial e cliccate su Start

In questo modo sarà sufficiente collegare l'Arduino al Raspberry attraverso una qualunque delle sue porte USB e le due schede saranno pronte a lavorare in parallelo!

Scrittura di un semplice publisher per Arduino

Procediamo ora a scrivere il codice di un semplice pulisher per pubblicare una stringa testuale sulla console ROS. Apriamo quindi l'Arduino IDE e iniziamo un nuovo progetto. Andiamo ad includere immediatamente le librerie che utilizzeremo e la stringa ros::NodeHandle nh; che permetterà al nostro programma di creare publisher e subscriber:

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle nh;

Ora dobbiamo definire il nostro publisher/subscriber. In questo caso lavoriamo su un publisher chiamato chatter che pubblicherà un messaggio di tipo &str_msg

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

Nel setup inizializziamo il nostro nodo ROS e definiamo i topic a cui vogliamo sottoscriverci utilizzando la stringa nh.subscribe(nomedeltopic) e quelli che vogliamo pubblicare, come nel nostro caso, con la stringa nh.advertise(nomedeltopic)

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

Come ultimo passo nella funzione loop il nodo pubblica la stringa "Hello World" e si chiama la funzione ros::spinOnce() con la quale si gestiscono tutte le callback

void loop()
  {
    str_msg.data = hello;
    chatter.publish( &str_msg );
    nh.spinOnce();
    delay(1000);
  }

Codice completo

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle  nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

Per avere altre informazioni e tutorial più approfonditi potete visitare la pagina dedicata a rosserial_arduino del sito Ros.org

Ti è piaciuto questo post?

Registrati alla newsletter per rimanere sempre aggiornato!

Ci tengo alla tua privacy. Leggi di più sulla mia Privacy Policy.

Ti potrebbe anche interessare

Installiamo ROS su Raspberry Pi
Un breve tutorial su come utilizzare ROS sul Raspberry Pi
Controllare siBOT dalla piattaforma HBR
Come controllare il manipolatore siBOT utilizzando la piattaforma HBR
Un laboratorio di Fisica con Arduino e Python
Primi esperimenti con Arduino e Python per realizzare un semplice laboratorio di fisica sfruttando la potenza di Python e la versatilità di Arduino
Un IDE web Arduino sviluppato in Python e Flask
Un mio progetto dell'estate del 2015 che permette di programmare Arduino da un'interfaccia Web esposta da un Raspberry Pi
Utilizziamo Atom come editor di testo remoto su Raspberry Pi
Come usare Atom come editor di testo remoto per Raspberry Pi
Python + Arduino = Nanpy
Programmare Arduino in Python con Nanpy
Utilizzo di Nanpy con il sensore di temperatura/umidità della famiglia DHT
Come utilizzare Nanpy col sensore DHT di temperatura e Umidità
Pasqua al Liceo Stampacchia di Tricase: Corsi di Arduino e Stampa 3D
In occasione delle vacanze di Pasqua 2017, il Liceo G. Stampacchia organizza due corsi tenuti da me su Arduino e stampa 3D.
Accendere led con Arduino e Telegram
Un bot telegram in grado di controllare Arduino realizzato da 3 ragazzi del Liceo Stampacchia
Sviluppiamo un'app in Electron per controllare la scheda Arduino - parte 2
In questo tutorial, vediamo come sviluppare un oscilloscopio con Node.js, Electron e Typescript
Sviluppiamo un Robot con tecnologie Open Source
Inizio una serie di videoguide, in cui voglio introdurvi al mondo della robotica di servizio in modo pratico, facendo vedere come è possibilile, sfruttando tecnologie completamente Open Source, quali Arduino, Raspberry Pi, ROS e Docker, costruire un piccolo robot di Servizio.
Buildare e usare container Docker per Raspberry Pi
In questa guida vediamo come buildare ed utilizzare Docker su Raspberry Pi (ed in generale sistemi Linux Embedded) per velocizzare la produzione di applicazioni Linux Embedded
Robot Open Source - Docker e Raspberry
È disponibile il video "Docker e Raspberry".
Setup Wifi super semplice per Raspbian Lite
Vi propongo un trucchetto per gestire in modo semplicissimo il WiFi su Raspbian (Lite).
Abilitare l'accesso SSH del raspberry pi senza usare un monitor
Un piccolo trucco per gestire al meglio lo sviluppo su Raspberry Pi, specialmente se non si ha a disposizione un monitor.
Un bot telegram che invia messaggi al verificarsi di eventi sui GPIO del Raspberry Pi
Mandare un messaggio tramite telegram quando il un GPIO del Raspberry cambia stato è possibile, ecco come!
Passive income con Raspberry Pi e earnapp
Come guadagnare un po' di soldi senza muovere un dito usando un raspberry pi e una connessione ad internet