숫자 2와 3을 publish한 것을 subscribe하여(받아와서) 더해서 출력한다.
- roscore 실행
- launch파일이 없기 때문에 python으로 하나씩 실행
ex)python <실행 파일 이름>- publish되는 것을 확인 하려면 rostopic list로 목록을 확인한다.
- rostopic echo <확인할 토픽> 명령어를 이용해 publish 되는것을 확인한다.
- 전체 구조를 보고싶다면 rqt_graph를 사용하여 확인할 수 있다.
3을 publish하는 노드를 생성한다.
- 초기 노드를 먼저 설정해준다.
- 메세지 형태의 토픽 이름을 정하고 형식, 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를 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)
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()
subscriber
rostopic list & rostopic echo <testpub>
rqt_graph