00장 ROS란 무엇인가?

Robot을 공부하는데 하나의 트랜드로 자리잡힌 ROS에 대해 공부하기에 앞서 해야할 것이 있다. 바로 ROS의 기초 개념에 대해 정확히 아는 것이다. ROS의 실용적인 내용을 익히고 응용하는 것도 중요하지만, '배운 내용을 어디에 활용할지'와 '왜 이러한 기술을 배우는 지'에 대해 인지하고 읽는다면 약간의 동기부여도 되고, 공부의 효율도 높아지며, 책의 구성에 의심하지 않을 것 같기에 기초에 대해 설명하고 시작하려 한다.

먼저 ROS에 대해 설명하자면 "Open Robotics"라는 주식회사에서 개발한 ROS는 "Nine Dots"라는 logo이자 trademark를 가지고 있으며, Robot Operating System의 약자이다. 언뜻 듣기에 생소할지 모르는 Robot Operating System이라는 말은 많이 들어본 말들의 합성어다. 단어 하나하나를 살펴보면, Robot, 이것에 관심을 가지지 않는 이상 이 책을 읽는 사람이 있을까? 싶기에 딱히 설명할 필요없는 것 같다. 또한 System, 사전에서는 '체계적인 방법이나 조직, 또는 제도'와 비슷하게 표현되는데, 이는 많이 들어봐서 알 것이다. 그렇다면 Operating은 어디서 들어봤을까? Operating System이라 하면 알겠는가? 맞다. 우리가 흔히 OS라고 부르는 개념이 Operating System의 약자다. ROS를 공부하다 보면 우리가 흔히 아는 OS의 개념이랑 혼돈이 올 것이기에, 왜? Robot을 구동하는 SW에 Operating System이라는 개념이 붙었는지 알아가며 자연스레 ROS에 대해 친숙해지는 시간을 갖도록 하자!

아 그전에 일단 영어를 어려워하시는 분들이라도 비교적 쉬운단어로 표현되어 있으니 아래의 내용을 한번 읽어보기를 권장한다. 이는 실제 ROS를 개발한 사람들이 관련내용을 설명해주기 위해 작성한 문서의 첫문단을 발췌한 것이며, ROS에 관한 전반적인 내용을 가장 잘 설명한 문단이라고 생각한다.

"The Robot Operating System (ROS) is a set of software libraries and tools for building robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it’s all open source."

출처 : https://index.ros.org/doc/ros2/

1. ROS 란?

위에서도 언급했듯이 로봇을 개발하기 위해 사용하는 것이 ROS이다. Robot이 어떻게 움직일지 상상해봤는가? 보기에 단순한 움직임이라도 실제로는 통신, 제어, 계측 등 다양한 분야의 지식이 필요하며, 이 모든 것이 유기적으로 연결되어 작은 움직임을 만드는 것이다. 이때 한 부분이라도 개발되어진 툴을 사용하지 않고 직접 구현한다면, 적어도 1년이상의 노력을 기울여야 할 것이다(사실 정확히 몇년을 공부해야 구현할 수 있는지는 노력에 따라 다르지만, 상당한 노력을 기울여야 하는 것은 확실하다.). 따라서 많은 부분의 공부를 요구하는 로봇이라는 학문에 조금이라도 쉽게 다가가고 사용할 수 있도록 만든 도구 중 하나가 ROS이다. 이를 위 내용에서는 "The Robot Operating System (ROS) is a set of software libraries and tools for building robot applications." 라고 표현했다. 이제 OS의 의미를 알겠는가? 참고로 특정 작업과 관련된 소스들을 개발자가 사용할 수 있도록 만든 라이브러리(library)이며, 라이브러리를 활용하여 사용자가 사용하기 쉽도록 GUI로 개발해 놓은 것이 도구(tool)이다.

  • ROS란? an open source software development kit for robotics applications. 애플리케이션을 개발하는 데 필요한 로봇 tools, Libraries and capabilities을 제공하는 Platform.

  • ROS를 10년 가량의 경험(Global community : Many Developers & Users + Industry support: Many Companies around the world contribute to ROS 2 open source)을 바탕으로 많은 release 끝에 2017년에 사용자들의 요구들을 수용하여 새로 개발한 ROS2가 출시. ROS2가 ROS1에 비해 나이진 점이 무엇인지에 대해 조사함.

  • 목적 : 연구와 프로토타이핑에서 배치와 생산까지 이를 운반할 산업 전반의 개발자들에게 표준 소프트웨어 플랫폼을 제공하는 것(실내에서 실외, 가정, 자동차, 수중, 우주, 산업까지 다양한 로봇 분야에 걸쳐 사용가능.).

드라이버에서 최신 알고리즘 및 강력한 개발자 도구에 이르기까지 ROS는 여러분이 다음 로봇 프로젝트에 필요한 것을 갖추고 있습니다.

우리가 통상적으로 이야기하는 Operating System에는 무엇이 있을까? Window? IOS? MacOS? 모두 맞다. 물론 개발자들에게는 linux가 친숙할지도 모르겠지만, 모두 우리가 OS라고 부른다. 는 정확히 말하면 Meta-Operating System이다.

3. Open-Source 란?

그리고 이 모든게 오픈소스입니다. 개발자가 아닌이상 의아해할 개념일지도 모르겠다. 보통 오픈소스의 사전적 정의를 찾아보면 "개발하는 과정에 필요한 소스코드나 설계도를 누구나 접근할 수 있도록 공개하는 것" 이과 비슷하게 표현되어 있다. 소스코드에 접근할 수 있다는 의미는 가져다가 쓸 수 있다는 의미를 가질 뿐만아니라 수정하여 사용하는 것을 허용하는 의미이다. 추가적으로 경우에 따라 조건 없이 상업적 용도로 사용할 수 있는 경우도 있다.

"그렇다면 힘들게 작성한 소스를 왜 무료로 배포할까?"

ROS의 공식문서를 읽다보면 첫페이지의 마지막문단에는 'Contributing to ROS 2 core?'라는 항목이 있다. 말 그대로 현재 핵심으로 개발하고 있는 ROS2 배포판에 기여할 것인가?를 묻는 것이다. 이는 opensource의 특성을 활용하여 개발자들에게 최신기술을 선물하는 대신 활용하면서 발생한 오류를 찾아주거나 수정사항을 알려달라는 일종의 Give & Take이다.

물론 단점도 있다. 강제 소스 공개와 전염성 조항이 있는 GPL License에 해당되는 것인데, 유료 소프트웨어에 사용하기 어렵다는 점이다. GPL 소프트웨어를 수정해서 유료로 판매하는 것은 이론상으로 가능하나 유료로 판매한 GPL 소프트웨어를 구매한 사용자가 다시 이를 수정해서 무료로 배포하는 것을 막을 수 없다. 그렇다면 ROS도 상업적으로 배보할 수 없는 것일까? 그럼 배워도 돈을 벌 수 없다는 것이 아닌가. 그런 걱정은 안해도 된다. ROS가 10년 이상 지속될 수 있었던 이유는 좋은 환경을 제공해주는 것도 있지만, 상업적으로 이용가능하기에 많은 사람들이 운용하는 것이다. 그렇다면 ROS는 무슨 License를 사용해서 상업적으로 이용해도 제약이 없는 것일까?

ROS1은 the 3-clause (or “new”) BSD License를 따른다.

~~~

ROS2의 License는 ROS1의 License와 다른 Apache 2.0 License를 따른다.

~~~ 왜 달라졌을까?, 뭐가 달라졌을까?

결론은? ROS1, ROS2 모두 상업적으로 이용가능한 License를 따르고 있으며, 개발자들의 의견을 바탕으로 다음 release에 반영하기 위해 개방적인 SW이다.

따라서 Opensource란 같은 문제로 고민하는 외부 개발자들과 소통하고 더 나은 소프트웨어를 만들기 위한 개발자들 사이의 문화이다.

Operating System 과 Meta-Operating System의 가장 기본적인 차이는 Meta-Operating System은 Operating System위에 설치되어 The basic difference is that a meta operating system is built on top of the operating system and allows different processes (nodes) to communicate with each other at runtime.

It provides the services you would expect from an operating system, including hardware abstraction, low-level device control, implementation of commonly-used functionality, message-passing between processes, and package management. It also provides tools and libraries for obtaining, building, writing, and running code across multiple computers.

이제 ROS라는 단어가 가진 의미와 ROS로 할 수 있는 것에 대해 대충 틀이 잡힐 것이다. 그렇다면 ROS를 다룰 기본적인 준비를 마친 것 같다. 다음장에서는 ROS로 할 수 있는 세부적인 내용과 ROS2는 왜 2라는 숫자가 붙었으며, 무엇인지에 대해 설명하도록 하겠다.

Last updated