ROS(Robot Operating System)는 로봇 소프트웨어 개발에 가장 널리 사용되는 프레임워크입니다.
초기 ROS1은 자체 개발된 네트워크 프로토콜(TCPROS, UDPROS)을 사용했지만, ROS2로 넘어오면서 신뢰성과 확장성이 높은 DDS(Data Distribution Service)라는 표준 미들웨어를 채택하였습니다.
1. DDS란?
DDS(Data Distribution Service)는 OMG(Object Management Group)라는 표준화 단체에서 제정한 데이터 중심(Data-centric)의 분산 통신 미들웨어 표준입니다.
간단히 말해, DDS는 서로 다른 여러 개의 컴퓨터나 프로세스가 데이터를 효과적으로 공유하고 전달하도록 도와주는 소프트웨어 레이어입니다. DDS는 특히 다음과 같은 분야에서 활발히 사용됩니다.
- 항공, 자동차 등 미션 크리티컬(Mission-Critical) 시스템
- 자율주행 차량, 드론, 스마트 팩토리 등 실시간 통신이 중요한 분야
- 복잡한 분산 시스템의 데이터 공유 환경
DDS가 가진 특징들은 다음과 같습니다.
- 데이터 중심(Data-centric) 설계
- 발행-구독(Publish-Subscribe) 모델
- 분산형 구조 (마스터 노드가 필요 없음)
- 실시간성과 고신뢰성 보장 (QoS: Quality of Service)
2. DDS를 구성하는 핵심 개념들
DDS를 이해하려면 다음의 개념을 먼저 숙지해야 합니다.
① 데이터 중심(Data-centric) 모델
DDS에서는 시스템이 전송하는 데이터 자체에 집중합니다. 노드 간에 전송되는 데이터는 Topic이라는 개념으로 정의되며, Topic은 데이터 유형과 이름으로 구별됩니다.
- 예를 들어, 자율주행 차량의 LiDAR 데이터는 /lidar_points라는 Topic으로 발행될 수 있습니다.
- 각 노드는 특정 Topic의 발행자(Publisher) 또는 구독자(Subscriber)로서 참여합니다.
② 발행-구독(Publish-Subscribe) 통신 방식
DDS는 메시지 전송을 위해 "발행-구독 모델"을 사용합니다.
- Publisher(발행자)는 Topic 데이터를 네트워크에 전송합니다.
- Subscriber(구독자)는 관심 있는 Topic 데이터를 구독하고 받아 처리합니다.
- 중간에 메시지를 관리하는 마스터 서버가 필요 없으며, 메시지는 DDS 미들웨어가 자동으로 적절한 구독자에게 전달합니다.
③ QoS(Quality of Service) 설정
DDS의 큰 장점 중 하나는 QoS를 통해 데이터를 주고받을 때의 서비스 품질을 조정할 수 있다는 것입니다. 주요 QoS 정책은 다음과 같습니다.
- Reliability(신뢰성):
- Reliable(신뢰성 보장): 손실 없는 메시지 전달 보장
- Best-effort(최선의 노력): 속도를 우선시하며, 일부 데이터 손실을 허용
- Durability(지속성):
- Volatile(휘발성): 발행 시점 이후 구독한 Subscriber는 이전 데이터를 받을 수 없음
- Transient Local(일시적 로컬 저장): 과거 데이터를 일정 시간 보관하여 나중에 구독한 Subscriber도 수신 가능
- History(이력):
- KEEP_LAST(n): 최근 n개의 데이터만 저장 및 전송
- KEEP_ALL: 모든 데이터를 저장하고 전송
이러한 QoS 설정을 통해 사용자는 자신이 설계하는 시스템의 요구사항에 따라 유연하게 통신 품질을 조정할 수 있습니다.
3. ROS2가 DDS를 선택한 이유
ROS1은 자체적으로 개발한 TCPROS, UDPROS 등 프로토콜을 사용했습니다. 하지만 다음과 같은 한계점이 있었습니다.
- 마스터 노드(roscore)에 대한 의존성
- 낮은 실시간성 및 확장성 한계
- 고신뢰성 및 실시간 제어 응용에 적합하지 않음
이러한 문제를 해결하기 위해 ROS2에서는 DDS라는 표준 미들웨어를 도입했습니다. DDS를 통해 ROS2는 다음과 같은 장점을 얻게 되었습니다.
- 분산형 네트워크 구조: 마스터 노드가 없어지면서 네트워크 장애 시 시스템 전체가 다운되는 위험성 감소
- QoS를 통한 유연성: 다양한 QoS 설정을 통해 실시간성과 신뢰성 높은 시스템 구성 가능
- 표준 미들웨어 사용: 기존 DDS 솔루션과 호환이 가능하여 다양한 산업 분야에서 바로 적용할 수 있는 수준의 안정성 확보
4. ROS2에서 DDS의 실제 동작 과정 이해하기
ROS2에서 DDS는 아래와 같이 동작합니다.
(1) Topic 정의
사용자는 메시지 타입을 미리 정의하고 Topic 이름을 지정합니다.
예:
- Topic 이름: /camera_image
- Topic 데이터 타입: sensor_msgs/msg/Image
(2) Node 간 Topic 통신 설정
각 노드는 특정 Topic을 발행(Publish)하거나 구독(Subscribe)합니다.
- 노드 A: /camera_image Publisher → 이미지를 발행
- 노드 B: /camera_image Subscriber → 이미지를 받아서 처리
(3) DDS 미들웨어의 역할
DDS 미들웨어는 내부적으로 다음 작업을 수행합니다.
- Topic에 따라 자동으로 Publisher와 Subscriber 간의 연결 관리
- 데이터의 QoS 조건을 비교하고 최적의 연결을 설정
- 네트워크 상태 변화 시 연결 자동 관리(자동 재연결 등)
- 실시간으로 데이터를 주고받으며 QoS 설정에 따라 데이터 처리
사용자는 통신 연결이나 관리를 신경 쓰지 않고 데이터 발행 및 구독에만 집중하면 됩니다.
5. ROS2에서 사용할 수 있는 DDS 구현체
DDS는 표준이기 때문에 여러 회사가 구현체를 제공합니다. ROS2에서는 주로 다음 DDS 구현체들을 사용할 수 있습니다.
- Fast DDS (eProsima) : ROS2의 기본(Default) DDS
- Cyclone DDS (Eclipse) : 가볍고 성능이 뛰어나 점차 많이 사용되는 DDS
- RTI Connext DDS : 산업 현장에서 주로 사용되는 고성능 유료 DDS 솔루션
사용자는 목적에 따라 DDS 구현체를 자유롭게 선택하여 사용할 수 있습니다.
마무리
DDS는 ROS2가 기존 ROS1의 한계를 극복하고 실시간성과 신뢰성을 갖춘 로봇 소프트웨어를 개발할 수 있도록 만들어 준 핵심 기술입니다.
ROS2를 제대로 사용하려면 DDS의 구조와 QoS 설정을 잘 이해하고 있어야 합니다. 이를 통해 개발자는 보다 강력하고 안정적인 분산 로봇 시스템을 설계하고 구현할 수 있습니다.
본 포스팅을 통해 ROS2의 핵심 기술인 DDS를 이해하고, 이를 효과적으로 활용하는 데 조금이라도 도움이 되었길 바랍니다.
감사합니다.
'ROS2' 카테고리의 다른 글
[ROS2] ros2 bag 명령어 사용법 (1) | 2025.01.15 |
---|---|
[ROS2] Nav2란? (4) | 2024.09.09 |
[ROS2] Topics, Services, Actions 차이 (0) | 2024.06.11 |
ROS2 - mcap이란? (0) | 2024.06.10 |