Utilizando Arduino com ROS (Robot Operating System)

rosserial_arduino

Nesse artigo, vamos mostrar como utilizar o ROS para se comunicar com o Arduino através do pacote rosserial_arduino.

Nos artigos da série introdutória sobre o ROS, expliquei como instalar e criar um “Hello World” para um PC rodando o sistema operacional Linux. Entretanto, muitos devem ter se perguntado se era possível se comunicar com motores e sensores conectados à uma placa Arduino através do ROS. Tal comunicação não apenas é possível, como também é bem simples de ser implementada.

Introdução ao pacote ROSSERIAL

O pacote ROSSERIAL é um conjunto de wrappers para facilitar a vida de quem precisa de comunicação com dispositivos através de uma porta serial ou mesmo através de um socket em rede.

O pacote contém quatro bibliotecas que possibilitam tal comunicação básica com o ROS, sendo possível publicar e se subscrever em tópicos e serviços:

  • ROSSERIAL_ARDUINO: Possibilita a comunicação com placas Arduino, como o UNO e Leonardo;
  • ROSSERIAL_EMBEDDEDLINUX: Possibilita a comunicação com placas que utilizem linux embarcados, como roteadores;
  • ROSSERIAL_WINDOWS: Possibilita a comunicação com aplicações Windows através de sockets;
  • ROSSERIAL_MBED: Possibilita a comunicação com plataformas mbed;
  • ROSSERIAL_TIVAC: Possibilita a comunicação com placas Launchpad da Texas Instruments, tais como as placas TM4C123GXL e TM4C1294XL.

Utilizando o ROSSERIAL_ARDUINO

Em nosso caso, estamos interessados em trabalhar com a biblioteca rosserial_arduino. Em primeiro lugar, precisamos realizar a instalação do pacote em nosso sistema com o seguinte comando:

Nota: se sua distribuição ROS não é a Indigo, você precisa substituir, no comando acima, a palavra “indigo” pelo o nome da sua distribuição, tal como jade ou kinetic.

Com a biblioteca instalada em nosso sistema, podemos utilizar o script make_libraries.py para gerar uma lista de bibliotecas do ROS compatíveis com o Arduino IDE:

Após executar o comando acima, você verá que foi criada a pasta ros_lib no local em que comando foi executado. Agora, basta copiá-la para aonde estiver localizada a pasta sketchbook/libraries configurada para seu Arduino IDE. No meu caso, copiei a pasta para /home/francisco/Arduino/libraries.

Nota: Com a pasta ros_lib você poderá desenvolver aplicações para Arduino capazes de se comunicar com o ROS independente do sistema operacional que você utiliza (ros_lib funciona com o Arduino IDE em Windows, Linux ou macOS). Entretanto, para gerar a pasta, você precisa executar o comando acima em um sistema que esteja rodando Linux e tenha o ROS instalado.

Exemplo de Publisher no ROSSERIAL_ARDUINO

Agora que você colocou a pasta ros_lib em nosso Arduino sketchbook, alguns exemplos de códigos utilizando ROS estarão disponíveis no seu Arduino IDE. Vamos examinar o código para publicar a string “hello world!” pela própria placa Arduino.

Abra seu Arduino IDE e vá em “File -> Examples -> ros_lib -> HelloWorld para abrir o código de example. Você verá o seguinte código aberto:

Agora, vamos explicar linha por linha o código acima:

Para criar ROS nodes para Arduino, você precisa sempre incluir o arquivo ros.h em seus programas. O arquivo std_msgs/String.h inclui todas os métodos necessários para se enviar e receber mensagens do tipo string.

Cria o objeto que será seu NodeHandle no programa em que você está escrevendo. Você sempre precisará de um NodeHandle para receber e enviar mensagens pelo ROS.

Cria uma variável do tipo std_msgs/String que irá receber os valores que vamos enviar pelo ROS.

Cria um objeto chamado chatter que irá ser responsável por publicar sua mensagem. Nesse caso, queremos publicar a mensagem contida na variável str_msg no tópico /chatter.

Essa será a mensagem que iremos publicar através do Arduino.

A função setup() é necessária para inicializar nosso nó e configurar nossos publishers e subscribers no ROS. O método initNode() inicializa nosso ROS node e o método advertise(chatter) configura nosso publisher.

A função loop() será responsável por receber e enviar mensagens dos publishers e subscribers. Primeiro, precisamos preencher o campo data na nossa variável str_msg com a string que gostaríamos de enviar. Após isso, precisamos invocar o método publish no nosso objeto chatter para efetivamente enviar nossa mensagem para o ROS. O método spinOnce() faz com que o sistema atualize todos os publishers e subscribers. Por último, o método delay(1000) faz com que o programa espere por 1 segundo antes de executar o loop novamente.

Ao final, não esqueça de enviar o código para seu Arduino.

Fazendo a comunicação entre Arduino e ROS

Agora que instalamos as todas as dependências do rosserial_arduino e temos nosso primeiro programa em Arduino, podemos, finalmente, fazer a comunicação entre o seu Arduino e o ROS.

Primeiro, você precisa garantir que seu Arduino esteja conectado via USB em uma máquina rodando ROS. Você precisará saber em qual interface USB seu artigo está conectado, normalmente será /dev/ttyACM0.

Abra um terminal e execute o seguinte comando para inicializar o ROS em sua máquina:

Em um segundo termina, execute o seguinte comando para inicializar o rosserial_arduino:

Pronto! O código que você enviou anteriormente para o seu Arduino já estará sendo executado e publicando a mensagem “hello world!” no tópico /chatter.

Para verificar que tudo está realmente funcionando, você pode abrir outro terminal e usar o comando rostopic echo para visualizar as mensagens sendo publicadas no tópico /chatter:

Agora, você poderá conectar servo motores e outros dispositivos em seu Arduinos e se comunicar com máquinas rodando ROS facilmente. Você poderá estudar outros exemplos que foram adicionados ao Arduino IDE para ganhar mais familiaridade com o rosserial_arduino.

Você também poderá encontrar mais informações sobre como utilizar o rosserial_arduino no seguinte link:

Rosserial_arduino: Tutoriais

Referências

ROS Wiki: rosserial

ROS Wiki: Hello World (example publisher)

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Arduino » Utilizando Arduino com ROS (Robot Operating System)
Comentários:
Notificações
Notificar
guest
1 Comentário
recentes
antigos mais votados
Inline Feedbacks
View all comments
Mateus Mateus
Mateus Mateus
05/08/2017 16:37

Curso Arduino Essencial
https://go.hotmart.com/R5998736X

Aprenda a programar desde o zero, projetar e calcular circuitos elétricos e desenvolver projetos com a plataforma microcontroladora mais utilizada por empresas e universidades do mundo: o Arduino! Neste curso você aprenderá a trabalhar com LEDs, resistores, sensores, displays LCD; saberá como manusear um multímetro digital para medir grandezas elétricas tais como corrente, tensão e resistência e desenvolverá seu próprio sensor de estacionamento caseiro que emite sinais sonoros e mostra a distância.

Talvez você goste:

Séries

Menu

WEBINAR
 

BlueNRG-LP – Bluetooth 5.2 de longo alcance para aplicações industriais

Data: 05/11 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link