ROS 2 DDS (Data Distribution Service) 공부

박무언·2023년 1월 19일
0
post-thumbnail

https://cafe.naver.com/openrt/24031

ROS의 중요 용어 정의

  • 노드(node): 최소 단위의 실행 가능한 프로세서 => 하나의 실행 가능한 프로그램
  • 패키지(package) : 하나 이상의 노드 또는 실행을 위한 정보 등을 묶어 놓은 것
  • 매타패키지(metapackage) : 패키지의 묶음

    노드는 각각 별개의 프로그램이다.
    => ROS 시스템을 위해 입출력 데이터를 서로 주고 받게 해야 한다.

  • 메시지(message) : 노드끼리 주고 받는 데이터
  • 메시지 통신 : 메시지를 주고 받는 방식

    메시지는 integer, floating point, boolean, string 같은 변수 형태나 배열과 같은 구조도 사용 할 수 있다.

    통신 방법에 따라 토픽, 서비스, 액션, 파라미터로 구분된다.

DDS(Data Distribution Serviece)란?

  • 데이터 통신을 위한 미들웨어
  • ISO 7 계층 레이어에서 호스트 계층(Host layers)에 해당되는 4~7 계층에 해당된다.
  • 운영 체제와 사용자 애플리케이션 사이에 있는 소프트웨어 계층으로 시스템의 다양한 구성요소를 보다 쉽게 통신하고 데이터를 공유할 수 있게 되었다.

ROS에서의 사용법

  • 오른쪽 listener 노드는 서브스크라이브 역할을 하고 왼쪽의 talker 노드는 퍼블리셔 역할을 한다.
    이 두 노드가 실행되었다는 것은 이미 지정된 DDS를 즉 RMW(Ros Middleware)사용하고 있는 것이다.

RMW 변경 방법

  • 위에서는 RMW에 대한 설정을 하지 않았기에 ROS 2 Foxy의 기본 RMW인 rmw_fastrtps_cpp가 사용되었다.

  • RMW를 변경하여 사용하려면 아래와 같이 ROS 2를 지원하는 RMW 중에서 하나를 IMPLEMENTATION 환경변수로 지정한 후 노드를 실행하면 된다.

    rmw_connext_cpp
    rmw_cyclonedds_cpp
    rmw_fastrtps_cpp
    rmw_gurumdds_cpp

  • 아래와 같이 rmw_cyclonedds_cpp를 IMPLEMENTATION 환경변수로 지정하여 실행할 수 있다.

RMW의 상호 운용성 테스트

  • DDS의 특징 중 하나인 상호 운용성을 테스트를 하려면 ROS 2에서 지원하는 RMW 중 두개를 선택하여 각 노드 별로 다른 RMW_IMPLEMENTATION 환경변수를 지정해야 한다.
  • 서로 다른 RMW를 사용하여도 문제없이 통신되는 것을 확인할 수 있다.

Domain 변경 방법

  • ROS 2에서는 UDP 멀티캐스트로 통신이 이루어지기 때문에 별도의 설정을 하지 않으면 동일 네트워크 상에 있는 모든 노드가 연결된다.
    이를 방지하려면 서로 다른 네트워크를 이용하거나 ROS namespace를 추가하여 사용하면 되는데 DDS의 Domain을 변경하는 것이 더 간단하다
profile
되자!

0개의 댓글