ROS

장승현·2023년 3월 17일
0

ROS

목록 보기
3/3
post-thumbnail

1. ROS(Robot Operating System)

1.1. 개념

ROS는 로봇용 오픈소스 기반 메타 운영체제

💡 메타 운영체제 윈도우, 리눅스, 맥 OS 위에서 동작하는 프레임워크이기 때문

1.2. 제공하는 기능

  • 일반 운영체제에서 제공하는 하드웨어 추상화
  • 하위 디바이스 제어
  • 센싱, 인식, 슬램, 네비게이션 등의 기능 구현
  • 프로세스간 메시지 전달(Service, Topic)
  • 패키지 관리 기능
  • 여러 컴퓨터 시스템 코드 도구 및 라이브러리

1.3. 목적

주된 목표

  • 로봇의 연구개발에 있어서 코드 재사용을 편하게 하자는 ‘공유’
  • 조직간 ‘협업’의 분산 원활화

세부 목표

  • 가벼움 → 다른 로봇 소프트웨어 프레임웍에 사용 가능
  • ROS에 의존적이지 않은 라이브러리 → 라이브러리 개발 시, ROS에 의존적이지 않도록 개발하는 것을 선호
  • 언어 독립성 → 최신의 어떤 언어로도 쉽게 구현 가능(Python, Cpp 등)
  • 쉬운 테스트 → 아주 쉬운 설치 및 제거
  • 규모적응성 → 대규모 실행 시스템 및 개발 프로세스에도 적용 가능

1.4 지원 운영 체제

Unix 기반 플랫폼

2. ROS Melodic Installation

2.1. 설치

  • 한줄 설치

wget [https://raw.githubusercontent.com/orocapangyo/meetup/master/190830/install_ros_melodic.sh](https://raw.githubusercontent.com/orocapangyo/meetup/master/190830/install_ros_melodic.sh) && chmod 755 ./install_ros_melodic.sh && bash ./install_ros_melodic.sh

  • 일반 설치(권장)
💡 한줄 설치가 내부적으로 어떤 일을 하는지 알 수 있음
  1. NTP(Network Time Protocol)을 설정함으로써 서로 다른 PC간에 시간의 오차를 최소한으로 줄이기 가능

sudo apt-get install -y chrony ntpdate

sudo ntpdate -q [ntp.ubuntu.com]

  1. ROS 저장소를 추가

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

  1. curl을 아직 설치하지 않을 경우, 아래 명령어로 설치

sudo apt install curl

  1. ROS 저장소로부터 패키지를 내려받기 위해 공캐키를 설정

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

  1. 패키지 인덱스 업데이트

sudo apt-get update && sudo apt-get upgrade -y

  1. ROS, rqt, rviz, 로봇 관련 라이브러리, 시뮬레이션 내비게이션 등을 설치

sudo apt install ros-melodic-desktop-full

💡 추가적인 rqt 플러그인을 사용하고 싶다면 아래 명령어로 추가 설치 `sudo apt-get install ros-melodic-rqt*`
  1. ROS를 사용하기 전에 반드시 rosdep 초기화 필요

Rosdep은 ros의 핵심 컴포넌트들을 사용하거나 컴파일 할 때 의존성패키지를 쉽게 설치하여 사용자 편의성을 높여주는 기능

sudo apt-get install python-pip

sudo pip install -U rosdep

sudo rosdep init

rosdep update

  1. ROS의 다양한 패키지를 설치하는 프로그램

sudo apt-get install python-rosinstall

  1. 환경설정 파일 불러오기
💡 한줄 설치는 여기서부터 다시 진행

환경설정파일은 ROS_ROOT, ROS_PAKAGE_PATH 등의 환경변수들이 정의되어 있음

source /opt/ros/melodic/setup.bash

  1. 작업 폴더 생성 및 초기화

ROS에서 catkin 이라는 ROS 전용 빌드 시스템을 사용
이를 사용하려면 catkin 작업 폴더를 생성하고 초기화해야 함

mkdir -p catkin_ws/src

cd catkin_ws/src

catkin_init_workspace

  1. 현재 catkin 작업 폴더에는 src 폴더와 그 안에 CMakeList.txt 파일만 있기에 아래 명령어를 통해 빌드

cd ~/catkin_ws/

catkin_make

  1. catkin 빌드 시스템과 관련된 환경 파일을 불러오기

source ~/catkin_ws/devel/setup.bash

  1. 올바르게 설치 됐는지 테스트

roscore

2.2. 환경 설정

2.2.1. 환경 설정 파일 불러오기 자동화

ROS 환경설정 파일을 불러오기 위해서는 새로운 터미널 창을 열때마다 매번 아래의 명령을 실행해야 하는 번거로움이 있다.

source /opt/ros/melodic/setup.bash

source ~/catkin_ws/devel/setup.bash

이를 해결하기 위해 bashrc 파일을 열어 끝에 아래 내용을 삽입한다.

gedit ~/.bashrc

source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash

source ~/.bashrc

2.2.2. 네트워크 설정

ROS는 네트워크를 이용해 노드 간에 메시지 통신을 하기 때문에 이 설정은 매우 중요하다.

마스터 PC와 호스트 PC가 따로 있는 경우, 이를 구분하여 입력하고 같은 PC라면 아래의 내용을 삽입한다.

gedit ~/.bashrc

export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost

source ~/.bashrc

2.2.3. 단축키 설정

자주 사용하는 ROS 명령어들은 단축키를 설정하는 것이 편리하다.

bashrc 파일의 alias 부분에 아래 내용을 삽입한다.

gedit ~/.bashrc

alias ss='source devel/setup.bash'
alias sb='source ~/.bashrc'
alias cm='catkin_make'
alias gb='gedit ~/.bashrc'

source ~/.bashrc

3. ROS 구조 및 빌드 시스템

3.1. ROS 용어

  • 패키지 : ROS 소프트웨어의 기본 단위. 노드, 라이브러리, 환경설정 파일들을 통합하는 최소의 빌드 단위이며, 배포 단위
  • 패키지 매니페스트 : 패키지의 작성자, 라이선스, 의존성, 컨피그레이션 플레그 등을 포함하는 패키지 정보
  • 메타 패키지 : 이전에는 스택으로 불리웠지만, 특수한 목적을 위한 패키지 그룹으로 지칭. e.g. 네비게이션 스택
  • 메시지 : 한 ROS 프로세서에서 다른 ROS 프로세서로 정보를 전달하는 한 형태. 메시지를 통해 노드 간의 데이터를 주고 받게 된다. 또한, 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조도 사용 가능하다.
  • 서비스 : 프로세스간의 요청/응답 상호작용
    • Service, Service Server, Service Client
  • 노드 : 최소 단위의 실행 가능한 프로세서를 가리키는 용어. 각 노드는 메시지 통신으로 데이터를 주고 받는다.
  • Publisher, Subscriber, Topic
  • Action, Action Server, Action Client

3.2. ROS 통신 방식

업데이트 예정

Reference

http://wiki.ros.org/melodic/Installation/Ubuntu
https://robertchoi.gitbook.io/ros/install
https://everynewday1029.tistory.com/37

profile
늦더라도 끝이 강한 내가 되자

0개의 댓글