2 분 소요

들어가기에 앞서

학교에서 진행하는 연구활동인 UGRP에서 ROS라는 운영 체제를 접하게 되었고, 나는 이 운영체제를 이용해서 EEG신호를 읽은 뒤 로봇에게 전달하는 프로그램을 맡게되었다.

ROS라는 것을 처음 접하다 보니 기초 강의를 들으면 정리하면 좋겠다고 생각이 들었고, 공부한 내용을 ROS 카데고리로 posting 할 것이다. 나중에 카테고리 별로 포스팅을 분류하는 tab도 추가해야겠다.

0. 목차

  1. ROS의 개념
  2. ROS의 특징인 Node와 이 구조의 장점
  3. ROS의 통신 방법 - 메세지 통신
  4. 메세지 통신의 종류

1. ROS의 개념.

ROS(Robot Operating System)은 이름 그대로 로봇의 하드웨어를 관리하고 로봇에서 소프트웨어를 실행하는 운영체제(OS)이다.
로봇틱스 분야의 software engineering OS는 ROS 말고도 더러 있다. 이들은 마치 애플의 앱스토어나 android 등과 같이 생태계 구성 방식에 있어서 차이가 있고, ROS 자체에 대해서 말하기 이전에 몇몇을 소개하고자 한다.

image

위에 보이는 사진에는 여럿 로보틱스 분야의 OS가 있다. 이 OS들을 크게 3가지로 분류해볼 수 있는데, 세가지는 바로 Open source, Close source 그리고 Galapagos 이다. 사실 세번째 표현은 강사님께서 비유적으로 붙인 표현인 듯 하니 비유적인 표현으로 받아들이면 좋을 것 같다.

  • Open source: ROS

ROS는 Open source 기반의 OS이다. 그럼 Open source는 무엇인가?

Open이란 단어가 붙어 있는 만큼 열린 환경 정도로 이해할 수 있을 것이다. 정확히 말하자면 ROS 상의 node가 모든 개발자들에게 공개되어 있다는 것이다. 이들이 node를 공개하는 방식으로 생태계를 꾸린 것은 앞서 말한 ROS의 궁극적인 목표를 떠올리면 이해 될 것이다.
이해를 돕기 위해 비유를 하자면 ROS는 모바일 앱시장에서 Android의 위치라고 말할 수 있겠다.

  • Closed source: NAO qi

다음으로 NAO qi이다. NAO qi는 closed source의 OS로 모바일 앱시장에서는 apple로 비유 할 수 있겠다.
ROS는 조금 옅고 넓은 분야나 회사들과 코드를 공유하고 community를 생성했다면, NAO qi는 적은 수의 회사들하고만 소통하고 개발을 진행하는 방식으로 community를 생성하고 운영한다.

  • Galapagos: OPROS, MIDDLEWARE

이 OS들은 특정 국가에서만 사용하는 OS이다. 때문에 특정 국가의 센서 규격과 같은 여러 변수들을 고려해 localize가 충분히 된 OS인 것이다.
때문에 그 국가의 언어로된 여러 참고자료나 error solving wiki등이 제공된다.
다만 localize되었기 때문에 global 한 협업을 기대하기는 어렵다.

하지만 최근에는 로보틱스 OS들의 경계가 옅어지고 있다. 즉 OS간의 협업이 많아지고 점차 개방적으로 변하고 있다.
마치 초장기 모바일 앱시장에서 apple의 앱스토어에만 존재하던 앱과 android에서만 존재하던 앱이 달라서 두 생태계가 분리되고 구분되었다가 현재는 양쪽 생태계에서 모두 지원되는 앱들이 많아져 경계가 모호해진 것과 일맥 상통한다.

이런 여러 OS들 중 우리는 ROS를 사용할 것인데, 그 이유는 ROS가 가장 사용자가 많고(때문에 error가 떳을때 googling하기 좋음), 여러 강력한 tools들이 잘 구성되어있기 때문이다.

서론이 길었다. 지금부터는 ROS가 과연 무엇인가에 대해서 자세히 이야기해보자.

우선, ROS는 우리가 알고 있는 windows, mac, ubuntu 등과는 다르다. ROS는 Meta-Operating System으로 불리운다.

이는 다른 OS들 위에서 실행되는 ROS의 구조 때문이다.
생각해보면, Windows위에서 virtual machine으로 ubuntu를 실행한다거나, 애초에 듀얼 부팅을 한다던가 이런 경우는 가능하겠지만, 시스템 상으로 OS는 유일하게 사용되는 것이 맞다.

이런 근본적인 차이 때문에 ROS는 완벽히 OS라고 볼 수 는 없는 것이다.

그렇다면, ROS는 왜 독립된 하나의 OS를 만들지 않고 Meta-Operating System을 택했을까?
이는 ROS가 추구하는 목적에 유리한 방식이기 때문이다. ROS는 로보틱스 소프트웨어 개발을 전세계 레벨에서 공동 작업 가능하도록 생태계를 구죽하는 것을 목적으로 하고 있다.
즉, 한국에 있는 개발자가 개발을 하다 필요한 소스코드가 있으면, 미국의 개발자가 올린 소스코드를 써서 개발하는 이런 전세계 레벨이 오픈소스 개발환경을 구축하고자 하는 것이다.

이가 가능한 이유는 ROS가 meta-operating system이므로 OS 의존성이 낮고, 여러 하드웨어에 사용방식에 대한 규격화(다양한 하드웨어로 부터 오고 가는 신호를 software 개발에 가져오는 방식이 정립됨)가 충분히 community에서 논의되어 적립되어 있기 때문이다. 이는 ROS가 이기종간의 통신을 할 수 있게 하고 따라서 개발자는 하드웨어, OS, 코딩 언어의 종류와 상관 없이 다양한 개발자들과 협업하여 로봇개발을 할 수 있게 된다.

이러한 점 때문에 ROS는 전세계 사람들의 pc에서 사용하는 다양한 OS 위에서 실행이 되는 Meta-Operating System을 택한 것이다.

지금까지 ROS의 개념과 지양점에 대해서 알아보았으니, ROS 자체의 기술적인 특징에 대해서 알아보자.

출처: ROBOTIS OpenSourceTeam 표윤석 강사님의 ROS 강의 Chapter1. 로봇 소프트웨어 플랫폼
강의 자료가 업로드 되어있는 github

업데이트:

댓글남기기