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
##################################################

#!/usr/bin/env python
1 import rospy
2 from std_msgs.msg import String
3
4 def callback(message):
5 print(” I heard “, message.data)
6
7 def listener():
8
9 # In ROS, nodes are uniquely named. If two nodes with the same
10 # node are launched, the previous one is kicked off. The
11 # anonymous=True flag means that rospy will choose a unique
12 # name for our ‘listener’ node so that multiple listeners can
13 # run simultaneously.
14 rospy.init_node(‘listener’, anonymous=True)
15
16 rospy.Subscriber(“chatter”, String, callback)
17
18 # spin() simply keeps python from exiting until this node is stopped
19 rospy.spin()
20
21 if __name__ == ‘__main__’:
22 listener()
######################################################

 

A linha 14 inicia o nó da mesma forma que o Publisher
A linha 16 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ê que a comunicação acontece de forma que o que é enviado em Talker é recebido pelo Listener

30 de março 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

sac@linuxforce.com.br

Comercial  Comercial = 11 3796 5900

Suporte:    11 3796-5900
contato@linuxforce.com.br

Últimos Tweets

Erro ao receber tweets

Administrador Online

Não há usuários online neste momento
Copyright © Linux Force Security  - Desde 2011.