[ ROS ] ROS를 이해해보자 #1

2021. 3. 17. 18:33ROS

로봇이 복잡하고 다양한 기능을 수행하기 위해서는, 여러 종류의 데이터와 이를 처리할 수 있는 프로세스들이 필요하다.

 

0. 머리말

 

이 글은 ROS가 무엇인지 설명하는 글이다. 초보자들을 위해 쉽게 설명해보겠다.

내가 처음 ROS를 접했을 때, 생소한 용어들로 인해 ROS를 이해하기 어려웠던게 생생하다. ROS를 처음 배우기 시작하는 사람들에게 도움이 되었으면 하는 바람에서 이것저것 써본다.

 

사실은 내가 아직도 잘 모르고 있는 것 같아서 공부하려고 쓰는거다..

 

 

우선, ROS를 위키백과에서는 뭐라고 설명하는지 보자.

 

로봇 운영체제 (ROS,Robot Operating System)는 로봇 응용 프로그램을 개발할 때 필요한 하드웨어 추상화, 하위 디바이스 제어, 일반적으로 사용되는 기능의 구현, 프로세스간의 메시지 패싱, 패키지 관리, 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구를 제공한다. ROS는 로봇 응용 프로그램 개발을 위한 운영체제와 같은 로봇 플랫폼이다. 하드웨어 플랫폼을 하드웨어 추상화로 포함하고 있으며, 로봇 응용 소프트웨어 개발을 지원을 위한 소프트웨어 플랫폼이면서 이기종의 하드웨어에서 사용 가능한 운영 체제와 같은 기능을 갖추고 있다.

 

'아, 이게 이 말이구나' 싶으면, 위키백과의 설명과 이 글은 필요 없을 것이다. ROS를 모르는 사람이 저걸 읽으면, 읽어도 ROS가 뭔지 모른다. ROS를 아예 모르는 사람들을 위해, 내가 이해한 ROS를 설명해보도록 하겠다. 개인적인 견해가 많이 섞여있으니 가이드 정도로 생각하면 좋을 것 같다.

 

 


1. ROS의 특징

우선, ROS는 Robot Operating System의 약자이다. 이름만 두고 봤을 때는 운영체제(OS)일 것 같지만, 우리가 흔히 알고 있는 윈도우나 리눅스 같은 운영체제(OS)와는 전혀 다른 개념이다. 여기서부터 이미 ROS가 뭔지 이해하는데 복잡해지기 시작한다.

 

이름은 운영체제인데, 운영체제는 아니고... 프로그래밍 언어... 라기에는 C++ 또는 Python을 기반한...

굳이 말하자면, 로봇 개발에 유용한 프로그래밍 툴?

 

아마, 대부분의 사람들이 처음에 ROS가 무엇인지 알기 위해 시도하는 일은 위키백과를 검색하고, ROS wiki를 참고하는 것일 것 같다. 하지만 위키백과에서 써놓은 ROS의 정의는 매우 복잡하게 설명되어 있고, ROS wiki에도 이렇다할 내용이 없다. 내용이 틀렸다는 얘기가 아니지만, ROS를 시작하는 사람들에게 친절한 글은 아니라고 생각한다. 개인적인 생각에서는 깔끔하게 한 문장으로 정리할 수 없는 개념이기에 그런 것 같다. 그렇기에 더욱 더, ROS의 정의를 찾는 것이 ROS를 이해하기에 좋은 방법은 아니라고 생각한다.

 

오히려, ROS를 이해하기 좋은 방법은 ROS의 특징, 장점, 역할들을 알아보는 것이다.

 

위키백과를 참고하면, ROS는 프로그램 개발에서 다음과 같이 다양한 역할을 수행하고 있다.

  • 하드웨어 추상화
  • 하위 디바이스 제어
  • 일반적으로 사용되는 기능의 구현
  • 프로세스간의 메시지 패싱(송수신)
  • 패키지 관리
  • 개발환경에 필요한 라이브러리와 다양한 개발 및 디버깅 도구

 

이 중에서 ROS의 가장 큰 특징은 프로세스 간의 메세지 송수신이 쉽다는 점이다.

 

여기서 프로세스 간의 메세지 송수신이 어떤 의미이고, ROS에서는 이를 어떤 구성으로 구현해놨는지 알아보자.

 

개발을 하다보니 ROS에서 사용할 수 있는 기능들이 매우 다양하고 유용한 기능들이 많다는 것을 느꼈지만, 본격적인 시작에 앞서 가장 핵심적인 요소를 이해하면 부가적으로 필요한 기능들은 이후에 알아서 찾을 수 있을 것이라고 확신한다.


2. 프로세스 간의 메세지 송수신

 

프로세스? 메세지?

 

우리는 로봇을 통해 어떠한 궁극적인 임무를 수행하기 위해, 세분화된 프로세스들을 설계하게 된다. 역할을 분배하는 것이다.

 

계산기를 만든다고 하면, 더하기를 하는 프로세스, 곱하기를 하는 프로세스, 등등,,,

프로세스는 특정한 역할을 수행하기 위해 설계된 프로그램이다.

 

여기서, 우리는 한 프로세스에서 처리한 데이터를 다른 프로세스에서 이용하고자 하는 경우가 빈번히 생기게 된다.

 

1+2*3 을 계산하려면, 더하기를 하는 프로세스에서는 곱하기를 하는 프로세스의 2*3 결과를 받아와서 더하기를 수행해야 한다.

메세지는 주고 받고자 하는 데이터의 형태이다.

주고 받기 전에 미리 정의해줘야한다. 난 이런 메세지 줄게, 난 이런 메세지 받을게.

 

이런 경우를 위해, ROS에서는 서로 다른 프로세스 간의 데이터를 주고 받을 수 있는 도구를 제공한다.

 

이러한 기능이 없었다면, 프로세스 간의 데이터를 주고 받을 수 있게 사용자가 직접 구현해야되고,,, 쉽지 않았을 것이다.

 

로봇이 복잡하고 다양한 기능을 수행하기 위해서는, 여러 종류의 데이터와 이를 처리할 수 있는 프로세스들이 필요하다. ROS는 서로 다른 프로세스들이 다양한 종류의 데이터를 쉽게 주고 받을 수 있게 되어있고, 여기에 더해 다양한 오픈 라이브러리(e.g. PCL)들이 ROS에서 다양한 종류의 데이터를 활용할 수 있도록 지원하고 있다. 따라서, 로봇 프로그래밍 개발에 있어서 프로세스 간의 데이터 송수신의 편의성이 보장된 ROS가 로봇 개발에 얼마나 편리할지 가늠할 수 있다.


3. Topic, Service, Action

 

ROS는 프로세스들이 손쉽게 데이터를 주고 받을 수 있게 Topic, Service, Action의 세 가지 통신 방식을 사용한다.

 

각각의 방법에 대한 세세한 설명은 추후에 계속 다뤄보도록 하자.

 

'ROS' 카테고리의 다른 글

[ ROS ] ROS를 이해해보자 #3  (0) 2021.04.28
[ ROS ] ROS 커맨드 정리  (0) 2021.03.19
[ ROS ] ROS를 이해해보자 #2  (0) 2021.03.18
[ ROS ] Point Cloud Library (PCL) 소개  (1) 2021.03.17
[ ROS ] ROS 설치 가이드  (1) 2021.03.17