[ROS] Publisher & Subscriber

현지·2021년 7월 19일
1

ROS

목록 보기
1/1
post-thumbnail

전체 요약

숫자 2와 3을 publish한 것을 subscribe하여(받아와서) 더해서 출력한다.

  1. roscore 실행
  2. launch파일이 없기 때문에 python으로 하나씩 실행
    ex)python   <실행 파일 이름>
  3. publish되는 것을 확인 하려면 rostopic list로 목록을 확인한다.
  4. rostopic echo <확인할 토픽> 명령어를 이용해 publish 되는것을 확인한다.
  5. 전체 구조를 보고싶다면 rqt_graph를 사용하여 확인할 수 있다.

1. Publisher #1

3을 publish하는 노드를 생성한다.

  1. 초기 노드를 먼저 설정해준다.
  2. 메세지 형태의 토픽 이름을 정하고 형식, queue_size를 정해주고 반복해서 publish를 해준다.
import rospy
from std_msgs.msg import Int8	#메세지 형식 정하기, int8

rospy.init_node('test2')
pub = rospy.Publisher('testpub2',Int8, queue_size=1)
while not rospy.is_shutdown():
	pub.publish(3)
	rospy.sleep(1)

2. Publisher #2

2를 publish하는 노드를 생성한다.

노드 이름은 다르게 해주어야 한다.

import rospy
from std_msgs.msg import Int8	#메세지 형식 정하기, int8

rospy.init_node('test')
pub = rospy.Publisher('testpub',Int8, queue_size=1)
while not rospy.is_shutdown():
	pub.publish(2)
	rospy.sleep(1)

3. Subscriber

publish한 토픽명을 똑같이 맞춰서 subscriber을 한다.
global을 이용하여 받아온 데이터를 저장하고 더해서 출력한다.
global을 사용하지 않으려면 class로 바꿔서 실행한다.

import rospy
from std_msgs.msg import Int8

num1 = 0
num2 = 0

def callback(data):
	#print(data.data)
	global num1
	num1 = data.data

def callback2(data):
	#print(data.data)
	global num2
	num2 = data.data
	print(num1+num2)

if __name__=='__main__':
	rospy.init_node('sub_node')
	rospy.Subscriber("testpub",Int8, callback)
	rospy.Subscriber("testpub2",Int8, callback2)
	rospy.spin()

4. 결과 확인

subscriber

rostopic list & rostopic echo <testpub>

rqt_graph

0개의 댓글