devskim blog
Search
🤖

ROS2 설치해보기 (Ubuntu)

sections
Tags
ROS2
Created
Dec 12, 2022 05:01 AM
Last Updated
Jul 30, 2023 09:49 AM
 
 
 

ROS2란?

  • Robot Operating System의 약자로, 응용 프로그램 개발을 위한 운영체제와 유사한 플랫폼이다.
    • 원래 로보틱스를 연구할 목적으로 설계되었으나, 산업 및 상업용 로보틱스 분야에서 사용하고 있다.
    • 다른 운영체제나 이기종 디바이스간의 통신에서 데이터를 주고 받을 수 있는 장점이 있다.
  • ROS 버전에서 ROS2 버전이 개발되었으며, ROS2가 새로운 로보틱스 분야의 표준이 되고 있다.
    • ROS에서 마지막으로 배포된 Noetic는 2025년에 지원이 완료된다.
    • ROS와 ROS2의 차이점은 많이 있지만, 대표적으로 ROS2부터는 리눅스 이외의 윈도우와 맥에서 지원이 되고, Python3을 지원하고 있다는 점이다.
  • 메타 운영체제 중의 하나로, 전통적인 운영체제라고는 할 수 없다.
    • 메타 운영체제는 응용 프로그램을 개발하기 위해 스케줄링 및 로드, 감시, 에러 처리 등을 실행하는 시스템이다.
 
 

동작 원리

notion image
  • ROS2는 기본적으로 노드 기반으로 메세지를 교환하여 통신을 한다. 즉 보통 최소한의 실행 단위로 프로그램을 나누어 작업하게 된다.
  • 주요 개념
    • 노드(Node)
      • 최소 단위의 실행 가능한 프로세스
    • 토픽(Topic)
      • 비동기식 단방향 메시지 송수신 방식
      • Publisher와 Subscriber 간의 통신
      • 센서 데이터, 로봇 상태, 로봇 좌표, 로봇 속도 명령 등 사용
    • 서비스(Service)
      • 동기식 양방향 메시지 송수신 방식
      • Service Client와 Service Server 간의 통신
        • 특정 요청을 하는 클라이언트단과 요청받은 일을 수행한 후에 결과값을 전달하는 서버 단과의 통신
      • LED 제어, 모터 토크 On/Off, IK/FK 계산, 이동 경로 계산 등 사용
    • 액션(Action)
      • 비동기식, 동기식 양방향 메시지 송수신 방식
      • Action Client ↔ Action Server 간의 통신
          1. Goal Service : 액션 목표(Goal)를 지정
          1. Feedback Topic : 중간 결괏값인 액션 피드백(Feedback) 전송
          1. Result Serivce : 최종 결괏값을 담은 액션 결과(Result)를 전송
      • 목적지로 이동, 물건 파지, 복합 태스크 등
    • 파라미터(Parameters) : 전역적 변수
 
 

설치 방법

  • ROS2부터는 윈도우, 맥 등의 OS를 지원하고 있으나, 아직은 우분투에 설치하는 것을 권장한다.
    • Raspberry PI OS, Ubuntu Mate 등에서 ROS2 설치에 실패했다.
    • 윈도우는 WSL2를 통해 우분투를 설치하여, 그 위에 ROS2를 쉽게 설치할 수 있다.
  • ROS2 공식 홈페이지에서 안내하는 방법으로 설치할 수 있다.
  • ROS2를 정상적으로 설치한 후에서, 환경변수에 필요한 명령어를 추가하는 것이 좋다.
    • ros 배포판의 setup.bash나 별도로 설치한 패키지의 install/setup.bash 파일을 등록해 놓는다.
    • 환경변수에 등록을 하지 않으면, ros 관련 명령어를 실행할 때마다 source /opt/ros/foxy/setup.bash 등의 명령어를 매번 입력해야 하는 번거로움이 생긴다.
 
 

기본 명령어

  • 설치 이후 최초에 한번 rosdep을 초기화하여야 한다.
    • 코드를 불러오는 중 입니다 ...
  • 패키지 설치는 다음의 명령어와 유사하게 작업하면 된다.
    • 코드를 불러오는 중 입니다 ...
  • run 명령어는 다음과 같이 실행하면 된다.
    • 특정 패키지의 특정 노드(단일 프로그램) 실행
    • 코드를 불러오는 중 입니다 ...
  • launch명령어는 다음과 같이 실행하면 된다.
    • 특정 패키지의 특정 런치 파일(사용자 지정 프로그램) 실행
    • 사용자가 실행하고자 하는 프로그램의 각종 설정을 기술하고 기술된 설정에 맞추어 프로그램을 실행하도록 도와준다
    • 코드를 불러오는 중 입니다 ...
  • 노드, 토픽, 서비스, 액션 등은 다음의 명령어로 확인할 수 있다.
    • 코드를 불러오는 중 입니다 ...
 
 

기본 패키지

rqt

notion image
 
  • ROS + Qt의 합성어로 그래픽 인터페이스 개발을 위한 Qt 기반 프레임워크 제공
  • 토픽, 서비스, 액션 등을 시각적으로 확인할 수 있는 플러그인이다.
  • rqt_graph : 노드와 그들 사이의 연결 정보 표시
  • rqt_plot : 속도, 전압 등 시간이 지남에 따라 변화하는 데이터를 플로팅

RVIZ2

notion image
 
  • ROS에서 제공하는 3차원 시각화 도구로, 각종 개체를 올려서 시각화해볼 수 있다.
  • 레이저, 카메라 등의 센서 데이터를 시각화하여 표현할 수 있다.
  • 로봇 외형과 계획된 동작을 표현할 수 있다.

Gazebo

notion image
 
  • 원격 로봇을 실행할 수 있는 3차원 시뮬레이터
  • 물리 엔진을 탑재하여 로봇, 센서, 환경 모델 등을 지원한다.
  • Gazebo 홈페이지에서 안내해주는 방법을 따르면 설치할 수 있다.
  • ROS2 홈페이지에 Gazebo를 실행해보는 튜토리얼이 있다.
 
 
PREVROS2 YDLidar 테스트
NEXTGazebo SLAM 실행해보기 (WSL2)