ROS 2의 통신 및 구조 개요
ROS 2는 Data Distribution Service(DDS) 프로토콜을 기반으로 통신을 수행합니다. ROS 2의 통신 메커니즘과 구조는 ROS 1과는 많은 차이점을 보이며, 아래에서 주요 특징과 각 계층별 작동 원리에 대해 설명드리겠습니다.
1. ROS 2의 주요 통신 방식
ROS 2는 Data Distribution Service(DDS) 프로토콜을 통신에 활용하며, 이는 주로 OSI 7계층 모델의 **전송 계층(Transport Layer)**과 **세션 계층(Session Layer)**에서 동작합니다. 이 미들웨어는 **RTPS(Real-Time Publish-Subscribe)**를 사용하여 실시간 데이터 교환을 지원하며, 이를 통해 퍼블리셔와 서브스크라이버 간의 메시지가 신속하고 안정적으로 전달됩니다.
RTPS는 구조화된 메시지 헤더를 사용하여 데이터를 관리하며, 이 헤더에는 다음과 같은 정보가 포함됩니다:
- 프로토콜 식별자(Protocol Identifier): RTPS 메시지를 인식할 수 있도록 고유한 식별자를 제공합니다.
- 버전 정보(Version Information): 사용 중인 DDS 및 RTPS의 버전 정보를 명시하여 프로토콜 간의 호환성을 보장합니다.
- 벤더 ID(Vendor ID): 특정 DDS 구현체(e.g., eProsima Fast DDS, Cyclone DDS, RTI Connext DDS)를 식별하기 위해 사용됩니다.
DDS는 퍼블리셔와 서브스크라이버 간의 통신을 중앙 관리자가 없이 분산 방식으로 처리하며, 실시간성이 중요한 애플리케이션에 적합한 고성능 통신을 제공합니다. RTPS는 특히 네트워크에서 데이터 전송을 효율적으로 처리하기 위해 QoS(Quality of Service) 설정을 지원하며, 데이터 신뢰성, 전송 속도, 메시지 순서 보장 등의 다양한 통신 요구 사항을 충족합니다.
결론적으로, ROS 2에서 DDS와 RTPS는 실시간 데이터 교환, 높은 확장성, 분산 네트워크 환경에서의 강력한 통신 기능을 제공하는 핵심적인 역할을 합니다.
2. ROS2의 통신 유형
ROS 2에서는 노드 간 통신을 위해 **퍼블리셔(Publisher)**와 서브스크라이버(Subscriber), 서비스(Service), 액션(Action), 파라미터(Parameter) 서버를 사용합니다. 각 통신 방식은 노드 간 메시지 교환의 특정 요구 사항을 처리하며, 다음과 같은 특징을 가집니다:
- 토픽(Topic):
- 퍼블리셔가 데이터를 생성하고, 서브스크라이버가 이를 수신합니다.
- 비동기식 통신에 적합하며, 주로 센서 데이터나 상태 정보를 전송하는 데 사용됩니다.
- 서비스(Service):
- 요청-응답 구조로 동작하며, 클라이언트와 서버 간의 동기식 통신을 제공합니다.
- 특정 작업을 요청하고 그 결과를 반환받을 때 유용합니다.
- 액션(Action):
- 장기적인 작업을 처리하기 위해 설계되었습니다.
- 목표(Goal), 피드백(Feedback), 결과(Result)를 포함하여 작업의 진행 상황을 추적할 수 있습니다.
- 파라미터(Parameter):
- 노드의 설정 값을 읽거나 쓰는 데 사용됩니다.
- 동적으로 노드의 동작을 조정할 수 있도록 지원합니다.
2. ROS 2의 아키텍처 개요
ROS 2는 크게 다음과 같은 계층 구조를 가지고 있습니다:
1) 애플리케이션 계층(Application Layer):
- 사용자 코드가 작성되는 부분으로, Python(rclpy) 또는 C++(rclcpp) API를 통해 ROS 2 노드를 구현합니다.
- 이 계층에서는 메시지 퍼블리싱, 서브스크라이빙, 서비스 호출 등이 이루어집니다.
2) ROS 2 클라이언트 계층(Client Layer):
- ROS 2 클라이언트 라이브러리(rcl)를 통해 사용자 코드와 미들웨어 계층을 연결합니다.
- 이 라이브러리는 C 언어로 구현되어 있으며, 다양한 언어의 API가 이 계층을 통해 동작합니다.
3) 추상 DDS 계층(Abstract DDS Layer):
- ROS Middleware Interface(rmw)를 통해 DDS 구현체(e.g., eProsima Fast DDS, Cyclone DDS)를 추상화합니다.
- 사용자는 DDS의 복잡성을 이해하지 않고도 메시지 교환을 구현할 수 있습니다.
4) DDS 구현 계층(DDS Implementation Layer):
- ROS 2는 여러 DDS 구현체를 지원하며, 이는 퍼블리셔와 서브스크라이버 간의 메시지 전송을 처리합니다.
- eProsima Fast DDS, Eclipse Cyclone DDS, RTI Connext DDS 등이 대표적입니다.
5) 운영 체제 계층(OS Layer):
- Linux, Windows, macOS 등 다양한 운영 체제에서 동작합니다.
- ROS 2는 실시간성 요구사항이 있는 RTOS(Real-Time Operating System)도 지원합니다.
3. ROS 1과 ROS 2의 비교
ROS 1과 ROS 2의 주요 차이점은 미들웨어 계층에서 나타납니다:
- ROS 1:
- TCPROS/UDPROS를 사용하여 통신을 처리하며, 단일 ROS Master가 노드 간의 연결을 중개합니다.
- 중앙집중식 구조로 인해 확장성 및 분산 시스템에 제약이 있습니다.
- ROS 2:
- DDS 프로토콜을 채택하여 분산 시스템에서 노드 간의 직접적인 메시지 교환을 지원합니다.
- ROS Master가 제거되어 더 높은 확장성과 분산 처리 능력을 제공합니다.
4. DDS 기반 통신의 동작 원리
DDS(Data Distribution Service)는 퍼블리셔와 서브스크라이버 간의 통신을 처리하는 표준 프로토콜입니다. ROS 2에서 DDS는 다음과 같이 동작합니다:
- 퍼블리셔와 서브스크라이버 연결:
- 퍼블리셔는 데이터를 생성하고, 서브스크라이버는 이를 구독합니다.
- DDS는 데이터의 신뢰성, 순서 보장 등을 처리합니다.
- RTPS(Real-Time Publish-Subscribe):
- DDS의 하위 계층으로, 실시간 데이터를 전달합니다.
- UDP, TCP, SHM(Shared Memory)을 통한 전송을 지원합니다.
- DomainParticipant:
- 퍼블리셔와 서브스크라이버를 연결하는 중심 객체입니다.
- 같은 도메인 내의 노드들만 서로 통신할 수 있습니다.
결론
ROS 2는 DDS를 기반으로 설계되어, 더 높은 확장성과 실시간성을 제공합니다. 퍼블리셔-서브스크라이버 구조, 서비스, 액션, 파라미터를 통해 다양한 통신 요구사항을 처리할 수 있으며, ROS 1에 비해 분산 시스템 및 멀티플랫폼 지원이 강화되었습니다.
이 글을 통해 ROS 2의 아키텍처와 통신 방식을 이해하는 데 도움이 되길 바랍니다!
아래는 perplexity 로 찾아본 ROS2 구조와 통신방식을 조사해 본 것으로, 다양한 사이트들이 참조되어 있으니 , 더 자세히 알고 싶으신 분은 아래 링크를 타고 들어가서 더 많은 소스를 찾아보셔도 좋습니다.
영어로 되어 있으나, 크롬으로 들어가서 오른쪽 상단 점 세개(더보기란)에서 번역을 눌러 한국어로 번역해서 보시면 문제 없을겁니다.
https://www.perplexity.ai/page/ros2-tongsin-gyohwan-bangsig-rNC7GPK6Qqq5nNInK3u0Xg
ROS2 통신 교환 방식
ROS2 communication relies on a robust middleware architecture based on the Data Distribution Service (DDS) protocol. This design facilitates seamless...
www.perplexity.ai