[ROS 강의 필기 노트]Chapter 2. 로봇 운영체제 ROS

2023. 1. 11. 22:21ROS

본 강의 필기 노트는 Youtube 채널 ROBOTIS OpenSourceTeam의 Yoonseok Pyo의 강의를 기반으로 필기한 내용입니다.

정리한것이 아니라 강의내용을 일단 필기한 것이므로 뭔가 똑같은 말이 반복 될 수 있습니다.

https://youtube.com/watch?v=KcIUl3WH-C8&si=EnSIkaIECMiOmarE

이전까지는 ROS가 무엇인지, 왜 필요하고 이것이 가져올 미래에 대해서 공부했다.

수많은 로봇 운영체제 중에서 가장 많은 로봇과 센서를 지원하는 ROS에 대해서 배울 것이다.
----------
목차 설명
----------
ROS 소개

1. Open Source 기반

ROS는 오픈소스를 기반으로 하고 있고 가져다 쓰기 쉽기 때문에 많은 사람들이 쓰고 있다.

2. 메타 운영체제

그다음 특징은 메타 운영체제라는 것이다.

왜 일반적이 운영체제가 아닌‘메타 운영체제’를 개발하게 되었을까?
메타 운영체제는 로봇개발을 위한 운영체제(프레임 워크)이다.

운영체제라고 하면 기존의 우리가 익히 알고있는 운영체제들과 의미 상 헷갈릴 수도 있으니 로봇개발에서 필요로하는 ROS라고 하는 소프트웨어 프레임 워크(미들웨어)에 대해
좀더 자세히 살펴보자.

2.1 소프트웨어 프레임 워크(미들웨어)

로봇 소프트웨어 개발을 위한 소프트웨어 프레임 워크이고

노드 간의 메시지 교환 방법을 통해 복잡한 프로그램을 잘게 나눠 공동 개발이 가능하다.

개발하기 위한 편리한 도구들을 지원한다.(가제보 , Rviz, GUI 도구)

로보틱스에서 많이 사용되는 모델링, 인식, 내비게이션, 매니퓰레이션 기능을 지원한다.

로보틱스 생태계 생성(PC나 PP의 역사를 따라가기 위함, 개발하는 데 있어서 오픈소스 커뮤니티의 의견을 최대한 반영하고 있음)

ROS는 새로운 운영체제 인가?

운영체제라고 하면 Window, MacOS, 안드로이드, IOS 등등이 있는데

엄밀히 말해서는 위와 같은 운영체제는 아니고 메타 운영체제이다.(ROS라는 이름과는 조금 달리..)

그렇다면 메타 운영체제란?

메타 운영체제는 전통적인 운영체제는 아니고 오히려 이러한 전통적인 운영체제(우분투, Windows, MacOS, Linux)를 이용한다.

조금 더 쉽게 이해하고자 한다면, 로봇 소프트웨어 개발을 위한 툴 박스를 갖추고 있는 것이라고 생각하면 된다.

새로운 언어를 배우는 것이 아니라 우리가 알고 있는 프로그래밍 언어 중 편한 것이나 시스템이 필요한 언어를 활용하면 된다. 우리는 우분투 위에 ROS를 사용할 것이지만 다른 Linux나 Windows에서도 사용할 수 있지만 리눅스 기반에서 지원하는 부분이 많고 잘 돌아간다. 심지어 안드로이드 기반으로도 ROS를 쓸 수 있다. 이와 같이 전통인 운영체제 위에 사용하는 것이다.

위에서 ROS를 툴박스라고 생각하라고 했는데 어떤 툴을 쉽게 사용할 수 있도록 해주냐면 다음과 같다.

디바이스 드라이버, 라이브러리, 디버그 도구, 메시지 통신, 구동 도구, 컴파일 도구, 인스톨러, 패키지 생성 및 릴리즈 등등이다..

이러한 툴들이 이용하여 Robot이나 Sensor, App(서비스)에 대한 프로그램을 만들 수 있게 된다..

결론 :ROS는 운영체제가 아니라 운영체제를 쓰고 있다.

메타운영체제의 최대 장점 : 이기종 디바이스 간의 통신 지원이다.

예를 들어 우분투 기반으로 만들어진 로봇과 안드로이드 기반으로 만들어진 로봇이 각각 ROS로 개발되었다면 이들 간의 통신이 자유롭게 이루어질 수 있다는 것이다.

로봇은 리눅스에서 개발되었고 해당 로봇의 정보를 안드로이드 기반의 스마트 폰에서 받아 볼 수 있다는 장점이 있다.

로봇을 위한 특정 OS를 만들 수도 있다 하지만 메타 OS를 하는 이유는 로봇이 워낙 다양하기 때문이다. (요구사항이 다양하다.)

스마트폰이나 컴퓨터 같은 경우에는 사실 비슷비슷하기 때문에 로봇에 비해 다양성이 크지 않다. 요구사항이 다양하지 않다.(하나의 범용적인 요구사항 기반의 운영체제를 만들 수 있다.)

이렇게 다양한 요구사항을 반영하기 위해 메타 운영체제로 개발이 되었고 이에 대한 장점이 부각된다.

ROS는 앞서 말했듯이 기본 전통적인 운영체제들(Windows, Fedora, 안드로이드, 안드로이드 IOS 등등 위에서는 부분적으로 사용 가능하다.(제한사항이 있다.)

심지어 OS를 탑재할 수 없는 마이크로 컨트롤러 유닛(MCU)의 경우 시리얼 통신 블루투스, LAN 경유로 통신할 수 있는 라이브러리를 제공한다.

기본적으로는 Ubuntu, OS X에서 구동하는 것을 추천한다. (ROS2.0부터는 3대 OS(Windows, Mac OS에서 전부 구동가능한 것으로 예상된다.)

ROS의 구성

출처 : https://youtube.com/watch?v=KcIUl3WH-C8&si=EnSIkaIECMiOmarE
 



맨 위 층부터 보면 다양한 언어를 지원한다는 것이다.(Client Layer 패키지)

그 아래에는 로보틱스를 개발할 수 있는 기능 패키지를 지원하고,

다양한 노드 간의 메시지 전송 방식을 지원하고 하드웨어의 기능들( 모터 카메라 등등)의 기능 관련된 패키지를 지원하고

시뮬레이션 툴이나 시각화 툴, 개발 툴들을 지원한다.

앞서 말했듯이 로봇은 굉장히 다양하다. 이러한 수많은 센서를 활용할 수 있는 패키지들을 제공한다.

출처 :  https://youtube.com/watch?v=KcIUl3WH-C8&si=EnSIkaIECMiOmarE
 


이러한 장점 아래의 유일한 단점은 유저가 없다는 것이다.( 개발자 = 유저인 상황)

로봇 운영체제 ROS의 특징

통신 인프라
노드 간 데이터 통신을 제공
통상적 미들웨어로 지칭되는 메시지 전달 인터페이스 지원

메시지 파싱 기능

내가 만약 카메라(혹은 모터, imu)를 사용하면 해당 데이터를 어떻게 전송할지에 대해 커뮤니티에서 어느 정도 통상적으로 유용한 방식이 정해져 있다..

메시지 기록 및 재생

노드 간의 메시지 통신이 이루어질 때 이 메시지를 전송 도중 가로채서 녹화하는 기능이 있다. 현재 로봇의 노드 간의 통신들을 모니터링하고 저장하여 나중에 필요할 때 재생 시킬 수 있다. 이러한 방식은 로봇을 소프트웨어 단계에서 알고리즘을 테스트할 때 유용하다.( 환경만 다르게 하고 내가 개발하고자 하는 알고리즘만 테스트하고 싶을 때 사용)

예를 들어 내가 홈 로봇을 만들었을 때 따로 저장기능을 만들지 않아도 기존의 기능을 통해 데이터를 저장하거나 기록해서 재생시킬 수 있다.

메시지 사용으로 인한 다양한 프로그래밍 언어 사용가능

각각의 노드를 다른 프로그래밍 언어로 작성해도 무방하다.

분산 매개변수 시스템 (나중에 더 자세히 다룸)

시스템에서 사용되는 변수를 글로벌 키값으로 작성하여 공유 및 수정하여 실시간으로 반영

특징 2.

위에서 말했듯이 메시지를 전송할 때 어떤 방식으로 전송해야 하는지 이미 통상적으로 유용한 방식이 정리되어 있다고 했는데
로봇 대한 표준 메시지가 정의 됐다는 것이 특징이다.

로봇 기하학 라이브러리

로봇, 센서 등의 상대적 좌표를 트리화 시키는 TF 제공

로봇 기술 언어

로봇의 물리적 특성을 설명하는 XML 문서 기술을 제공( URDF)

진단 시스템(배터리는 얼마고 각 관절의 각도는 어떻고 등등..)

로봇의 상태를 한눈에 파악할 수 있는 진단시스템 제공

센싱/인식

센서 드라이버, 센싱/ 인식 레벨의 라이브러리 제공

내비게이션

로봇에서 많이 사용되는 로봇의 포즈(위치/자세) 추정, (위치/자세) 추정, 지도 내의 자기 위치추정 제공(오도메트리)
지도작성에 필요한 SLAM, 작성된 지도 내에서 목적지를 찾아가는 Navigation 라이브러리를 제공

매니퓰레이션

로봇 Arm에 사용되는 정기구학, 역기구학은 물론 응용단의 Pick and Place를 지원하는 다양한 Manipulation 라이브러리 제공
GUI 형태의 매니퓰레이션 Tools 제공(MoveIt!)
특징 3,

앞서서 ROS는 툴박스라고 설명했듯이 다양한 개발 도구들을 제공한다.

출처 :  https://youtube.com/watch?v=KcIUl3WH-C8&si=EnSIkaIECMiOmarE
 


Command-Line Tool : 커멘드 창에서 text형식으로 명령을 쳐서 로봇에 명령을 내릴 수 있는 것.

Rviz : 컴퓨터는 데이터값을 숫자나 문자로 주어진다고 하면 이를 인간이 보기 쉽게 시각화된 그래픽으로 보여준다.

RQT : 정말 많은 명령어들을 터미널에 치게 될 텐데 데이터를 숫자만으로 보는 것보다 그래프로 볼 수 있도록 해준다.

Gazebo : 물리 엔진을 통해 3차원 시뮬레이션을 할 수 있는 툴을 제공한다.

ROS 버전 선택

ROS 버전 선택을 위한 가이드

2010년도부터 계속 버전들이 알파벳 순서로 네이밍 되어 출시되고 있다.

우선 ROS를 설치할 운영체제인 Ubuntu먼저 살펴보자.

5년 지원이 약속된 최신 LTS버전 우분투를 선택해야 한다.

ROS 역시 버전을.

가제보는 ROS가 설치되면 자동으로 설치되는 버전 따라가면 된다.