1. ROS란?
- "ROS = Robot Operating System"이며, 로봇에서 동작하는 OS라고 생각할 수 있음
- 우리에게 친숙한 OS로는 Windows, Linux 등이 있으며, CPU 등의 하드웨어와 사용자가 사용하는 application software 사이를 관리함
- 하지만 ROS의 경우 전통적인 OS(Windows, Linux) 위에서 동작하는 software의 일종이기 때문에 일반 OS와는 다름
- 다만, 로봇 하드웨어(센서, 모터 등)을 추상화하고, 여러 소프트웨어(인지, 판단, 제어 등)을 하드웨어와 연결하고 관리하다는 측면에서 일반 OS와 유사한 동작을 함
- 따라서, ROS는 일반 OS와 비슷하게 우리의 로봇 소프트웨어들을 관리하고, 로봇 하드웨어와 쉽게 상호작용할 수 있게 도와주는 툴이라고 생각할 수 있음

전통적인 OS와 ROS의 비교
2. ROS를 왜 사용하는가? - 자율주행자동차의 예시

자율주행자동차 소프트웨어의 구성
-
자율주행자동차 소프트웨어를 보면 굉장히 많은 모듈이 사용되고, 크게 센서, 인지, 판단, 제어 파트로 나눌 수 있음
-
센서: 카메라, 라이다 등 로봇 주변 환경에 대한 데이터를 수집하는 역할을 하며, 대표적인 센서의 특징은 다음과 같음
- 카메라: 가장 일반적인 RGB 카메라는 우리에게 친숙한 이미지 데이터를 촬영하며, 가장 많은 정보를 가지고 있는 데이터라고 볼 수 있음. 그 외에도 적외선 카메라, 스테레오 카메라 등이 있음
- 라이다: 레이저 센서를 통해 로봇 주변 객체들과 센서 간의 거리를 측정할 수 있는 센서
- 레이더: 어군 탐지기와 같이 전자기파를 통해 주변 객체 들과 센서간 거리를 측정할 수 있는 센서. 라이다 처럼 조밀한 point cloud 데이터를 취득할 수는 없지만, 동작 범위가 더 넓고, 가격이 저렴함
- 그 외에도 초음파센서, GPS, IMU 등 다양한 센서가 존재

센서 파트
-
인지: 센서 데이터를 분석하여 로봇 주변 환경을 로봇이 이해할 수 있도록 하며, 대표적인 인지 기술은 다음과 같음
- SLAM and Localization: 로봇 주변 환경에 대한 지도를 작성하고, 로봇이 현재 어디에 있는 지 알아내는 기술. 지도와 로봇의 현재 위치가 있어야 로봇이 어떤 경로로 가야하는 지 계산할 수 있기 때문에 매우 중요한 모듈임. 특히, HD map 기반 자율주행차의 경우 SLAM을 통해 작성한 3차원 지도에 신호등, 교통표지, 차선 등 차량이 인지해야하는 주요 객체의 위치를 미리 그려놓고 활용하는 경우도 많음
- 객체 검출: 센서 데이터를 분석하여 로봇 주변 장애물, 다른 차량, 교통표지 등 주요 객체를 검출하고 분류하는 기술
- 센서 융합: 자율주행 차에서 여러 이종 센서를 사용하는 이유는 어떠한 상황(낮/밤, 비, 눈 등)에도 안전한 주행을 보장하기 위해서임. 하지만 각 센서마다 따로 인지 모듈을 적용하면, 다양한 센서를 사용하는 의미가 없으며, 각 센서의 정로를 하나의 프레임에 융합하는 기술이 필요함
- 그 외에도 객체 추적, 운동 경로 예측, 이미지 개선 등 여러 기술이 사용될 수 있음

인지 파트
- 판단: 인지모듈에서 작성된 지도 및 주변 객체 위치 등을 활용해서 차량이 목적지까지 도달하기 위한 최적의 경로를 생성함
- Global Planning: 지도상에서 출발지점에서 목적지까지의 최적경로를 생성
- Local Planning: 위에서 생성한 global path를 따라가면서 생기는 상황들(장애물 출현 등)에 대응하기 위하여 새로운 경로를 생성(장애물 회피를 위해 잠깐 옆으로 빠졌다가 다시 global path에 합류 등)

판단 파트
- 제어: 판단모듈에서 생성된 경로를 차량이 정확하게 따라가기 위해 필요한 제어량(가속도, 스티어링 각도 등)을 결정

제어 파트
-
이와 같이 자율주행차, 로봇 등이 동작하기 위하여 매우 많은 소프트웨어 모듈이 필요함
- ROS는 이렇게 많은 소프트웨어들이 잘 동작할 수 있게 관리해주며, 특히, 각 소프트웨어간 데이터 통신에 대해 매우 간단한 솔루션을 제시함
- 예를 들어, 카메라 센서 데이터는 객체 검출 모듈에서도 사용하고, SLAM에서도 사용하며, 각 인지 모듈의 동작 결과는 판단모듈에서 사용함
- 따라서 각 모듈 간 데이터 전달이 반드시 필요하며, 이를 ROS가 해결해줌
- 만약, ROS를 사용하지 않는다면 일일이 통신부를 구현해야하며, 하나의 파일로 자율주행에 필요한 모든 모듈을 작성한다면 관리가 매우 어려워짐
-
[동영상]을 보면 뒤의 pc에서 자율주행에 필요한 여러 소프트웨어 모듈을 선택하는 모습을 볼 수 있음
- ROS를 사용할 경우 해당 예시처럼 각 모듈을 독립적으로 동작시킬 수 있으며, 따라서 전체 시스템 개발 시, 각 모듈을 개별적으로 개발할 수 있어 편리함
- 업데이트가 필요한 모듈이 있는 경우 해당 모듈만 변경하여 다시 동작시키면 되기 때문에, 유지보수 측면에서도 장점이 있음
-
이러한 장점으로 인해 많은 로봇 연구소, 회사 등에서 필수적으로 ROS를 사용하는 경우가 많음

ROS2 TSC(Technical Sterring Committee)
3. ROS의 역사, ROS1 vs ROS2

ROS의 주요 역사
- ROS1은 2010년에 처음 1.0 버전이 공개되었으며, 그로 부터 널리 퍼짐
- 따라서, 현재 매우 많은 오픈소스 프로젝트, 학습자료 등이 존재하며, 이로 인해 아직 ROS1을 사용하는 사람도 많음
- 하지만, ROS1은 최초에 학술 연구용으로 개발되었기 때문에, 다음과 같은 문제점이 있음
- Single robot target
- Workstation-level computer target
- Only Linux
- Not support real-time communication
- Only Python2: 최신의 딥러닝 프레임워크는 대부분 python3을 사용하여, 인공지능 기술 적용이 어려움(후반부 ROS1 버전은 python3에서도 동작하긴 함)
- TCPROS(자체 개발 ROS 통신 프로토콜)의 보안, 속도 문제
- 이제 더 이상 새로운 ROS1 버전이 개발되지 않을 예정이며, 유지보수 또한 멈출 예정
- ROS2는 이러한 문제를 대부분 해결하였으며, 커뮤니티, 자료의 수, 오픈소스 프로젝트 또한 빠르게 증가하고 있음
- 따라서, 앞으로는 ROS2를 사용하는게 좋음