컴맹탈출기/ROS

ROS가 무엇인가, ROS의 특징, 노드통신

Buddycial_SSAFY 2020. 12. 22. 12:12

=================== 들어가는 짧은 잡담 글 ====================

 

코딩에 대해서 1도 모르고 전공에도 관심없었던 새내기 시절,

갑자기 기계과 친구한테 카톡이왔다.

 

"너 혹시 ROS가 뭔지 아니..?"

 

뭐라도 도움을 주고 싶었지만 아무것도 모르는 새내기(강조)는 아무 도움도 줄 수 없어서

 

"로즈..?그게뭐야..?"

 

라고 답을 하고 말았던 기억이 있다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ(머쓱) 

친구는 그냥 아..아니야! 하고 사라졌음 ㅎ

 

아무튼 그랬던 내가 3년 뒤 ROS 공부를 하게될 줄이야 세상만사 어떻게 될지 모르는게 人生이구만,,,,

=======================================================

 

[ ROS란,, ]

ROS는 Robot Operating System의 약자이다.

운영체제인데 로봇과 관련된 건가? 라는 느낌이 막 오는 매우 직관적인 작명,,,

정확히 말하면, 진짜 운영체제 (흔히 아는 윈도우, 리눅스, 맥 등..)는 따로 있고, 그 위에서 sw의 요청을 전달해서 로봇을 움직일 수 있도록 한다. 즉, 하드웨어도 소프트웨어도 아닌 미들웨어이다.

 

ROS의 내부를 보자면, 로봇과 관련된 SW를 개발하기 위해 필요한 여러 소프트웨어 모듈, 라이브러리, 도구가 모여있다.

이런 소프트웨어의 집합체를 소프트웨어 프레임워크라고 한다.

 

ROS 공식 문서 > wiki.ros.org/

**프레임워크(Framework)는 Frame 과 Work의 합성어로,  "일정한 형태의 틀, 부품을 가지고 다양한 형태의 결과물을 만드는 것" 이라고 할 수 있는데, 여기서의 틀과 부품들(Frame)이 바로 소프트웨어 모듈, 라이브러리 등을 일컫고 그것들을 사용해서 만들어낸 프로그램이 바로 결과물(work)이 되는 것이다. 부끄럽게도 프레임워크와 라이브러리의 차이점을 정확하게 몰랐기에, 한번 더 정리해봤다 ㅎ..... 즉 라이브러리가 프레임워크에 포함되는 더 작은 개념이라는 것!

 

[ ROS의 특징, 장점 ]

1. 여러 HW, SW를 ROS라는 공통된 인터페이스로 조립이 가능하도록 해준다.

2. 프로그래밍 언어를 다양하게 지원해준다: C나 C++, Python 등

3. 1로 인해 조립의 규모를 키워 대규모 실행 시스템에 적용할 수 있다!

4. 통신 프로토콜이 표준화되어 있어 노트북(윈도우/리눅스) - 라즈베리파이(라즈비안) - 핸드폰(안드로이드/ios) 등 다양한 종류의 기기들끼리도 통신이 가능하다!!!! 

5. 제공하는 다양한 도구 - RVIZ, RQT 등-으로 주변환경 시각화 및 시뮬레이션이 가능하고, GUI로 노드 연결 정보를 확인할 수도 있다.

 

[ ROS에서의 통신 - 노드 통신 ]

ROS에서 각각의 HW(센서나 바퀴 등) 혹은 SW(HW의 동작을 결정)을 하나의 노드로  표현하고, 이 노드들간의 통신으로 프로그램이 동작한다. 전체적인 구조도는 다음과 같다.

 

 

노드 통신 구조도

 하나의 노드는 하나의 소프트웨어, 혹은 하드웨어 모듈과 연결되어 있다 (이를 점선으로 표현)

각 노드는 직접 장치들을 제어할 수 없으므로, OS가 중간에서 이를 이어주어야 한다. 

노드 사이의 마스터 노드는, 두 노드 사이의 통신이 필요할 때 두 노드를 이어주는 역할을 하고 있다. 

서로 분리된 ROS 시스템 사이에서도, TCP/UDP 연결을 통해 통신이 가능하여 더 큰 시스템으로 확장할 수 있다. (ROS의 장점 4 참조)

예를 들어, 하드웨어에서 주변 상황을 판단하여 이 정보를 보내고, 소프트웨어에서 이에 대한 반응을 결정하여 동작을 명령하고, 기기에서 그 명령대로 실행하는 일련의 과정에서 노드간의 통신이 일어나고 있음을 알 수 있다.

 

[ 노드 통신에서의 용어 ]

통신을 주고 받는 노드들은 그 역할에 따라 (주거나/받거나) 나뉘고, 노드들이 주고받는 메시지가 바로 토픽(Topic)이다.

토픽을 발행하는 노드를 Publisher, 토픽을 받는 노드를 Subscriber라고 부른다.

같은 Publisher와 Subscriber사이에도 다양한 종류의 정보가 필요할 수 있으므로, 여러개의 토픽이 존재할 수 있다.

따로 통신 과정 중 명령어를 실행하여 자료형, 내용 등 토픽의 정보를 알 수 있다.

 

 

구체적인 통신의 기승전결은 다음장에 이어진다.