# ROS2 : 통신 (Communication)

ROS2(Robot Operating System 2)는 로봇 시스템의 분산 컴퓨팅을 위한 통신 프레임워크로, 다양한 네트워크 환경에서 높은 유연성과 성능을 제공한다. ROS2의 통신 모델은 DDS(Data Distribution Service)라는 미들웨어 표준을 기반으로 하며, 이는 ROS1과 비교하여 더 강력하고 확장 가능한 통신 구조를 제공한다. 본 논문에서는 ROS2의 통신 메커니즘을 심도 있게 탐구하며, 주요 구성 요소와 동작 원리에 대해 설명하고자 한다.

#### ROS2 통신의 핵심 개념

ROS2 통신은 Node(노드), 토픽(Topic), 메시지(Message), 서비스(Service), 액션(Action), 그리고 QoS(Quality of Service)라는 핵심 개념들에 의해 구성된다. 이들은 각각 로봇 시스템에서 데이터의 생성, 전송, 및 소비를 관리하는 역할을 담당한다.

**Node (Node)**

Node는 ROS2에서 통신의 기본 단위로, 각 Node는 데이터의 발행(Publish)과 구독(Subscribe), 서비스 제공(Provide) 및 요청(Request), 액션 실행 등을 수행한다. Node는 ROS2 네트워크 내에서 독립적으로 실행되며, 서로 다른 물리적 장치나 네트워크에 위치할 수 있다. Node 간의 통신은 네트워크 투명성을 제공하여 물리적 위치와 무관하게 이루어진다.

**토픽 (Topic)과 메시지 (Message)**

토픽은 Node 간 비동기 데이터 통신을 위해 사용되는 추상화된 채널이다. 발행-구독 모델(Publish-Subscribe Model)을 기반으로 동작하며, 한 Node는 특정 토픽에 메시지를 발행하고, 다른 Node는 해당 토픽을 구독함으로써 데이터를 수신한다. 메시지는 토픽을 통해 전송되는 데이터 패킷으로, 특정 메시지 타입을 따른다. ROS2에서는 메시지 타입이 엄격하게 정의되며, 사용자 정의 메시지 타입도 지원한다.

**서비스 (Service)**

서비스는 동기식 통신을 위한 메커니즘으로, 요청(Request)과 응답(Response) 패턴을 기반으로 한다. 한 Node가 서비스를 요청하면, 다른 Node가 이를 처리하고 응답을 반환한다. 서비스는 특정 작업을 요청하고, 그 결과를 즉각적으로 필요로 할 때 유용하다.

**액션 (Action)**

액션은 서비스와 유사하지만, 긴 시간이 소요되는 작업을 처리하기 위한 메커니즘이다. 액션은 작업의 시작(Start), 피드백(Feedback), 그리고 결과(Result)를 관리하며, 작업의 진행 상태를 실시간으로 업데이트 받을 수 있다. 이는 로봇의 복잡한 동작을 수행하는 데 특히 유용하다.

#### DDS를 기반으로 한 ROS2의 통신 인프라

ROS2의 통신은 DDS를 기반으로 하여, 실시간성, 확장성, 신뢰성을 보장한다. DDS는 분산 시스템 간의 데이터 교환을 위한 미들웨어 표준으로, ROS2는 이를 활용하여 강력한 통신 인프라를 제공한다.

**데이터 분산 서비스 (DDS, Data Distribution Service)**

DDS는 퍼블리셔(Publisher)와 서브스크라이버(Subscriber) 간의 데이터 교환을 중재하며, ROS2의 통신 백본 역할을 한다. DDS는 Node 간의 통신을 네트워크에 최적화된 방식으로 관리하고, QoS 설정을 통해 통신의 신뢰성과 성능을 조절할 수 있다.

**ROS2와 DDS의 연계**

ROS2는 DDS의 여러 기능을 직접 활용하여, Node 간의 통신을 효율적으로 관리한다. ROS2는 다양한 DDS 구현체(e.g., Fast-RTPS, Cyclone DDS)를 지원하며, 개발자는 애플리케이션 요구에 따라 최적의 DDS 구현체를 선택할 수 있다. 이러한 구조는 ROS2의 모듈성과 유연성을 극대화한다.

#### QoS (Quality of Service)

QoS는 ROS2 통신에서 데이터 전송의 신뢰성과 성능을 조절하는 중요한 메커니즘이다. DDS의 QoS 정책을 통해 ROS2에서는 다양한 네트워크 환경에 적응할 수 있는 통신 설정을 제공한다.

**QoS 프로파일**

QoS는 ROS2 통신에서 중요한 역할을 하며, 이를 통해 메시지의 신뢰도, 지연 시간, 데이터 손실률 등을 설정할 수 있다. 주요 QoS 정책에는 신뢰성(Reliability), 내구성(Durability), 이력(History), 그리고 리소스 제한(Resource Limits)이 포함된다. 각 정책은 통신의 품질을 조절하며, 특정 애플리케이션의 요구에 맞게 조정될 수 있다.

**신뢰성 (Reliability)**

신뢰성은 메시지가 반드시 전달되어야 하는지 여부를 결정한다. 'Best Effort'는 메시지를 가능한 한 빨리 전달하지만, 손실될 수 있다. 반면, 'Reliable'은 모든 메시지를 반드시 전달하도록 보장한다.

**내구성 (Durability)**

내구성은 메시지가 발행된 이후에도 새로 구독한 Node에게 전달될 수 있는지 여부를 결정한다. 'Transient Local' 설정은 최근 메시지를 새 구독자에게 전달하며, 'Volatile' 설정은 오직 현재의 활성 구독자에게만 메시지를 전달한다.

**이력 (History)**

이력은 각 구독자가 수신할 메시지의 수를 결정한다. 예를 들어, 'Keep Last'는 최신 N개의 메시지만을 유지하며, 'Keep All'은 모든 메시지를 유지하여 구독자에게 전달한다.

#### ROS2 통신의 확장성과 신뢰성

ROS2는 다양한 DDS 구현체를 지원함으로써, 통신의 확장성과 신뢰성을 보장한다. 이는 로봇 시스템이 다양한 네트워크 조건과 요구 사항에 적응할 수 있도록 돕는다.

**DDS 구현체의 선택과 성능**

ROS2는 Fast-RTPS, Cyclone DDS, Connext DDS와 같은 여러 DDS 구현체를 지원한다. 각 구현체는 성능, 기능, 그리고 라이선스 조건이 다르므로, 사용자는 자신의 시스템 요구사항에 따라 적절한 DDS 구현체를 선택할 수 있다. 이러한 유연성은 ROS2 시스템이 다양한 애플리케이션 환경에서 최적의 성능을 발휘할 수 있도록 한다.

**다중 Node 간 통신과 네트워크 트래픽 관리**

ROS2는 다중 Node 간의 통신을 효율적으로 관리하기 위해 네트워크 트래픽을 최적화한다. DDS의 퍼블리셔-서브스크라이버 모델을 사용하여, Node 간의 직접 통신이 가능하며, 네트워크 부하를 줄이고 지연 시간을 최소화한다. 또한, QoS 설정을 통해 데이터 전송의 우선순위를 조절함으로써, 네트워크 트래픽을 더욱 효율적으로 관리할 수 있다.

***

관련 자료:

* ROS2 Design, ROS.org, <https://design.ros2.org>
* DDS: Data Distribution Service, Object Management Group, <https://www.omg.org/spec/DDS/>
* M. Quigley et al., *Programming Robots with ROS*, O'Reilly Media, 2015.
* E. Fernandez and T. Foote, The ROS 2 project: a community-driven, open-source platform for robotics, in *Proceedings of the IEEE International Conference on Robotics and Automation*, 2018.
