fbpx

ROS topics

Comunicação Publisher Subscriber

No mecanismo Publisher-Subscriber há o nó que envia dados (Publisher) e o nó que recebe dados (Subscriber).
O caminho de envio desses dados é chamado de Topics e pode ser do tipo 1:1, 1:N, N:1 e N:N dependendo do propósito.

Este tutorial foi retirado do curso ROS for Beginners: Basics, Motion, and OpenCV disponível no site da Udemy e é ministrado por Anis Koubaa.

Para reproduzir este artigo é necessário implementar os códigos seguintes disponíveis em seu git.
Para isto basta clonar seu repositório no workspace de sua máquina:

$ cd catkin_ws

$ git clone https://github.com/aniskoubaa/ros_essentials_cpp.git

Exemplo Hello World (Talker Listener)

O Topic aqui é chamado de chatter e possui uma mensagem do tipo String

Código talker.py
##########################################
1     #!/usr/bin/env python
2     # license removed for brevity
3     import rospy
4     from std_msgs.msg import String
5
6     def talker():
7        pub = rospy.Publisher(‘chatter’, String, queue_size=10)
8        rospy.init_node(‘talker’, anonymous=True)
9        rate = rospy.Rate(1) # 1hz
10      i=0
11      while not rospy.is_shutdown():
12         hello_str = “hello world %s” % i
13         rospy.loginfo(hello_str)
14         pub.publish(hello_str)
15         rate.sleep()
16         i=i+1
17
18    if __name__ == ‘__main__’:
19       try:
20          talker()
21       except rospy.ROSInterruptException:
22          pass
##############################################

 

A linha 7 é responsável pela criação do Publisher e os parâmetros fornecidos é o nome do tópico, o tipo de mensagem e quantas mensagens será armazenada na fila simultaneamente até serem descartadas.
A linha 8 inicia o nó e os parâmetros são o nome do nó enquanto anonymous=TRUE garante que cada nó criado seja único através de um ID
A linha 10 especifica a frequencia com que é publicado, ou seja, quantas mensagens por segundo
O loop da linha 11 funciona enquanto estiver ligado, neste caso cria a mensagem na linha 12 e o publica na linha 14.

Após clonar o repósitório do Anis Koubaa é necessário iniciar o ROS com o comando

$ roscore

 

Em dois novos terminais abrir o workspace e fazer

$ rosrun ros_essentials_cpp talker.py
e
$ rosrun ros_essentials_cpp listener.py

 

Código listener.py
##################################################

1     #!/usr/bin/env python
2     import rospy
3     from std_msgs.msg import String
4
5     def callback(message):
6        print(” I heard “, message.data)
7
8     def listener():
9        rospy.init_node(‘listener’, anonymous=True)
10
11      rospy.Subscriber(“chatter”, String, callback)
12
13      rospy.spin()
14
15   if __name__ == ‘__main__’:
16      listener()
######################################################

 

A linha 9 inicia o nó da mesma forma que o Publisher
A linha 11 cria o Subscriber onde deve ser fornecido o mesmo nome dado ao Publisher, o mesmo tipo de mensagem e o último parâmetro é a função callback que é chamada toda vez que uma nova mensagem é recebida.

 

Ao executar os dois códigos em sua máquina você é capaz de ver que a comunicação acontece de forma que o que é enviado em Talker é recebido pelo Listener

11 de maio de 2021

Sobre nós

A Linux Force Brasil é uma empresa que ama a arte de ensinar. Nossa missão é criar talentos para a área de tecnologia e atender com excelência nossos clientes.

CNPJ: 13.299.207/0001-50
SAC:         0800 721 7901

[email protected]

Comercial  Comercial: (11) 3796-5900

Suporte:    (11) 3796-5900
[email protected]

Copyright © Linux Force Security  - Desde 2011.