Bleeding edge

ROS 2 통신의 기반, DDS(Data Distribution Service)란 본문

CS

ROS 2 통신의 기반, DDS(Data Distribution Service)란

codevil 2025. 8. 10. 19:41

1. DDS란 무엇인가?

DDS(Data Distribution Service)는 분산 시스템에서 데이터를 효율적이고 신뢰성 있게 주고받기 위한 퍼블리시–서브스크라이브(Pub-Sub) 기반 미들웨어 표준입니다.
ROS 2는 노드 간 통신을 위해 DDS를 기본 기반 기술로 사용합니다.

기존 TCP/UDP 소켓 통신과 달리, DDS는 단순 데이터 송수신을 넘어 다음 기능을 제공합니다.

  • QoS(Quality of Service) 설정
    • 신뢰성, 지연 허용 범위, 데이터 유지 기간 등을 설정 가능
  • 자동 Discovery
    • 네트워크에 새로운 참여자(Participant)가 나타나면 자동으로 연결
  • 멀티캐스트 / 유니캐스트 지원
  • 보안 기능 (암호화, 인증)
  • 실시간 데이터 전송을 위한 최적화

 

2. DDS의 주요 구현체 종류

DDS는 OMG(Objects Management Group)가 정의한 표준이므로, 다양한 구현체가 존재합니다. ROS 2에서는 이 중 몇 가지를 선택적으로 사용합니다.

구현체특징라이선스
Fast DDS (eProsima) ROS 2에서 널리 사용, 속도 빠름, 설정 유연 Apache 2.0
Cyclone DDS (Eclipse) 안정성, 낮은 지연, ROS 2 Humble 이후 기본 채택 EPL 2.0
RTI Connext DDS 상용, 고성능, 산업·항공·의료 분야 상용
GurumDDS 한국 개발, 소형 디바이스 최적화 상용(커뮤니티 버전 있음)
OpenDDS 오픈소스, CORBA 기반, ROS 2에서는 드물게 사용 Apache 2.0

 

3. DDS 동작 구조

DDS의 핵심 개념은 데이터 중심 통신입니다.

  1. Domain
    • 통신 그룹을 구분하는 논리적 영역
  2. Participant
    • Domain에 참여하는 애플리케이션 단위
  3. Publisher / Subscriber
    • 데이터를 송신하는 Publisher와 수신하는 Subscriber
  4. DataWriter / DataReader
    • Publisher와 Subscriber 내부에서 실제 데이터 전송을 담당
  5. Topic
    • 데이터의 이름과 타입 정의


출처: eProsima Fast DDS Docs


4. OS별 ROS 2 기본 DDS 설정

ROS 2는 OS와 배포판(Distro)에 따라 기본 DDS 구현체가 다릅니다.
기본값은 RMW_IMPLEMENTATION 환경 변수로 확인할 수 있습니다.

OS / Distro기본 DDS
리눅스 (Humble 이후) Cyclone DDS (rmw_cyclonedds_cpp)
리눅스 (Foxy, Galactic 등) Fast DDS (rmw_fastrtps_cpp)
MacOS Cyclone DDS
Windows Fast DDS

 

5. 마무리

최근에 DDS 관련 이슈가 많아서, DDS에 대해 간단히 정리하였다. 

'CS' 카테고리의 다른 글

유무선 네트워크 본딩 설정 방법 (Bonding)  (0) 2025.02.25
zsh: command not found: code - 해결방법  (0) 2023.06.15
CORS  (0) 2022.09.01
FE interview  (0) 2022.07.21
stack 2개로 queue를 구현하는 방법을 설명해주세요  (0) 2022.07.08