개발하는 핑구
article thumbnail
Published 2023. 2. 18. 15:05
ROS2와 DDS란? Robotics/ROS2

What is ROS?

ROS는 Robot Operating System의 약자로 메타운영체제이다. 윈도우나 리눅스, 안드로이드 같은 운영체제는 아니지만 로봇 애플리케이션 개발을 지원하는 일종의 소프트웨어 프레임워크이며, 기존 운영체제를 통해 메시지 전달, 패키지 관리, 개발환경에 필요한 라이브러리와 도구를 제공하는 등 일종의 미들웨어이다. 기존의 로봇 개발 방식은 하드웨어 설계부터 소프트웨어에 이르기까지 모든 것을 독자적으로 개발해야 했기 때문에 로봇마다 API 인터페이스가 다르고 이를 적용하는데 사전 학습이 필요했으며, 소프트웨어를 작성하는데 하드웨어에 대한 지식이 필요했다. 이런 한계를 극복하여 로봇 프로그래밍 생태계를 구축하고자 많은 종류의 로봇 소프트웨어 플랫폼이 생겼는데 그 중 하나가 ROS이다.


Feature of ROS

  • ROS는 오픈소스로 표준화된 소프트웨어 프레임워크를 제공.
  • 노드(Node) 사이에 메세지를 교환하는 방식으로 프로그램을 잘게 나누어 프로그래밍 하기때문에 공동개발이 가능.
  • 클라이언트 층에서 c++, python, java 등 다양한 프로그래밍 언어를 지원하고, rqt나 gazebo 같은 개발도구도 제공.
  • 또한 10년 이상의 ROS 프로젝트를 통해 거대한 글로벌 커뮤니티를 형성하고 있어서 초보자들도 쉽게 로봇개발을 할 수 있다.

DDS: Communication Protocol of ROS2

DDS는 데이터 분산 서비스의 줄임말로 OMG에서 표준을 정하고자 만든 데이터 통신을 위한 미들웨어이다.

DDS는 Data Distribution Service, 즉 데이터 분산 서비스의 약자이다. OMG DDS Foundation에서는 다음과 같이 정의한다.

즉, DDS는 데이터 분산 서비스라는 개념을 나타내는 단어이다. 실제로는 데이터를 중심으로 연결성을 갖는 미들웨어의 프로토콜(DDSI-RTPS)과 같이 DDS 사양을 만족하는 미들웨어 API가 그 실체이다. 이 미들웨어는 다음 그림과 같이 ISO 7계층 레이어에서 호스트 계층(Host layers)에 해당되는 4~7계층에 해당된다. ROS2에서는 앞에서 언급한 그림과 같이 운영체제와 사용자 애플리케이션 사이에 있는소프트웨어 계층으로 이를 통해 통신하면서 데이터를 공유할 수 있게 된다.

미들웨어로서의 DDS

DDS 사용에 따른 ROS의 구조 변화

ROS1은 독자적인 TCPROS를 통해 통신을 했다. ROS2는 ROS1과 달리 OMG에 의해 표준화된 DDS RTPS 프로토콜을 통해 통신한다. RTPS(Real Time Publish Subscribe)는 OMG(Object Management Group)에서 표준화된 DDS(Data Distribution Service)를 위한 데이터 전송 프로토콜이다. ROS1에서 사용했던 방식인 MQTT는 TCP 기반으로 브로커를 통해 메시지를 전달하는 반면 DDS는 UDP 기반으로 중간 매개체가 없다. UDP 기반의 통신이기때문에 기본적으로는 신뢰성이 없지만 QoS(Quality of Service)를 설정하여 신뢰성을 확보할 수 있다. DDS는 22가지의 QoS가 있는데 ROS2에서는 6가지 옵션을 사용한다. 통신을 하는 방법에는 토픽(Topic), 서비스(Service), 액션(Action), 파라미터(Parameter)가 있다.

ROS1 통신 방식
ROS2 통신 방식


Feature of DDS

산업 표준

DDS는 분산 객체에 대한 기술 표준을 제정하기 위해 1989년에 설립된 비영리 단체인 OMG(Object Management Group) 관리 하에 산업 표준으로 자리 잡고 있다. 지금까지 OMG가 진행하여 ISO 승인된 표준으로는 UML, SysML, CORBA 등이 있다. ROS1에서의 TCPROS는 독자적인 미들웨어라는 성격이 짙었는데 ROS2에 와서는 DDS 사용으로 인해 더 넓은 범위까지 시용 가능하게 되었다. 그리고 산업표준을 지키고 있는 만큼 ROS2가 IoT, 자동차, 국방, 항공, 우주 분야로 넓혀갈 수 있는 발판이 마련되었다고 생각한다.

운영체제 독립

DDS는 리눅스, 윈도우, macOS, 안드로이드, VxWorks 등 다잉한 운영체제를 지원하고 있기에 사용자가 사용하던 운영체제를 변경할 필요가 없다. 멀티 운영체제 지원을 콘셉트로 하고있는 ROS2에도 매우 적합하다고 볼 수 있다.

언어 독립

DDS는 미들웨어이기에 그 상위 레벨이라고 볼 수 있는 시용자 코드 레벨에서 DDS를 사용하기 위해 기존에 시용하던 프로그래밍 언어를 변경할 필요가 없다. ROS2에서도 이 특징을 충분히 살려 다음 그림과 같이 DDS를 RMW(ROS middleware)로 추상화하였으며 벤더 별로 RMW를 지원한다. 그 위에 사용자코드를 위한 ROS 클라이언트 라이브러리(ROS CIient Libruary)를 지원하여 다양한 멀티 프로그래밍 언어를 지원하고 있다.

ROS의 RMW, RCL, User Application

UDP기반의 전송 방식

DDS 벤더 별로 DDSI一RTPS의 구현 방식에 따라 상이할 수 있으나 일반적으로 UDP 기반의 신뢰성 있는 멀티캐스트(Reliable multicast)를 구현하여 시스템이 최신 네트워킹 인프라의 이점을 효율적으로 활용할 수 있도록 돕고 있다. ROS2가 UDP 기반이라는 것은 ROS1에서 TCPROS가 TCP기반이었던 것에 비교했을 때 매우 큰 변화이다. UDP의 멀티캐스트는 브로드캐스트처럼 여러 목적지로 동시에 데이터를 보낼 수 있지만, 불특정 목적지가 아닌 특정된 도메인 그룹에 대해서만 데이터를 전송하게 된다. 멀티캐스트의 방식 도입으로 ROS2에서는 전역 공간이라 불리는 DDS GIobal Space에 등록된 토픽들에 대해서 퍼블리시 및 서브스크라이브를 할 수 있게 되었다. Best effort 개념인 UDP는 신뢰성을 보장하는 TCP와 비교했을 때 장단점이 있는데 이 또한 QoS(Quality of Service)를 통해 보완 및 해결되었다.

데이터 중심적 기능

다양한 미들웨어가 있겠지만 DDS를 사용하면서 가장 많이 듣는 말은 Data Centric이라는 것이다. 실제로 DDS를 사용하다보면 이 말이 이해가 된다. DDS 사양에도 DCPS(Data-centric Publish-Subscribe)라는 개념이 나오는데 이는 적절한 수신자에게 적절한 정보를 효율적으로 전달하는 것을 목표로 하는 퍼블리시 및 서브스크라이브 방식이다. DDS의 미들웨어는 어떤 데이터인지, 이 데이터가 어떤 형식인지, 이 데이터를 어떻게 보낼것인지, 이 데이터를 어떻게 안전하게 보낼 것인지에 대한 기능을 지원한다.

데이터 중심성의 도식화

동적 검색

DDS는 동적 검색(Dynamic Discovery)을 제공한다. 즉, 응용 프로그램은 DDS의 동적 검색을 통하여 어떤 토픽이 지정 도메인 영역에 있으며 어떤 노드가 이를 발신하고 수신하는지 알 수 있게 된다. 덕분에 ROS 프로그래밍을 개발할 때 데이터를 주고 받을 노드들의 IP 주소 및 포트를 미리 입력하거나 따로 구성하지 않아도 되며 사용하는 시스템 아키텍처의 차이를 고려할 필요가 없기 때문에 모든 운영체제 또는 하드웨어 플랫폼에서 매우 쉽게 작업할 수 있다. ROS1에서는 ROS Master에서 ROS 시스템의 노드들 이름 지정 및 등록 서비스를 제공하였고, 각 노드에서 퍼블리시 또는 서브스크라이브하는 메시지를 찾아서 연결할 수 있도록 그 정보를 제공해주었다. 이는 각각 독립되어 실행되는 노드들의 정보를 관리하여 서로 연결해야하는 노드들에게 상대방 노드의 정보를 건네주어 연결할 수 있게 해주는 매우 중요한 중매 역할을 수행했었다. 이 때문에 ROS1에서는 노드 사이의 연결을 위해 네임 서비스를 마스터에서 실행했었어야 했고, 이 ROS Master가 연결이 끊기거나 죽는 경우 모든 시스템이 마비되는 단점이 있었다. ROS2에서는 ROS Master가 없어지고 DDS의 동적 검색 기능을 시용함에 따라 노드를 DDS의 Participant로 취급하게 되었으며, 동적 검색 기능을 이용하여 이를 연결할 수 있게 되었다.

확장 가능한 아키텍처

OMG의 DDS 아키텍처는 IoT 디바이스와 같은 소형 디바이스부터 인프라, 국방, 항공, 우주 산업과 같은 초대형 시스템으로까지 확장할 수 있도록 설계되었다. 그렇다고 사용하기 복잡한 것은 아니다. DDS Participant 형태의 노드는 확장 가능한 형태로 제공되어 사용할 수 있으며 단일 표준 통신 계층에서 많은 복잡성을 흡수하여 분산 시스템 개발을 더욱 단순화시켜 편의성을 높였다. 특히 ROS와 같이 최소 실행 가능한 노드 단위로 나누어 수백, 수천 개의 노드를 관리해야 하는 시스템에서는 이 부분이 강점으로 보이며 한 대의 로봇이 아닌 복수의 로봇, 주변 인프라와 다양한 IT 기술, 데이터베이스, 클라우드로 연결 및 확장해야 하는 ROS 시스템에 매우 적합한 기능이다.

상호 운용성

ROS2에서 통신 미들웨어(RMW)로 사용하고 있는 DDS는 상호 운용성을 지원하고 있다. 예를 들어 DDS의 표준 사양을 지키고 있는 벤더를 사용한다면 A라는 회사의 제품을 사용하였다가도 B라는 회사 제품으로 변경이 가능하고, A 제품과 B 제품이 서로 다른 벤더를 사용하더라도 A 제품과 B 제품 간의 상호 통신도 지원한다는 것이다. 대표적인 DDS벤더와 제품명으로는 EClipse Foundation의 Cyclone DDS, Eprosima의 Fαst DDS, GurumNetworks의 Gurum DDS가 있다. 이중 Fast DDS와 Cyclone DDS는 오픈 소스를 지향하고 있기에 자유롭게 사용 가능하며 더 고성능을 위한다면 상용 제품인 OpenSplice, Connext DDS, Gurum DDS를 사용하면 된다. 참고로 이 중 구름네트웍스(GurumNetworks)는 대한민국 기업으로 DDS를 순수 국산 기술로 개발하여 상용화에 성공하였다.

서비스 품질(QoS)

ROS2에서는 DDS의 도입으로 데이터의 송수신 관련 설정을 목적에 맞추어 유저가 직접 설정할 수 있게 되었다. 노드 간의 DDS 통신 옵션을 설정하는 QoS(Quality of Services)가 그것인데 퍼블리셔 및 서브스크리이브 등을 선언할 때 이를 사용할 수 있다.

 

QoS in ROS2

  • Reliability
    • Reliable: TCP처럼 데이터 손실을 방지함으로써 신뢰도를 우선시하여 사용
    • Best effort: UDP처럼 통신 속도를 최우선시하여 사용
  • History: 통신 상태에 따라 정해진 크기만큼의 데이터를 보관
  • Durability: 데이터를 수신하는 서브스크라이버가 생성되기 전의 데이터를 사용할지 폐기할지에 대한 설정
  • Deadline: 정해진 주기 안에 데이터가 발신 및 수신되지 않을 경우 이벤트 함수를 실행
  • Lifespan: 정해진 주기 안에서 수신되는 데이터만 유효 판정하고 그렇지 않은 데이터는 삭제
  • Liveliness: 정해진 주기 안에서 노드 혹은 토픽의 생사를 확인

이렇게 다양한 QoS 설정을 통해 DDS는 적시성, 트래픽 우선 순위, 안정성 및 리소스 사용과 같은 데이터를 주고 받는 모든 측면을 사용자가 제어할 수 있게 되었다. 특정 상황을 예로 들면 매우 빠른 속도로 데이터를 주고 받거나 예측할 수 없는 통신 환경에서 데이터 송수신에 필요한 다양한 옵션 설정으로 다양한 장애를 극복할 수 있게 되었다.

보안

ROS1의 가장 큰 구멍이었던 보안은 ROS2 개발에서 DDS로 해결 되었다. ROS2에서는 DDS-Security라는 DDS 보안 사양을 ROS2에 적용하여 보안에 대한 이슈를 통신단부터 해결하였다. 또한 ROS 커뮤니티에서는 SROS 2 (Secure Robot Operating System)라는 틀을 개발하였고 보안 관련 RCL 서포트와 보안 관련 프로그래밍에 익숙지 않은 로보틱스 개발자를 위해 보안을 위한 툴킷을 만들어 배포하고 있다.

'Robotics > ROS2' 카테고리의 다른 글

[ROS2 시작하기 - 4] Service  (0) 2023.02.24
[ROS2 시작하기 - 3] Topic  (0) 2023.02.23
[ROS2 시작하기 - 2] Tools  (0) 2023.02.21
[ROS2 시작하기 - 1] Node  (0) 2023.02.20
[ROS2 시작하기 - 0] 환경 셋팅  (0) 2023.02.19
profile

개발하는 핑구

@sinq

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!