Engineering/ROS

ROS2, DDS와 QoS

luckydipper 2025. 1. 4. 22:09

1. DDS(Data Distribution Service) 정의

OMG [각주:1]에서 표준화한 middle ware[각주:2] 서비스이다. 즉, middle ware(프로세스) + 프로토콜(통신규약, API)이 DDS이다. ROS2에서는 DDS의 RTPS (Realtime Publish Subscribe)를 사용한다. Open source로는 Fast DDS와 Cyclone DDS(Eclipse Foundation)가 있고 사설 DDS를 활용하면 고성능 네트워킹이 가능하다. Gurum DDS(GurumNetwork)은 국내 자체 개발 DDS다. ROS2에서 노드들은 DDS(Data Distribution Service)에 참여한다.

1.1 DDS 4가지 특징

  1. IDL(Interface Description Language)를 활용하여 메세지 정의 및 직렬화[각주:3]를 더 쉽게 가능하다.
    ROS1의 (msg src action)와 비슷하다.
  2. DCPS(Data centric publish subscribe) DLRL(Data Local Reconstruction Layer)를 추가해 DDSI-RTPS embedded protocol을 만들 수 있다.
    즉, 데이터 중심적 설계를 한다. 데이터가 어떤 형식이고, 어느 시간 동안 저장되고 처리 돼야 하는지에 관해 QoS에 서술한다. 아래 그림을 참고.
  3. Dynamic Dicovery(동적검색)로 DDS 미들웨어를 통해 노드 간 검색이 가능하다.
    토픽에 이름(domain)을 부여해 누가 발신하고 수신 하는지 분리 가능하다. 어떤 노드가 이를 발신하고 수신하는지 알 필요가 없다. 즉, ROS1의 master node가 필요 없어졌다. 노드들의 IP 및 포트를 미리 입력할 필요 없다.
  4. Qos(Quality of Security) 항목 22가지 성능과 안정성의 사이에서 절충안을 찾는다. Publish와 Subscribe에 사용가능하다.

1.2 QOS : DDS에서 성능을 우선 할 것인지, 보안을 우선시 할 것인지 

TCP vs UDP (Reliability설정, RELIABLE vs BEST_EFFORT)
- History: 통신 상태에 따라 queue 얼마나 보관할지
- Duration: 얼마나 되면, 발신되기 전 데이터를 폐기 할지
- Deadline: 주기 안에 데이터가 발신 및 수신이 안될 경우 일어나는 이벤트
- Lifespan: 수신될 때 어떤 주기 안에 들어와야 한다
- Liveliness: Node 생사확인

1.3 코딩

  1. RMW_ENVIRONMENT 환경변수를 통해 DDS의 종류를 정할 수 있다.
export RMW_IMPLEMENTATION = 
rmw_connext_cpp
rmw_cyclonedds_cpp
rmw_fastrtps_cpp
rmw_gurumdds_cpp

//talker listerner 두개 env 달라도 가능하다.
  1. Domain으로 원하는 Node끼리 통신 가능하다.
    UDP multicast이기 때문에 도메인 내에 모든 네트워크 연결 된다. DDS domain이나 ros namespace를 변경한다.
export ROS_DOMIAN_ID= int[0,101]
//같은 domain끼리만 통신 가능하다. 
  1. rmw_qos_profile
    목적에 따라 많이 사용하는 6가지 QOS.
      Default Sensor Data Service Action Satatus Parameter Parameter Events
    Reliability RELIABLE BEST_EFFORT RELIABLE RELIABLERELIABLE RELIABLE  
    History KEEP_LAST KEEP_LAST KEEP_LAST KEEP_LAST KEEP_LAST KEEP_LAST
    Depth(History Depth) 10 5 10 1 1,000 1,000
    Durability VOLATILE VOLATILE VOLATILE TRANSIENT LOCAL VOLETILE VOLETILE

VOLATILE은 LISTEN이 시작한 후부터 subscriber에서 저장한다는 뜻이다.

ref.

https://www.dds-foundation.org/what-is-dds-3/
https://en.wikipedia.org/wiki/Data_Distribution_Service
ROS2로 시작하는 로봇 프로그래밍

  1. Object Management Group (객체 관리 그룹)은 UML, CORBA(Common Object Request Broker Architecture) 등도 표준화했다. [본문으로]
  2. Middle ware란 OS와 application 사이에서 통신을 시켜주는 프로그램이다. 많은 미들웨어가 네트워크 프로그래밍으로 구현된다. 서로 다른 OS에서 다양한 기기들이 다양한 언어로 프로그래밍 해 통신 해주는 프로그램이다. 대표적으로 DB, web server, DDS 등이 있다. [본문으로]
  3. 직렬화 Serialization은 RAM에 있는 Object 들을 Stream으로 Storage에 저장하는 것을 의미한다. [본문으로]

'Engineering > ROS' 카테고리의 다른 글

ROS2 Node Interface, Parameter, Namespace  (0) 2025.01.14
ROS2 표준 시간, 좌표계  (0) 2025.01.12
ROS2 참고 사이트  (0) 2025.01.10
ROS2 빌드, 파일 시스템  (0) 2025.01.08
Docker로 ROS를 사용하면 안 되는 이유  (0) 2025.01.06