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)

 

 

 

 

NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

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

1
Deixe um comentário

avatar
 
1 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
Mateus Mateus Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Mateus Mateus
Visitante
Mateus Mateus

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.