ROS2는 ROS1의 아키텍처에서 발전한 구조를 가지고 있으며, 로봇 시스템의 성능과 확장성을 고려하여 설계되었다. ROS2의 아키텍처는 ROS1에 비해 많은 개선이 이루어졌으며, 특히 분산 시스템에서의 성능, 실시간 처리, 보안 기능 등이 강화되었다. ROS2의 아키텍처를 구성하는 주요 요소들을 하나씩 설명하겠다.

분산 통신 구조

ROS2는 분산 통신 구조를 채택하여 여러 노드가 서로 독립적으로 통신할 수 있도록 설계되었다. 노드(Node)는 시스템에서 기능 단위를 담당하며, 서로 데이터를 주고받기 위해 퍼블리셔(Publisher)와 서브스크라이버(Subscriber)를 사용한다. 이러한 구조는 퍼블리셔가 데이터를 발행하고, 서브스크라이버가 이를 받아서 처리하는 형태로 이루어진다.

노드(Node)

노드는 ROS2에서 가장 기본적인 실행 단위로, 각각의 노드는 서로 독립적으로 실행되며 네트워크를 통해 다른 노드와 통신할 수 있다. 노드는 데이터의 생산자 또는 소비자 역할을 할 수 있으며, 퍼블리셔 또는 서브스크라이버로서 데이터를 주고받는다.

퍼블리셔와 서브스크라이버

퍼블리셔는 데이터를 생성하여 특정 토픽(Topic)으로 발행하며, 서브스크라이버는 해당 토픽을 구독하여 데이터를 받는다. ROS2는 DDS(Data Distribution Service)를 기반으로 하여, 퍼블리셔와 서브스크라이버 간의 통신을 관리한다. DDS는 분산 시스템에서 노드 간의 신뢰성 있는 통신을 보장하는 역할을 한다.

DDS 기반의 통신

ROS2의 아키텍처에서 가장 중요한 변화 중 하나는 통신 미들웨어로 DDS를 채택한 것이다. DDS는 분산 시스템에서 데이터 교환을 위한 표준 프로토콜로, 네트워크 상에서 퍼블리셔와 서브스크라이버가 데이터를 주고받는 방식의 통신을 관리한다. DDS는 다음과 같은 특성을 제공한다:

품질 서비스(QoS)

ROS2는 DDS를 사용하여 다양한 QoS 정책을 적용할 수 있다. QoS는 퍼블리셔와 서브스크라이버 간의 통신 품질을 결정하는 중요한 요소이다. QoS는 신뢰성, 내구성, 대기 시간(Latency) 등의 특성을 설정할 수 있다.

QoS는 다음과 같은 주요 파라미터로 구성된다:

ROS2의 노드 간 통신

ROS2에서 노드 간의 통신은 DDS를 통해 이루어지며, 이 통신은 퍼블리셔, 서브스크라이버, 서비스(Service), 액션(Action) 등을 통해 이루어진다. 각 통신 메커니즘은 데이터를 주고받기 위한 다양한 방법을 제공한다.

퍼블리셔와 서브스크라이버

퍼블리셔는 데이터를 발행하는 역할을 하며, 서브스크라이버는 해당 데이터를 수신하는 역할을 한다. ROS2의 퍼블리셔와 서브스크라이버는 노드 간의 비동기 통신을 통해 데이터를 교환한다. 퍼블리셔가 발행하는 데이터는 특정 토픽을 통해 전달되며, 서브스크라이버는 해당 토픽을 구독하여 데이터를 수신한다.

퍼블리셔에서 발행된 데이터는 서브스크라이버에 도달하기 전에 DDS를 통해 처리된다. 이 과정에서 QoS 설정에 따라 데이터 전송의 신뢰성, 대기 시간 등이 결정된다.

서비스와 액션

ROS2는 퍼블리셔/서브스크라이버 외에도 서비스와 액션을 통해 노드 간의 동기 통신을 지원한다.

서비스(Service)

서비스는 요청(Request)과 응답(Response)으로 이루어진 양방향 통신을 제공한다. 하나의 노드가 서비스 서버(Service Server)로서 동작하고, 다른 노드가 서비스 클라이언트(Service Client)로 요청을 보낸다. 서버는 요청을 처리한 후 클라이언트에 응답을 보낸다.

액션(Action)

액션은 서비스와 유사하지만, 비동기 작업을 처리할 때 유용하다. 액션 서버(Action Server)는 장기 실행 작업을 처리할 수 있으며, 액션 클라이언트(Action Client)는 이 작업을 요청하고 진행 상황을 모니터링할 수 있다.

실시간 지원

ROS2는 실시간 처리가 중요한 시스템을 지원하기 위해 설계되었다. ROS1에서는 실시간 시스템 지원이 제한적이었으나, ROS2는 이를 개선하여 실시간 처리를 위한 다양한 기능을 제공한다. 실시간 처리가 필요한 경우, 노드는 일정한 시간 내에 작업을 완료해야 하며, 이를 위해 ROS2는 다음과 같은 요소들을 포함한다:

실시간 시스템에서의 요구 사항

실시간 시스템에서는 정확한 시간 내에 작업을 완료하는 것이 필수적이다. ROS2의 아키텍처는 실시간성을 보장하기 위해 다음과 같은 요소들을 고려한다:

DDS의 실시간 지원

ROS2에서 사용되는 DDS는 실시간 시스템을 지원하는데 적합한 특성을 가지고 있다. DDS는 다음과 같은 실시간 요구 사항을 충족한다:

실시간 노드의 구성

ROS2에서 실시간 시스템을 구성할 때, 노드는 주기적인 작업을 수행해야 한다. 이를 위해 ROS2는 타이머(Timer)를 제공하며, 타이머를 사용하여 일정한 시간 간격으로 작업을 수행할 수 있다. 또한, ROS2의 생명주기 노드(Lifecycle Node)를 활용하여 노드의 상태 전환을 관리하고, 실시간 시스템에서 노드의 활성화와 비활성화를 효과적으로 제어할 수 있다.

타이머를 통한 주기적 작업 관리

ROS2의 타이머는 실시간 시스템에서 주기적인 작업을 수행하는 데 유용하다. 타이머는 특정 간격으로 호출되는 콜백 함수를 정의할 수 있으며, 이를 통해 노드가 일정한 주기로 작업을 처리할 수 있다. 타이머는 노드의 실행 루프와 독립적으로 실행되므로, 실시간 처리의 요구 사항을 충족할 수 있다.

생명주기 노드를 통한 상태 관리

ROS2의 생명주기 노드(Lifecycle Node)는 노드의 상태를 관리하고, 노드의 활성화/비활성화를 제어하는 데 사용된다. 실시간 시스템에서 생명주기 노드는 특정 상태에서만 작업을 수행하도록 노드를 제어할 수 있으며, 상태 전환을 통해 노드의 작업을 효율적으로 관리할 수 있다.

생명주기 노드의 상태 전환은 ROS2에서 제공하는 인터페이스를 통해 제어할 수 있으며, 실시간 시스템에서 노드의 상태를 명확하게 관리할 수 있다.

ROS2의 계층 구조

ROS2는 여러 계층으로 구성된 아키텍처를 통해 다양한 기능을 제공한다. 각 계층은 서로 독립적이면서도 상호 작용하며, 이로 인해 확장성 높은 시스템 구성이 가능한다. ROS2의 아키텍처는 다음과 같은 주요 계층으로 나눌 수 있다:

1. 애플리케이션 계층 (Application Layer)

애플리케이션 계층은 ROS2를 사용하는 개발자가 직접 다루는 영역으로, 노드, 토픽, 서비스, 액션 등을 정의하고 활용하는 코드가 포함된다. 이 계층에서 개발자는 ROS2의 기능을 사용하여 로봇 제어, 데이터 처리, 통신 등을 구현한다.

2. 미들웨어 계층 (Middleware Layer)

미들웨어 계층은 애플리케이션 계층과 네트워크 계층 사이에서 데이터를 전달하는 역할을 한다. ROS2는 DDS(Data Distribution Service)를 기반으로 하는 미들웨어 계층을 통해 노드 간의 통신을 관리한다. 이 계층은 ROS2의 분산 통신 구조를 지원하며, 다양한 QoS(품질 서비스) 설정을 통해 통신의 신뢰성을 보장한다.

3. 네트워크 계층 (Network Layer)

네트워크 계층은 실제로 노드 간 데이터를 전송하는 네트워크 프로토콜이 작동하는 영역이다. 이 계층에서 ROS2는 DDS를 통해 네트워크 상의 노드 간 데이터를 전송하며, 다양한 네트워크 구성에서 효율적인 통신이 가능하도록 설계되었다.

네트워크 통신 방식

ROS2는 분산 시스템에서 다양한 통신 방식을 지원하며, 퍼블리셔-서브스크라이버 모델을 통해 데이터 교환이 이루어진다. 퍼블리셔는 특정 토픽을 통해 데이터를 발행하고, 서브스크라이버는 해당 토픽을 구독하여 데이터를 수신한다. DDS는 이러한 데이터 전송을 처리하며, QoS 설정을 통해 데이터 통신의 신뢰성, 지연 시간 등을 조정할 수 있다.

퍼블리셔-서브스크라이버 모델

퍼블리셔는 데이터를 발행하는 역할을 하며, 서브스크라이버는 해당 데이터를 수신하는 역할을 한다. 퍼블리셔와 서브스크라이버는 서로 독립적으로 동작하며, 분산 시스템에서 데이터의 흐름을 관리한다. DDS를 통해 퍼블리셔와 서브스크라이버 간의 데이터 통신이 이루어지며, QoS 설정을 통해 통신의 신뢰성을 보장할 수 있다.

QoS 정책

QoS(품질 서비스)는 퍼블리셔와 서브스크라이버 간의 통신 품질을 결정하는 요소이다. ROS2는 DDS를 통해 다양한 QoS 정책을 지원하며, 개발자는 통신의 신뢰성, 지연 시간, 내구성 등을 설정할 수 있다. 주요 QoS 정책은 다음과 같다: