ROS 기초: Publisher와 Subscriber 패턴
ROS Publisher와 Subscriber 이해하기
ROS(Robot Operating System)의 핵심 개념인 Publisher/Subscriber 패턴에 대해 알아봅니다.
📚 개요
ROS의 노드 간 통신은 주로 두 가지 방식으로 이루어집니다:
- Topic: 비동기 단방향 통신 (Publisher/Subscriber)
- Service: 동기 양방향 통신 (Request/Response)
오늘은 Topic 기반 통신을 중점적으로 다룹니다.
🔄 Publisher/Subscriber 패턴
#!/usr/bin/env python3
import rospy
from std_msgs.msg import String
def publisher_example():
# 노드 초기화
rospy.init_node('publisher_node', anonymous=True)
# Publisher 생성
pub = rospy.Publisher('chatter', String, queue_size=10)
rate = rospy.Rate(10) # 10Hz
while not rospy.is_shutdown():
message = "Hello ROS! %s" % rospy.get_time()
rospy.loginfo(message)
pub.publish(message)
rate.sleep()
if __name__ == '__main__':
try:
publisher_example()
except rospy.ROSInterruptException:
pass
📥 Subscriber 예제
#!/usr/bin/env python3
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo("받은 메시지: %s" % data.data)
def subscriber_example():
rospy.init_node('subscriber_node', anonymous=True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
subscriber_example()
🚀 실행 방법
# Terminal 1: roscore 실행
roscore
# Terminal 2: Publisher 실행
rosrun my_package publisher.py
# Terminal 3: Subscriber 실행
rosrun my_package subscriber.py
💡 핵심 개념
| 개념 | 설명 |
|---|---|
| Node | ROS 프로그램의 실행 단위 |
| Topic | 메시지가 전달되는 버스 |
| Publisher | 메시지를 발행하는 주체 |
| Subscriber | 메시지를 구독하는 주체 |
| Message | 전달되는 데이터 타입 |
📝 정리
- ROS의 Topic은 비동기 통신 방식입니다
- 하나의 Topic에 여러 Publisher/Subscriber 가능
queue_size로 메시지 버퍼 크기 조절rospy.spin()은 노드를 계속 실행 상태로 유지
🔗 참고 자료
다음 포스트에서는 Custom Message 만들기를 다룹니다!