Notice
Recent Posts
Recent Comments
Link
반응형
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

To Be Develop

[ROS] Publish-Subscribe 발행 구독 디자인 패턴이란? 본문

dev/Ros

[ROS] Publish-Subscribe 발행 구독 디자인 패턴이란?

To Be Develop 2024. 2. 29. 02:04
반응형
발행-구독(Publish-Subscribe)은 소프트웨어 아키텍처에서 많이 사용되는 디자인 패턴 중 하나로, 여러 컴포넌트 간의 느슨한 결합을 가능하게 합니다. ROS에서도 발행-구독 패턴이 중요한 역할을 합니다.

 

 

 


발행-구독 패턴은 데이터의 생산자(발행자, Publisher)와 데이터의 소비자(구독자, Subscriber)를 분리하여 상호작용할 수 있도록 합니다. 발행자는 데이터를 발행하고, 여러 구독자가 해당 데이터를 동시에 수신할 수 있습니다. 이러한 방식으로 데이터의 생산과 소비가 분리되어 각 컴포넌트를 독립적으로 유지할 수 있습니다.

 

 

ROS에서 발행-구독은 토픽(Topic)을 통해 이루어집니다. 토픽은 메시지(Message)의 흐름을 정의하고, 여러 발행자와 구독자 간의 통신을 가능하게 합니다. 발행자는 특정 토픽에 데이터를 발행하고, 해당 토픽을 구독하는 모든 구독자는 발행된 데이터를 수신합니다.

 

 


발행-구독의 주요 특징:

  1. 느슨한 결합(Loose Coupling): 발행자와 구독자는 서로 직접적으로 통신하지 않고, 중간에 토픽을 통해 통신합니다. 이는 각 컴포넌트 간의 의존성을 줄이고, 시스템을 유연하고 확장 가능하게 만듭니다.
  2. 비동기 통신(Asynchronous Communication): 발행자는 데이터를 발행하고 구독자는 필요할 때 데이터를 수신합니다. 이러한 비동기 통신은 시스템의 반응성을 향상시키고 병렬 처리를 가능하게 합니다.
  3. 다중 구독(Multiple Subscriptions): 하나의 토픽에는 여러 개의 구독자가 구독할 수 있습니다. 이는 데이터의 복사본을 생성하지 않고 여러 구독자가 동일한 데이터에 접근할 수 있도록 합니다.
  4. 효율적인 데이터 공유(Efficient Data Sharing): 발행자가 데이터를 토픽에 발행하면, 해당 데이터를 필요로 하는 모든 구독자가 수신합니다. 이는 데이터를 중복해서 전송하지 않고, 효율적으로 공유할 수 있도록 합니다.

 

 


발행-구독의 예:

예를 들어, 로봇의 센서 데이터를 처리하는 시나리오를 살펴보겠습니다. 로봇에는 LIDAR(Light Detection and Ranging) 센서가 장착되어 있으며, 이 센서는 주변 환경의 거리 정보를 측정합니다. 이 데이터를 처리하기 위해 센서 노드와 데이터 처리 노드를 만들 것입니다.

  1. 센서 노드 (Publisher):
    센서 노드는 LIDAR 센서를 제어하고, 측정된 거리 데이터를 특정 토픽에 발행합니다. 센서 노드는 주기적으로 센서에서 받은 데이터를 메시지로 포장하여 해당 토픽에 발행합니다. 예를 들어, "/lidar_data"라는 토픽에 거리 정보를 발행할 수 있습니다.
  2. 데이터 처리 노드 (Subscriber):
    데이터 처리 노드는 "/lidar_data" 토픽을 구독하여 센서로부터 측정된 거리 정보를 수신합니다. 이 노드는 받은 데이터를 분석하고, 필요에 따라 로봇의 동작을 결정하거나 화면에 시각화할 수 있습니다.

이제 이러한 발행-구독 패턴이 어떻게 작동하는지 자세히 살펴보겠습니다:

  1. 발행(Publishing):
    센서 노드는 특정 토픽에 데이터를 발행합니다. 이때 센서 데이터를 메시지로 변환하고, 해당 토픽에 데이터를 발행합니다. 메시지는 특정 시간 간격으로 주기적으로 발행될 수 있거나, 센서에서 데이터를 받을 때마다 발행될 수 있습니다.
  2. 구독(Subscribing):
    데이터 처리 노드는 특정 토픽을 구독하여 데이터를 수신합니다. 이때 구독자 노드는 ROS 마스터에게 해당 토픽을 구독한다고 등록하고, 발행되는 데이터를 받을 준비를 합니다. 이후 발행자 노드가 데이터를 발행하면, ROS 마스터는 해당 데이터를 구독자 노드에게 전달합니다.
  3. 비동기적 통신(Asynchronous Communication):
    발행-구독 패턴은 비동기적 통신을 지원합니다. 이는 발행자와 구독자 간에 실시간으로 연결되어 있지 않아도 되며, 데이터의 발행과 구독이 독립적으로 이루어지므로 각 노드는 자신의 작업을 계속할 수 있습니다.
  4. 느슨한 결합(Loose Coupling):
    발행-구독 패턴은 느슨한 결합을 제공합니다. 이는 발행자와 구독자 간의 의존성이 낮아서, 각각의 노드가 독립적으로 개발 및 유지보수될 수 있습니다. 또한 특정 노드의 변경이 다른 노드에 영향을 미치지 않으므로 시스템을 유연하게 확장할 수 있습니다.

그림 1. 발행 구독의 예시

 

이러한 발행-구독 패턴을 통해 ROS 시스템은 분산 환경에서 효율적으로 데이터를 공유하고, 다양한 노드들 간의 통신을 가능하게 합니다. 이를 통해 로봇 시스템의 모듈화와 확장성을 높일 수 있으며, 다양한 애플리케이션을 쉽게 개발할 수 있습니다.

 

 


 

반응형