[DDS] DDS와 RTPS
잡설
Micro-ROS 때문에 DDS도 공부하게 되네요. 🤨
Micro-ROS는 일반적인 DDS 말고 DDS-XRCE(eXtremely Resource Constrained Environments DDS)라는 리소스가 제한된 환경에서 사용하는 DDS가 사용합니다.
마이크로로스에서 발생하는 문제를 다루기 위해서는 DDS-XRCE를 이해해야하는데, 그것에 앞서 일반적인 DDS를 다루어보겠습니다.
(Micro-ROS는 eProsima의 Micro XRCE-DDS를 사용합니다. eProsima는 ROS2에 기본DDS인 FAST-DDS를 만든 곳입니다.)
시작
아마 ROS2로 넘어오면서 가장 당황스러울 것이 ROS1에 없었던 DDS일 것입니다.
ROS1이 실제 산업에서 쓰기에 부적합했기 때문에, 안정성이나 보안 등을 고려해 DDS라는 데이터 분산 시스템을 ROS2에서 쓸 수 있도록 가져왔습니다.
DDS(Data Distribution Service)
Data Distribution Service의 약어입니다.
Machine-to-Machine 통신 표준으로서, ROS처럼 발행-구독 시스템으로, 데이터를 읽기/쓰기할 수 있도록 도와줍니다.
가장 큰 특징으로 QoS(Quality of Service)입니다.
이는 데이터 통신에서 전달신뢰성을 중요시할것인지 아니면 속도를 중요시할 것인지를 사용자가 설정할 수 있도록 합니다.
기본적으로는 UDP와 같이 단방향 데이터 교환방식을 채택합니다.
DDS의 특징은 다음과 같습니다.
- 퍼블리시/서브스크라이브 모델 : ROS가 채택한 모델과 유사합니다. 데이터를 Pub-Sub하는 시스템을 사용합니다.
- 퍼포먼스 : pub/sub모델 채택으로 request/reply 모델에 비해 지연시간이 적고 단위 시간당 데이터 처리량이 높습니다. 이에 리얼타임 퍼포먼스가 가능해진 환경을 가지게 됩니다. 그렇다고 리얼타임이 자동으로 지원되는 거은 아닙니다. 환경이 되었을 뿐.
- Automatic Discovery of remote participants(Dynamic Discovery): Remote participants(따로 생성된 노드들이라 생각하면 쉽습니다.)의 연결을 좀 더 쉬워졌습니다. Discovery Protocol을 사용하여 퍼블리셔들이 서브스크라이버들의 존재를 파악하고 각 노드들이 서로 매칭합니다. 이로 ROS2에서는 ROS Core가 사라졌습니다.
- QoS 파라미터 : reliability, persistence, redundancy, lifespan, transport settings, resources등, 통신에 있어 여러 설정값 변경이 가능해졌습니다.
RTPS(Real Time Publish Subscribe)
Real Time Publish Subscribe의 약어입니다.
DDS가 제조사마다 다를 경우 다른 DDS 간 통신이 안될 수가 있는데,
이를 방지하기 위해 브릿지 역할격인 표준적인 wire-protocol로서 RTPS라는 것을 만들었습니다.
RTPS를 통해 ROS2의 best-effort 혹은 reliable pub-sub이 가능해지고 또 QoS의 성질을 가지게 됩니다.
RTPS의 특징으로 아래의 것들이 있습니다.
- QoS: best-effort(데이터 속도 우선) vs Reliable(데이터 신뢰성 우선) QoS 설정이 가능해졌습니다.
- Fault tolerance : Single Point of Failure이 없는 네트워크를 만들 수 있습니다.
- 확장성 : 프로토콜을 새 서비스로 확장 시킬 수 있습니다.
- 플러그 앤 플레이 : 새 애플리케이션과 서비스가 설정없이 자동으로 탐색되고 연결됩니다.
- 설정가능성 : 각 데이터 전달 처리에서 중요성을 속도인지 신뢰성인지 그 중심 정도를 설정 가능합니다.
- 모듈화 : 각 디바이스들이 하위 프로토콜을 꾸릴 수 있게 하며, 마찬가지로 Pub-Sub 네트워크에 참여할 수 있게 합니다.
- 확장성 : 시스템들을 대규모 pub-sub 네트워크로 확장할 수 있도록 합니다.
- Type-safety : 어플리케이션 프로그래밍 에러가 리모트 노드들의 손상을 방지해줍니다
요약
여기까지 내용을 요약해서 말하면,
1) ROS2는 DDS를 사용하고,
2) DDS는 서로 다른 공급사의 DDS 간의 데이터 처리를 하기 위해 RTPS라는 것 위에 지어져있고
3) RTPS는 QoS 등과 같은 특징을 가지는데,
4) 이에 ROS2의 통신의 특징은 RTPS의 것을 가진다.
라는 것입니다.
ROS2 Node와 DDS 연결 짓기
우리가 ROS2에서 Node를 생성 코드를 작성하게 되면, 이를 DDS에서는 RTPS를 이용하여 Participant라는 엔티티를 만듭니다.
여기서 엔티티는 QoS를 설정할 수 있고, Status 값을 가지는 객체를 일컫는데, DDS에서는 DomainParticipants, Topics, Publishers, DataWriters, Subscribers, DataReaders 들을 전부 엔티티라 부릅니다.
Node에 Publisher를 생성하게 되면 Participant(Node)는 Publisher 엔티티를 만들게 되고
Publisher 엔티티는 DataWriter엔티티를 생성합니다.
반대로
Node에 Subsccriber를 생성하게 되면 Participant(Node)는 Subscriber 엔티티를 만들게 되고
Subscriber 엔티티는 DataReader 엔티티를 생성합니다.
아래 사진은 마이크로 로스의 에이전트 실행시 나타나는 로그 기록입니다.
일반 DDS가 아닌 DDS-XRCE지만, 로그를 통해 DDS 내에서의 엔티티들의 생성과정을 살필 수 있습니다.
위 사진은 Publisher 하나를 가진 예제 노드입니다.
우선 Participant를 생성하고, 그 뒤로 토픽(reader와 writer간 교환될 RTPS Message)과 publisher, datawriter 순으로 생성하는 것을 볼 수 있습니다.
반대로 Subscriber 하나를 가진 예제 노드 생성이며, Topic, subscriber, datareader 엔티티가 생성되는 것을 볼 수 있습니다.
참고 자료
RTI Connext DDS
Your search for returned result(s).
community.rti.com
2) https://lab-notes.tistory.com/entry/DDS-DDS와-RTPS-개념정리
DDS와 RTPS 개념정리
ROS2의 node간 통신으로 DDS가 이용되고 있다. 앞으로 DDS란 무엇인지 또 어떻게 동작하는지에 대해 내가 이해한 부분을 정리해보겠다. DDS(Data Distribution Service)란? DDS는 OMG(Object Management Group)에..
lab-notes.tistory.com
3) https://cafe.naver.com/openrt/18756
[ROS2] DDS와 UDP(Unicast, Multicast)
DDS와 UDP Unicast, Multicast Created Date: 2018.07.25Modified Date: 2018.07.25revision 1키워드: DDS, ...
cafe.naver.com
4) https://fast-dds.docs.eprosima.com/en/latest/fastdds/dds_layer/dds_layer.html
3. DDS Layer — Fast DDS 2.8.0 documentation
© Copyright 2019, eProsima. Revision f5486def.
fast-dds.docs.eprosima.com