-
ROS2 DDS (Data Distribution Service)ROS/ROS2 2025. 1. 6. 19:26
1. DDS (Data Distribution Service)
ROS2를 접하면서 DDS에 대해 처음 접하는 분들이 많을거라 생각한다..
DDS(Data Distribution Service) 데이터 분산 서비스는 Middleware로 실시간 시스템에서 다음을 가능하게 해준다.
- Real-time (실시간성)
- Scalable (규모가변성)
- Dependable (안전성)
- High Performance (고성능)
ROS2에서는 DDS를 사용하여 통신을 주고받게 된다.
ROS를 하며 DDS에 대해 너무 자세히 알 필요는 없을 것 같다.
지금은 그저 데이터 통신을 위한 미들웨어로 생각하면 좋을것 같고 우리는 이를 통해서 ROS1보다 향상된 데이터 송수신을 할 수 있다고 생각하면 좋을 것 같다.
위의 그림을 보면 미들웨어는 OSI 7 계층(Open Systems Interconnection) 레이어에서 Host Layer(호스트 계층)에 해당되는 4 ~ 7 계층에 해당이 되고 ROS2에서는 운영체제와 사용자 애플리케이션 사이의 Software Layer(소프트웨어 계층)으로 이를 통해 시스템의 다양한 구성 요소를 보다 쉽게 통신하고 데이터를 공유 할 수 있게 된다.
2. ROS2 and DDS
ROS는 프로그램의 재사용성을 극대화하기 위해 최소 단위의 실행 가능한 프로세서인 Node(노드) 단위의 프로그램을 작성하게 된다. 하나 이상의 노드들을 Pakage(패키지) 라고 하며, 이 패키지들의 집합을 Metapackage(메타패키지) 라고 한다.
ROS는 수많은 노드들이 연동되고 각 노드들끼리 입출력 데이터를 주고 받게 된다.
ROS에서는 다양한 데이터의 구조들을 주고 받고 Topic, Service, Action, Parameter의 형태로 통신 방법이 다르다.
각각 목적이 다르기는 하지만, 각 노드에서 토픽의 Publisher(발행)와 Subscriber(구독)의 개념을 응용한다.
기존 ROS1에서는 자체 개발한 TCPROS와 같은 통신 라이브러리를 사용하였지만, ROS2에서는 OMG(Object Management Group)에 의해 표준화된 DDS(Data Distribution Service)의 Real Time Publish Subscribe protocol인 DDSI-RTPS를 사용하고 있다. 이는 상업적인 용도로 ROS를 사용할 수 있게 만드는데 도움을 주었다.
DDSI-RTPS는 실시간 데이터 전송을 보장하고, 임베디드 시스템에도 사용할 수 있게 되었다. DDS는 노드간의 동적 검색 기능을 지원하고 있어서 기존 ROS1에서는 Master가 ROS의 노드 정보들을 관리하였지만, 이제 Master가 없이 여러 DDS 프로그램 간에 통신이 가능하다. 각 노드들은 데이터 통신을 세부적으로 조정하는 QoS(Quality of Service)를 매개 변수 형태로 설정할 수 있어서 TCP처럼 데이터 손실을 방지하여 신뢰도를 높이거나, UDP처럼 통신 속도를 최우선시하여 사용할 수 있다.
또한, DDS-Security 도입으로 보안 측면에도 큰 혜택을 얻을 수 있다.
즉, 기존 ROS1의 통신에서 실시간성, 불완전성, 보안 등이 강화되었다.
3. DDS의 특징
- Industry Standards (산업 표준)
- ROS2에서 DDS의 사용으로 더 넓은 범위의 분야에서 사용 가능.
- OS Independent (운영체제 독립)
- Linux, Windows, macOS, Android 등 다양한 운영체제를 지원.
- 운영체제 변경이 불필요하며 ROS2의 멀티 운영체제 지원 컨셉에 적합.
- Language Independent (언어 독립)
- rclcpp, rclc, rclpy, rcljava, rclobjc, rclada, rclgo, rclnodejs등 다양한 프로그래밍 언어를 지원. (rcl은 ROS Client Library) (그림 4)
- Transport on UDP/IP (UDP 기반의 전송 방식)
- DDS 벤더 별로 DDS Interoperability Wire Protocol (DDSI-RTPS)의 구현 방식에 따라 상이할 수 있으나 일반적으로 UDP 기반의 신뢰성 있는 멀티캐스트 (Reliable multicast)를 구현하여 시스템이 최신 네트워킹 인프라의 이점을 효율적으로 활용할 수 있도록 돕고 있음.
- 기존 ROS1에서 TCPROS가 TCP기반이었던 것에 비해 매우 큰 변화인데 UDP의 멀티캐스트(Multicast)는 브로드캐스트(Broadcast)처럼 여러 목적지로 동시에 데이터를 보낼 수 있지만, 불특정 목적지가 아닌 특정된 도메인 그룹에 대해서만 데이터를 전송.
- UDP: Best effort
- TCP: Reliable
- 참고: 일부 RMW기능에는 TCP 기반으로 구현되는 경우가 있음.
- Data Centricity (데이터 중심적 기능)
- Data Centricity는 DDS를 사용하며 가장 많이 듣는 말.
- 적절한 수신자에게 적절한 정보를 효율적으로 전달하는 것을 목표료 하는 pub & sub 방식.
- 사용자 입장에서 DDS Middleware를 본다면, 어떤 데이터인지, 이 데이터가 어떤 형식인지, 이 데이터를 어떻게 보낼 것인지 어떻게 안전하게 보낼것인지에 대한 기능이 DDS 미들웨어에 녹아 있음. (그림 5)
- Dynamic Discovery (동적 검색)
- DDS 동적 검색을 통해 어떤 토픽이 지정 도메인 영역에 있으며 어떤 노드가 이를 발신하고 수신하는지 알 수 있음.
- IP주소 및 포트를 미리 입력하거나 구성하지 않아도 됨.
- ROS1의 경우 Master가 죽으면 모든 시스템이 마비가 되었지만, DDS는 각 노드들이 독립 실행되기 때문에 안정성 확보.
- Scalable Architecture (확장 가능한 아키텍처)
- 다양한 시스템으로의 확장이 가능. (다양한 분야에서 사용 가능.)
- Interoperability (상호 운영성)
- DDS의 표준 사양을 지키고 있다면 각 회사의 제품 사용이 가능.
- 혼용 사용 가능. (상호 통신 지원) 통신이 불안정한 경우도 존재.
- Quality of Service (QoS: 서비스 품질)
- 데이터 송수신 관련 설정을 유저가 목적에 맞춰서 설정이 가능.
- Reliable: 신뢰도.
- Best effort: 빠른통신속도.
- History: 정해진 사이즈 만큼의 데이터 보관.
- Durability: 데이터를 수신하는 subscriber가 생성되기 전의 데이터를 사용할지 폐기할지.
- Deadline: 정해진 주기 안에서 데이터가 발신 및 수신되지 않을 경우 이벤트 함수를 실행.
- Lifespan: 정해진 주기 안에서 수신되는 데이터만 유효 판정하고 그렇지 않은 데이터는 삭제.
- Liveliness: 정해진 주기 안에서 노드 혹은 토픽의 생사를 확인.
- Security (보안)
- ROS1에서 보안은 가장 큰 이슈였지만, ROS2에서 DDS를 사용함으로써 DDS-Security라는 DDS 보안 사양을 ROS에 적용하여 해결이 되었다.
ref:
https://huimang2.github.io/etc/iso-standard-7498
https://dl.acm.org/doi/10.1145/2968478.2968502
https://www.dds-foundation.org/what-is-dds-3/
https://docs.ros.org/en/jazzy/Installation/DDS-Implementations.html
https://github.com/ros2/ros_core_documentation/blob/master/source/developer_overview.rst
https://cafe.naver.com/openrt/24031
'ROS > ROS2' 카테고리의 다른 글
ROS2 Service 기초 사용법 (0) 2025.01.13 ROS2 Topic 기초 사용법 (0) 2025.01.08 ROS2 Node 기초 사용법 (0) 2025.01.07 ROS2 유용한 명령어 (0) 2025.01.07 _ROS2_Robot Operating System2 (0) 2024.05.24