로봇운영체제 실습 - ROS의 개념

고영민·2024년 9월 12일

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를 사용하는게 좋음

0개의 댓글