ROS 2 시스템 개요와 개념 학습

강의자 소개

ROS 2 자율 주행 데모 (Autoware)

로봇 시스템 프로그래밍의 등장

아래 그림은 차량과 모바일 로봇, 그리고 로봇 팔 시스템의 구조를 보이고 있습니다. 그림에서 볼 수 있듯이 모든 시스템들이 공통적으로 인지, 판단, 제어라는 Task를 공통적으로 필요로 함을 알 수 있지요.

때문에, 이러한 복잡한 시스템을 다루기 위한 중간 프로그램 혹은 "middleware"라는 것들이 개발되기 시작했습니다. 이러한 Robotics Middleware들은 공통적으로 다음과 같은 특징을 갖습니다.

  1. Real time with reliable communication
  2. Efficient, distributed process handling
  3. Robot state monitoring ( sensor, controller )
  4. Programming language and hardware compatibility

Middleware가 담당하는 역할이 프로세스들 사이의 우선순위와 프로그램 사이의 데이터 흐름 조절(스케쥴링)을 포함하기 때문에 “OS”라는 이름을 종종 사용합니다.

다양한 Robotics Middleware들에 대해 분석한 표입니다. MIT의 LCM과 더불어 JAUS, MOOS 그리고 ROS의 특징도 살펴볼 수 있는데요.

이렇게 많은 Robotics Middleware들이 등장했지만, 현재까지 사용되고 있는 것은 사실상 LCMROS 뿐입니다.

아래 자료는 ROS 측의 공식 문서인 Metric 자료로 2022년 기준 ROS 사용자 수를 가늠해 볼 수 있습니다.

ROS의 역사와 Spinoff


  • (May 2010) Willow Garage by Scott Hassan
  • (May 2012) OSRF, ROS and the Gazebo / DARPA Challenge, NASA challenge support
  • (September 2016) OSRC, collaboration with industry
  • (May 2017) Open Robotics, office in Singapore & collaboration with the Singapore Government
  • (December 2022) Acquired by Intrinsic, a subsidiary of Alphabet


2017년, TCP/UDPROS를 사용하는 ROS에서 DDS를 사용하는 ROS 2로 개편되었으며, 이후 ROS 2는 현업에서 본격적으로 사용되기 시작하였고, 현재 Canonical, AMD, NVIDIA와 같은 굴지의 기업들이 ROS 2를 공식 지원하고 있습니다.

ROS와 ROS 2 

ROS의 태생은 특정 로봇만을 위한 것이었으며, 연구 기관에서 제작하였기 때문에 상용 시스템으로의 개발에는 큰 제약들이 있었습니다. ROS 2 개발자들은 이를 극복하기 위해 검증된 코드에 기반하여 새로운 middleware를 제작합니다.

ROS와 ROS 2 시스템을 전격 비교해봅시다.

  • TCPROS를 사용하던 ROS에서 검증된 DDS 기반의 ROS 2로 업데이트 됨에 따라 사용화가 가능해졌습니다.
  • DDS는 이름부터 "분산 처리 시스템"입니다. 더 빠른 통신 속도와 넓은 bandwidth를 갖습니다.
  • ROS 2는 Real time을 위한 OS를 지원하며, FPGA에 ROS 2를 포팅하려는 프로젝트도 진행중입니다.
  • 그 밖에도 최신 코드 스택 반영, 다양한 OS 지원 등 여러 방면에서 업그레이드 되었습니다.

ROS 2 개념 

오픈 소스 ROS 2 프로젝트를 이해하기 위해서 topic, message, tf, subscription, intra-component communication과 같은 ROS 2의 개념과 용어 이해가 필요합니다. ROS 2 개발 문서를 이해하기 위한 기본적인 ROS 2의 개념과 용어들에 대한 이해를 갖추어봅시다.

Package and Workspace

  • 패키지란, ROS 2의 빌드의 단위이자 관련된 파일들을 묶어 놓은 폴더입니다.
  • 제어, 센서, 시뮬레이션 등 관련된 기능을 묶어 패키지를 구성하며 이러한 패키지가 묶여 메타패키지를 이룹니다.
  • 모든 ROS 2 패키지들은 Workspace 내부에 위치해야 하며, Workspace는 ROS 2가 인식할 수 있는 최상위 폴더이자 모든 프로젝트의 시작점이 됩니다.

ROS 2 개발자들은 패키지 생성 암묵적으로 접미사를 붙여 이름 짓습니다. 오픈 소스 메타페키지인 Nav 2를 통해 함께 살펴봅시다.

Node 

  • ROS 2는 각 프로세스들을 ”Node”라는 단위로 관리합니다.
  • 작성한 코드가 ROS 2와 연동되기 위해서는 반드시 Node 프로그래밍의 규칙을 따라야 하며, 이것이 일반적으로 이야기되는 ROS 2 프로그래밍이 됩니다.

Run and Launch

  • Node 하나를 생성하고, 프로세스 하나를 실행하는 것을 “run”이라고 이야기합니다.
  • 하지만 자율주행 시스템에서는 수십개의 Node가 실행해야 하며 이러한 일괄 실행을 위해 “Launch” 라는 시스템을 사용합니다.

Launch File 

  • Launch를 위해서 어떠한 Node를 실행할지 명시하는 launch file이 필요하며, 이는 python 혹은 xml 문법을 사용합니다. ⇒ 개인적으로 python을 사용한 launch를 선호합니다.
  • launch file 예시
launch file example

Topic and msg

topic은 ROS 2 시스템에서 가장 많이 사용되는 메커니즘입니다.

Topic msg

  • Topic은 msg라는 특정 형식의 데이터를 주고받으며 ROS 2에서는 다양한 built-in msg들을 제공하고 있습니다.
  • 일정 규칙에 따라 msg를 정의하면, ROS 2 시스템이 이를 DDS에 호환되는 형식으로 변환됩니다.
  • msg는 계층 구조를 가질 수 있으며 다른 msg를 포함하거나, 자체 제작할 수도 있습니다.

주행 로봇에 있어 자주 사용되는 topic과 msg는 다음과 같습니다.

Service and srv

주기적으로 사용될 필요 없는 기능의 경우 Service 사용을 추천합니다.

Action and action

Action은 Topic과 Service의 특징을 모두 갖는 메커니즘입니다.


Complete and Continue