ROS2의 통신 방식

ROS2는 분산 시스템에서 통신을 원활하게 하기 위해 데이터 분배 서비스(DDS, Data Distribution Service)를 사용한다. 이 통신 메커니즘은 ROS1의 통신 모델과는 달리 QoS(Quality of Service) 정책을 정의하여 시스템의 신뢰성과 성능을 보장할 수 있도록 개선되었다. ROS2는 노드 간의 통신을 여러 방식으로 지원하며, 대표적으로 토픽(Topic), 서비스(Service), 액션(Action)이 있다. 이 섹션에서는 이 세 가지 통신 메커니즘의 동작 원리를 수학적 표현과 함께 자세히 설명한다.

토픽 (Topic)

토픽은 ROS2의 퍼블리시/서브스크라이브(Publish/Subscribe) 통신 모델을 구현한 것이다. 퍼블리셔(발행자) 노드가 메시지를 보내고, 서브스크라이버(구독자) 노드가 해당 메시지를 수신한다. 이러한 방식은 비동기적으로 동작하며, 노드 간의 명시적인 연결 없이 데이터를 교환할 수 있도록 한다.

토픽을 통해 주고받는 메시지의 수학적 표현은 다음과 같다.

\mathbf{m}(t) = [m_1(t), m_2(t), \dots, m_n(t)]

여기서 \mathbf{m}(t)는 시간 t에 발행된 메시지 벡터를 나타내며, m_i(t)i-번째 데이터 요소이다.

퍼블리셔와 서브스크라이버 사이의 통신을 표현한 간단한 메커니즘은 다음과 같이 다이어그램으로 나타낼 수 있다:

graph TD; Publisher -->|Publishes| Topic; Topic -->|Subscribes| Subscriber;

ROS2는 DDS를 통해 토픽의 QoS를 설정할 수 있으며, 이는 퍼블리셔와 서브스크라이버 간의 통신 신뢰성에 영향을 미친다. ROS2에서 사용할 수 있는 QoS 정책 중 대표적인 항목들은 다음과 같다:

위의 QoS 설정은 토픽 통신의 효율성과 신뢰성에 영향을 미치므로, 시스템 요구 사항에 따라 적절하게 선택해야 한다.

서비스 (Service)

서비스는 요청-응답(Request-Response) 통신 모델을 제공한다. 이는 비동기적인 토픽과는 달리, 동기적인 통신 방식을 사용한다. 서비스 서버가 클라이언트로부터 요청을 수신하면, 그 요청을 처리한 후 응답을 반환한다.

서비스 통신은 다음과 같은 구조로 표현될 수 있다:

이를 수학적으로 표현하면, 클라이언트에서 서버로의 요청은 함수 f로 나타낼 수 있다.

R(t) = f(x_1, x_2, \dots, x_n)

여기서 R(t)는 시간 t에서 클라이언트가 서버에 요청한 함수이며, x_1, x_2, \dots, x_n는 입력 값들이다.

S(t) = g(R(t))

S(t)는 서버가 클라이언트에 반환한 응답 값이며, 이는 요청 R(t)에 대한 함수 g로 처리된다.

서비스 통신의 구조를 다이어그램으로 나타내면 다음과 같다:

graph TD; Client -->|Request| Server; Server -->|Response| Client;

서비스는 요청과 응답이 한 쌍을 이루는 구조이기 때문에, 이는 요청이 필요할 때마다 정확하게 처리되고, 클라이언트가 명시적으로 응답을 받을 때까지 대기한다.

서비스 통신은 다음과 같은 상황에서 유용하다: - 로봇 제어에서 특정 명령에 대한 즉각적인 피드백이 필요한 경우 - 계산 비용이 큰 작업을 요청하고 그 결과를 기다릴 때

액션 (Action)

액션은 서비스와 유사하지만, 요청-응답 모델과 비동기적 데이터 전송을 결합한 형태로, 장시간이 걸리는 작업이나 중간 피드백이 필요한 작업에 적합하다. 액션 서버는 클라이언트로부터 목표(goal)를 수신하고, 이 목표를 수행하는 동안 주기적으로 피드백(feedback)을 제공하며, 최종적으로 결과(result)를 반환한다.

액션 통신을 수학적으로 표현하면 다음과 같다:

G(t) = [g_1(t), g_2(t), \dots, g_n(t)]

여기서 G(t)는 목표를 구성하는 여러 파라미터들로 이루어진 벡터이다.

F(t) = [f_1(t), f_2(t), \dots, f_n(t)]

F(t)는 시간 t에서 목표 진행 상태를 나타내는 여러 피드백 요소들이다.

R(t) = h(G(t))

여기서 h는 목표 G(t)에 대한 함수로, 최종적인 결과를 반환하는 역할을 한다.

액션 통신 메커니즘을 다이어그램으로 표현하면 다음과 같다:

graph TD; Client -->|Goal| ActionServer; ActionServer -->|Feedback| Client; ActionServer -->|Result| Client;

이 통신 모델에서 액션은 다음과 같은 단계를 따른다:

  1. 목표 전송: 클라이언트는 특정 목표를 설정하고 이를 액션 서버에 전송한다.
  2. 피드백 제공: 액션 서버는 목표를 수행하는 동안 주기적으로 클라이언트에 진행 상황을 피드백으로 전송한다.
  3. 결과 반환: 목표가 완료되면, 액션 서버는 최종 결과를 클라이언트로 반환한다.

액션의 QoS

액션 통신 역시 ROS2의 QoS 정책을 적용할 수 있으며, 특히 장시간이 걸리는 작업에 대해 효율적이고 신뢰성 있는 통신을 보장한다. 주요 QoS 설정은 다음과 같다:

ROS2 통신의 비교

토픽, 서비스, 액션 통신 메커니즘은 각각의 특성과 용도에 따라 다른 방식으로 활용된다. 이를 수학적으로 요약하면, 각 메커니즘은 다음과 같은 통신 방식을 따른다:

  1. 토픽: 비동기 퍼블리시/서브스크라이브 모델
\mathbf{m}(t) = [m_1(t), m_2(t), \dots, m_n(t)]
  1. 서비스: 동기 요청-응답 모델
R(t) = f(x_1, x_2, \dots, x_n), \quad S(t) = g(R(t))
  1. 액션: 비동기 목표-피드백-결과 모델
G(t), \quad F(t), \quad R(t) = h(G(t))

각 통신 메커니즘은 사용 사례에 따라 장점과 단점이 있다. 짧은 시간 내에 데이터를 주고받아야 하는 경우에는 토픽 통신이 적합하며, 명확한 요청과 응답이 필요한 경우에는 서비스가 더 유리하다. 반면, 장시간의 작업에서 중간 피드백과 최종 결과가 필요한 경우 액션 통신이 효과적이다.

토픽, 서비스, 액션의 구조적 차이점

토픽

서비스

액션