ROS2의 node간 통신으로 DDS가 이용되고 있다.
앞으로 DDS란 무엇인지 또 어떻게 동작하는지에 대해 내가 이해한 부분을 정리해보겠다.
DDS(Data Distribution Service)란?
DDS는 OMG(Object Management Group)에서 정의한 machine-to-machine 통신 standard이다. DDS는 publish-subscribe pattern을 바탕으로 높은 실시간성/신뢰성/퍼포먼스(빠른 속도)등을 목표로 하고 있다.
DDS의 기본 communication model은 unidirection data exchange이다. data를 publish하는 쪽(DataWriter)에서 data를 subscribe하는 쪽(DataReader)으로 data update 정보를 push하는 것이다. 이러한 data flow는 QoS(Quality of Service)설정을 통해 최적화할 수 있다. DataWriter와 DataReader의 QoS 설정을 통해 최소한의 overhead로 빠르게 정보를 주고받을지 또는 신뢰성을 위해 fault-tolerance하게 정보를 주고받을지 설정한다.
또한 하나의 고장이 시스템 전체에 문제를 야기시키는 것을 피하기 위해 centralized name servers, centralized information brokers에 의존하지 않고, publisher가 실시간으로 subscriber의 존재를 발견하거나 subscriber가 실시간으로 publisher의 존재를 발견할 수 있는 discover 기능을 갖추고 있다.
위에서 나열한 특징 덕분에 DDS는 방산, 항공, 메디컬, 로봇 등 다양한 분야에서 사용되고 있다고 한다.
RTPS(Real Time Publish Subscribe)란?
DDS specification에는 네트워크에서 message 교환을 위한 transport protocol을 다루지 않는다. 하지만 점점 DDS의 사용이 증가함에 따라 여러 vender에서 DDS를 구현하였고, 다른 vender에서 구현된 DDS들끼리는 서로 통신을 할 수 없는 문제가 생겼다. 이러한 문제를 해결하기 위해 표준 wire-protocol을 정의하는 것이 필요해 졌다. 이 필요에 의해 DDS의 표준 wire-protocol로 선정된 것이 RTPS이다.
RTPS는 industrial automation community에서 산업자동화를 위해 정의한 protocol이었다. (이미 산업용 디바이스에서 세계적으로 많이 사용되고 있는 검증된 방식이다.) RTPS는 DDS의 타겟 application domain 중 하나인 data-distribution system의 요구사항을 만족하기 위해 특별히 정의되어 있었으므로 DDS의 hehavior architecture와 RTPS 사이에 유사한 점이 많았다. 아래 RTPS 특징을 보면 위에 DDS에서 설명했던 부분들이 RTPS의 특징으로도 나오는 것을 볼 수 있다.
- QoS 설정 : 표준 IP 네트워크에서 best-effort와 reliable publish subscribe 통신 선택 가능.
- Fault tolerance : single points failure에도 네트워크 구성 가능.
- Extensibility : 프로토콜을 새로운 서비스로 확장시킬 수 있음.
- Plug-and-play : 새로운 application이나 service가 자동으로 discover되고 네트워크에 연결 됨.
- Scalability : 매우 큰 네트워크로 시스템을 확장할 수 있음.
- Type-safety : application의 programming 에러가 remote 노드들을 손상 시키지 못하게 함.
Summary
아래는 대표적인 DDS 중 하나인 Fast DDS의 layer model이다.
그림에서 보는 것과 같이 DDS 서비스를 위한 lower-level에 RTPS layer가 있는 것을 볼 수 있다.
- DDS Layer : DDS specification을 만족하기 위한 publish/subscribe communication이 구현된 high-lever Layer.
- RTPS Layer : DDS의 서비스(discover, data update정보 push 등등)를 위해 RTPS에서 정의된 message 구조와 컨텐츠를 활용하여 DDS의 DataWriter와 DataReader가 서로 이해할 수 있는 메세지를 교환하는 low-level Layer.
2022.02.05 - [Robotics/ROS] - DDS RTPS의 구조(structure)와 메세지(message)
2022.02.11 - [Robotics/ROS] - DDS RTPS의 동작(behavior)
2022.02.12 - [Robotics/ROS] - DDS RTPS의 Discovery Protocol
2022.03.01 - [Robotics/ROS] - DDS RTPS 패킷 확인해보기 (wireshark)
References
'Robotics > ROS' 카테고리의 다른 글
DDS RTPS 패킷 확인해보기 (wireshark) (0) | 2022.03.01 |
---|---|
DDS RTPS의 Discovery Protocol (1) | 2022.02.12 |
DDS RTPS의 동작(behavior) (1) | 2022.02.11 |
DDS RTPS의 구조(structure)와 메세지(message) (0) | 2022.02.05 |
ROS 2 설치 (Windows WSL 이용) (0) | 2022.02.03 |