[ros2] 통신원리

About_work·2024년 2월 19일
0

ros2

목록 보기
15/41
post-custom-banner

0. Ros2 통신 원리

  • 통신은 ROS 2의 미들웨어 계층에 의해 추상화
  • 다른 PC끼리 통신할 때 (서로 다른 시스템 간의 통신)
    • 직렬화 -> 네트워크 전송 -> 수신 -> 역질렬화
    • 이 때, 데이터는 네트워크의 여러 계층을 거치며, 필요한 경우 데이터 패킷으로 분할되어 전송
  • Intra-process Communication
    • DDS(Data Distribution Service) 레이어를 우회하는 최적화된 통신 경로를 제공
    • 직렬화 및 역직렬화 과정 생략 /네트워크 전송 생략 가능
  • Inter-process Communication
    • 직렬화 및 역직렬화
    • 네트워크 전송 생략 가능
      • 같은 시스템 내의 프로세스 간 통신에서는 네트워크를 통하지 않고,
      • 운영 체제가 제공하는 IPC 메커니즘(예: 파이프, 소켓, 공유 메모리 등)을 사용하여 데이터를 전송 (DDS 내부 구현체 따라 다르니 각각 확인해야함)
        • 이는 공개적으로 자세히 문서화되지 않은 경우가 많습니다.
        • 그러나, 대부분의 DDS 구현체는 공유 메모리(shared memory), 소켓(sockets) 등을 사용하여 프로세스 간 통신을 수행
  • ROS 2는 DDS(Domain Discovery Service)를 기반으로 하는 RMW(ROS Middleware) 계층을 사용하여 노드 간의 통신을 처리

0.1. DDS(Domain Distribution Service)

  • 분산 애플리케이션 간의 데이터 교환을 위한 미들웨어 표준
    • OMG (Object Management Group)에 의해 관리
  • 네트워크 대역폭 사용, 메시지의 압축 및 분할 전송 등 다양한 기법을 사용
  • 네트워크 레벨에서는 멀티캐스트, 유니캐스트 등 다양한 방식을 통해 메시지가 전송될 수 있음
    • 멀티캐스트
      • 하나의 소스에서 여러 목적지로 데이터 패킷을 동시에 전송하는 통신 방법
      • 멀티캐스트는 특히 그룹 내 모든 구성원에게 동일한 데이터를 전송해야 할 때 효율적
      • 예를 들어, 라이브 비디오 스트리밍이나 온라인 게임에서 멀티캐스트를 사용하면, 네트워크 자원을 절약하면서 많은 수신자에게 데이터를 효과적으로 전송할 수 있음
    • 유니캐스트
      • 네트워크에서 한 소스에서 단일 목적지로 데이터 패킷을 전송하는 가장 일반적인 통신 방식
      • 이메일 전송이나 웹 페이지 로딩과 같은 대부분의 인터넷 통신은 유니캐스트 방식을 사용
      • 유니캐스트는 특정 수신자에게만 데이터를 전송하므로, 개별적인 통신에 적합

0.1.1. 다양한 DDS 구현체들(Fast RTPS, Cyclone DDS, Connext DDS)

  • 로봇이나 다양한 기기들이 서로 통신하기 위해 사용하는 고급 기술들
  • ROS 2 설치 시 DDS 구현체를 선택한다고 함!
    • RMW_IMPLEMENTATION 환경 변수를 설정하여 ROS 2가 사용할 RMW(ROS Middleware) 구현체를 선택할 수 있습니다.
    • ROS 2를 소스에서 빌드할 때, 사용할 DDS 구현체를 선택할 수 있습니다.
    • 특정 리눅스 배포판이나 다른 운영 체제에서 ROS 2를 패키지 관리자를 통해 설치하는 경우, 일반적으로 기본 DDS 구현체가 함께 설치
      • 예를 들어, ROS 2 Foxy Fitzroy 버전에서는 기본적으로 Fast RTPS(eProsima)가 기본 DDS 구현체로 설정되어 있습니다.
0.1.1.1. Fast RTPS (eProsima)
  • "Real-Time Publish-Subscribe"의 약자로, 실시간으로 데이터를 주고받기 위한 규칙의 집합
  • 매우 빠르게 서로 정보를 교환할 수 있게 해줌
  • 방식
    • Inter-process Communication
      • Fast RTPS는 소켓 기반 통신 또는 공유 메모리를 활용하여 프로세스 간 통신을 수행
    • 네트워크를 통한 프로세스 간 통신
      • RTPS(Real-Time Publish-Subscribe) 프로토콜을 기반으로 하여 네트워크를 통한 통신을 지원
      • 이 프로토콜은 데이터를 패킷으로 캡슐화하여, UDP 또는 TCP/IP 네트워크를 통해 전송
      • 직렬화된 데이터는 네트워크를 통해 다른 시스템의 Fast RTPS 인스턴스로 전송되며,
      • 수신 측에서는 이 데이터를 역직렬화하여 원래의 메시지 형태로 복원
      • 이 방식을 통해, 네트워크 지연과 대역폭 사용을 고려한 효율적인 데이터 전송이 가능
  • 적합한 사용 용도
    • 분산 시스템과 로봇 애플리케이션에서의 데이터 통신, 특히 다양한 네트워크 환경과 플랫폼 간 호환성이 중요한 경우. (Python multiprocessing.shared_memory 등과 비교했을 때)
    • 확장성과 유연성: 다양한 QoS(Quality of Service) 설정을 통해, 네트워크 조건과 애플리케이션 요구 사항에 맞게 통신을 조정할 수 있음
    • 오픈 소스 및 무료 사용을 선호하는 프로젝트
    • 경량화가 필요한 애플리케이션, 예를 들어 임베디드 시스템이나 소규모 로봇 시스템
  • 장점
    • 라이선스 비용 없이 사용 가능
    • OS 2와의 높은 호환성
    • Fast RTPS는 다양한 네트워크 프로토콜과 상호 운용할 수 있으며, 네트워크의 변화나 장애에도 견고하게 동작
  • 단점
    • 상업적 지원이 제한적일 수 있음.
    • Connext DDS에 비해 일부 고급 기능이나 최적화에서 뒤떨어질 수 있음
0.1.1.2. Cyclone DDS
  • Cyclone DDS는 Fast RTPS와 비슷한 목적을 가지고 있지만, 특히 더 넓은 범위의 기기들과 더 안정적으로 통신할 수 있게 설계된 기술
  • 적합한 사용 용도
    • 고성능이 요구되는 로봇 시스템이나 대규모 IoT (Internet of Things) 애플리케이션
  • 장점
    • clipse 재단에서 지원하여 오픈 소스 및 커뮤니티 기반의 강력한 지원
    • 매우 높은 성능과 낮은 지연 시간.
    • 모듈러 설계와 최적화로 다양한 환경과 시스템에 적용 가능.
  • 단점
    • 상대적으로 새로운 구현체로, 일부 사용 사례에서는 다른 미들웨어에 비해 검증된 사례가 적을 수 있음.
    • 사용자 문서나 사례 연구가 Fast RTPS나 Connext DDS에 비해 상대적으로 제한적일 수 있음.
0.1.1.3. Connext DDS
  • Connext DDS는 위의 두 기술과 유사하게 기기들 사이의 실시간 통신을 가능하게 해주지만, 특히 매우 복잡하고 큰 시스템에서의 통신을 위해 설계
  • IPC 방법론으로는 공유 메모리를 사용
  • 적합한 사용 용도
    • 복잡한 시스템 통합이 필요한 대규모 프로젝트.
  • 장점
    • 매우 높은 신뢰성과 성능 제공.
    • 광범위한 산업에서의 사용 사례와 경험.
    • 상업적 지원과 컨설팅 서비스가 우수함.
  • 단점
    • 비쌈

0.1.1. Domain Discovery Service (DDS의 일부)

  • DDS의 한 부분으로, 같은 도메인 내에 있는 참여자들이 서로를 자동으로 발견할 수 있도록 함
  • DDS 참여자는 네트워크에 연결될 때 자동으로 다른 참여자를 탐색
    • 발견된 참여자와의 데이터 교환을 위해 필요한 정보(예: 메타데이터, QoS 설정)를 교환
  • '도메인'이라는 개념을 사용하여 데이터 공간을 분리
    • 각 도메인은 독립적인 통신 공간을 제공하며,
    • 도메인 내의 참여자만이 데이터를 교환할 수 있습니다.

0.2. RMW (ROS Middleware)

  • ROS 2의 추상화 계층을 구성
  • ROS 2 애플리케이션하부 통신 미들웨어(주로 DDS, Data Distribution Service) 간의 인터페이스 역할
  • 이 인터페이스는 ROS 2 애플리케이션다양한 DDS 구현과 호환될 수 있도록 해줌
  • ROS 2 애플리케이션 개발자가, DDS의 복잡성으로부터 추상화된 인터페이스를 통해 개발할 수 있도록 하는 것이 목적 (일관된 API 제공)
  • RMW는 플러그인 구조를 채택하여, 다양한 DDS 구현체와의 호환성을 제공
  • 이 구조를 통해 ROS 2는 Fast RTPS, Cyclone DDS, Connext DDS 등 다양한 DDS 구현체를 지원할 수 있음
  • 각 RMW 구현은 특정 DDS 벤더의 라이브러리를 사용하여, ROS 2의 통신 요구사항을 만족시키는 방식으로 작동

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.
post-custom-banner

0개의 댓글