이전 시간에 DDS RTPS의 특징으로 publisher가 실시간으로 subscriber의 존재를 발견하거나 subscriber가 실시간으로 publisher의 존재를 발견할 수 있는 discover 기능을 갖추고 있다는 점을 언급었했다. 이번 시간에 어떻게 RTPS participant(ROS node)가 네트워크 상에 다른 participant(ROS node)를 찾고 매칭되는 endpoints(publisher 또는 subscriber)를 찾는지 알아보겠다.
Discovery Protocol의 종류
discovery protocol은 PDP와 EDP라는 두 개의 독립적인 protocol로 나뉘게 된다. 먼저, PDP(Participant Discovery Protocol)를 통해 participaint는 네트워크상의 다른 participant를 찾고, EDP(Endpoint Discovery Protocol)를 통해 participant의 endpoint 정보를 주고 받는다.
vendor에 따라 다양한 PDP와 EDP를 지원할 수 있는데, vendor간 호환성을 위해 모든 RTPS는 SPDP(Simple Participant Discovery Protocol)와 SEDP(Simple Endpoint Discovery Protocol)를 필수로 지원해야한다.
SPDP(Simple Participant Discovery Protocol)
네트워크 상에서 participant를 찾기 위해 built-in endpoint(paricipant writer, participant reader)와 pre-defined topic을 이용한다.
- built-in participant writer : 네트워크상에 participant가 존재함을 알리기 위해 주기적으로 announcement(participant의 정보)를 송신한다. announcement는 multicast를 통해 전송되는 것이 default 설정이다. (네트워크에 존재 가능한 participant들의 list를 만들어 unicast로 전송할 수도 있다.)
- built-in participant reader : remote participant로부터 announcement를 수신하고, remote-participant의 address/port 정보를 얻는다.
SEDP(Simple Endpoint Discovery Protocol)
PDP를 통해 얻은 participant의 address/port 정보를 이용하여 (unicast로) endpoint 정보를 주고 받고, 매칭되는 endpoint를 찾는다. 이 때 built-in publication writer/reader 와 built-in subscription writer/reader가 이용된다.
- built-in publication writer : participant 내의 모든 writer들의 topic, data type, QoS 설정 등 정보를 송신한다.
- built-in publication reader : remote participant로부터 writer들의 topic, data type, QoS 설정 등 정보를 수신하고, reader와 매칭되는 remote-writer가 있는지 확인한다. stateful reader와 매칭이 되면 proxyWriter를 생성한다.
- built-in subscription writer : participant 내의 모든 reader들의 topic, data type, QoS 설정 등 정보를 송신한다.
- built-in subscription reader : remote participant로부터 reader들의 topic, data type, QoS 설정 등 정보를 수신하고, writer와 매칭되는 remote-reader가 있는지 확인하다. stateless writer와 매칭이 되면 ReaderLocator, stateful writer와 매칭이 되면 proxyReader를 생성한다. writer가 user-traffic을 송신할 때, 이 때 생성된 ReaderLocater, proxyReader를 참조하여 remote-reader에게 메세지를 송신한다.
DDS RTPS의 well-know UDP/IP 설정
DDS RTPS에서 discovery과정에서 어떤 address와 port를 사용해지는 plug-and-play를 위해서 미리 정의된 rule 따라야 한다. 사용자가 별도의 설정을 하지 않는다면, SPDP에서 multicast의 address로 239.255.0.1 을 사용하고 아래 port 설정 rule을 따른다.
Summary
DDS RTPS에서 어떻게 실시간으로 participant를 찾고 매칭되는 endpoint를 찾는지 알아보았다.
participant는 생성 시 그리고 주기적으로 미리 정의한 rule에 따라 multicat로 자신의 존재를 네트워크로 알린다.
다른 participant는 이 때 얻은 address/port 정보를 이용하여 서로 writer/reader의 topic, data type, Qos 정보 등을 주고 받고, 매칭되는 endpoint를 찾아 ReaderLocator/proxyReader/proxyWriter 에 기록해 둔다.
user-traffic을 주고 받을 때는 이 때 ReaderLocator/proxyReader/proxyWriter에 기록된 정보 활용하게 된다.
References
'Robotics > ROS' 카테고리의 다른 글
DDS RTPS 패킷 확인해보기 (wireshark) (0) | 2022.03.01 |
---|---|
DDS RTPS의 동작(behavior) (1) | 2022.02.11 |
DDS RTPS의 구조(structure)와 메세지(message) (0) | 2022.02.05 |
DDS와 RTPS 개념정리 (0) | 2022.02.04 |
ROS 2 설치 (Windows WSL 이용) (0) | 2022.02.03 |