# 2장 ROS 설치하기

## 2장 ROS 설치하기

ROS 가 운영하는 운영체제는 다양하지만, 우분투를 제외하고는 공식적으로는 지원하지 않고 설치 방법만 제공한다.\
아래 링크를 참고해서 리눅스를 듀얼부팅 하도록 하면, ROS의 모든 기능을 무리없이 사용해 볼 수 있다.

{% embed url="<https://coding-factory.tistory.com/494>" %}

자신이 사용하려는 ROS버전에 따라서 우부투 역시 다른 버전을 준비하여야 한다. 현재 가장 많은 패키지를 가지고 있는 것은 16.04버전을 설치하여 사용할 수 있는 키네틱 버전이고, 비교적 최신 버전의 ROS를 사용하고 싶다면 18.04버전을 선택 가능하고, ROS1의 최종 버전을 사용하고 싶다면, 우분투 20.04버전을 설치하여야 한다. 하지만 현 시점에서 아직 20.04는 추천하지 않는다. 많은 ROS 패키지들이 아직 제공되지 않고 있어서 많은 어려움이 있을 수 있다.

{% embed url="<http://releases.ubuntu.com/16.04/>" %}

{% embed url="<http://releases.ubuntu.com/18.04/>" %}

{% embed url="<http://releases.ubuntu.com/20.04/>" %}

### &#x20;**1. 우분투에 설치하기**

우분투 16.04 LTS 가 설치된 상태에서 아래의 명령어를 터미널창에서 실행합니다.(우분투를 버츄얼 머신으로 설치하는 것은 비추입니다.단독 혹은 멀티부팅으로 설치하세요. 그리고 우분투는 영문으로 설치하세요.)\
Gazebo에서 시뮬레이션을 동작시키고, 포인트클라우드와 비전처리를 위해서 8G정도의 RAM을 추천합니다.\ <br>

```
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh
```

* Ubuntu 18.04(Bionic), Melodic ROS

```
wget https://raw.githubusercontent.com/orocapangyo/meetup/master/190830/install_ros_melodic.sh && chmod 755 ./install_ros_melodic.sh && bash ./install_ros_melodic.sh
```

\
**만약에 일반 데스크탑이나 노트북이 아닌 라즈베리파이 3를 이용하는 경우는 하기의 1줄 설치를 이용해주세요.**

```
wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic_rp3.sh && chmod 755 ./install_ros_kinetic_rp3.sh && bash ./install_ros_kinetic_rp3.sh
```

### **2. 일반 설치**

{% hint style="info" %}
일반 설치는 우리가 추천하는 1줄 설치가 내부적으로 어떤 일을 하는지 하나 하나 설명하는 것입니다. 정상적으로 설치가 되었다면, 일반 설치는 필요가 없습니다.
{% endhint %}

**NTP(Network Time Protocol) 설정**

NTP 설정을 함으로써 서로 다른 PC간에 시간의 오차를 최소한으로 줄일수 있다.

```
sudo apt-get install -y chrony ntpdate
```

```
sudo ntpdate -q ntp.ubuntu.com
```

\
**소스 리스트 추가**&#x20;

Ros-latest.list 에 ROS 저장소를 추가한다.

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

\
**키 설정**&#x20;

ROS 저장소로부터 패키지를 내려받기 위해 공개키를 추가한다.

```
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
```

\
**패키지 인덱스 업데이트**

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

\
**ROS Kinetic Kame 설치**

다음 명령으로 ROS, rqt, Rviz, 로봇관련 라이브러리, 시뮬레이션 내비게이션 등이 포함된다.

```
sudo apt-get install ros-kinetic-desktop-full
```

\
위의 설치만으로도 기본적인 rqt는 포함되지만 다양한 rqt 플러그인의 사용을 위해 추가로 설치한다.

```
sudo apt-get install ros-kinetic-rqt*
```

\
**rosdep 초기화**

ROS 를 사용하기 전에 반드시 rosdep 을 초기화해야 한다. Rosdep 은 ros 의 핵심 컴포넌트들을 사용하거나 컴파일 할 때 의존성패키지를 쉽게 설치하여 사용자 편의성을 높여주는 기능이다.

```
sudo rosdep init
```

```
rosdep update
```

\
**rosinstall 설치**

ROS 의 다양한 패키지를 인스톨하는 프로그램이다.

```
sudo apt-get install python-rosinstall
```

\
**환경설정 파일 불러오기**

환경설정파일은 ROS\_ROOT, ROS\_PAKAGE\_PATH 등의 환경변수들이 정의 되어 있다.

```
source /opt/ros/kinetic/setup.bash
```

\
**작업 폴더 생성 및 초기화**

ROS 에서 catkin 이라는 ROS 전용 빌드 시스템을 사용하고 있다. 이를 사용하려면 다음처럼 catkin 작업 폴더를 생성하고 초기화해야 한다. 이 설정은 작업 폴더를 새롭게 생성하지 않는 한 처음 한 번만 설정해 주면 된다.

```
mkdir -p ~/catkin_ws/src
```

```
cd ~/catkin_ws/src
```

```
catkin_init_workspace
```

\
현재 catkin 작업 폴더에는 src 폴더와 그 안에 CMakeList.txt 파일만 있지만 시험삼아 catkin\_make 명령어를 이용해 빌드해 보자.

```
cd ~/catkin_ws/
```

```
catkin_make
```

```
ls
```

```
Build
Devel
Src
```

\
마지막을 catkin 빌드 시스템과 관련된 환경 파일을 불러오자.

```
source ~/catkin_ws/devel/setup.bash
```

\
테스트

ROS의 모든 설치가 완료 되었으니 테스트 해보자. 새로운 터미널 창을 열어 실행한다.

```
roscore
```

### 3. ROS 환경 설정

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

```
source /opt/ros/kinetic/setup.bash
```

```
source ~/catkin_ws/devel/setup.bash
```

\
이러한 번거로움을 없애고 네트워크 등 기타 설정을 불러들이기 위해 gedit로 bashrc 파일을 편집한다.

```
gedit ~/.bashrc
```

\
아래의 내용을 삽입한다.<br>

```
alias eb =‘nano ~/.bashrc'
alias sb ='source ~/.bashrc'
alias cw ='cd ~/catkin_ws'
alias cs ='cd ~/catkin_ws/src'
alias cm ='cd ~/catkin_ws && catkin_make'
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost
#export ROS_MASTER_URI=http://192.168.1.100:11311
#export ROS_HOSTNAME=192.168.1.100
```

\
\
**ROS 네트워크 설정**\
ROS\_MASTER\_URI와 ROS\_HOSTNAME의 설정이다. ROS는 네트워크를 이용해 노드 간에 메시지 통신을 하기 때문에 이 설정은 매우 중요하다.우선은 둘 다 자신의 네트워크 IP를 입력해주면 된다. 차후에 마스터 PC가 따로 있고, 로봇은 호스트 PC를 사용하는 경우, 이를 구분하여 입력하면 다른 컴퓨터 간의 통신이 가능하게 된다.<br>

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

\
**단축 명령어**

```
alias eb =‘nano ~/.bashrc'              #eb 명령만으로 bashrc 파일 수정 
alias sb ='source ~/.bashrc'            #sb 명령으로 환경설정 불러오기
alias cw ='cd ~/catkin_ws'              #cw 명령으로 워크스페이스 폴더로 이동
alias cs ='cd ~/catkin_ws/src'          #cs 명령으로 src 폴더로 이동
alias cm ='cd ~/catkin_ws && catkin_make' #cm 명령으로 빌드를 할 수 있다.
```

### &#x20; 4. ROS 동작 테스트<br>

* turtlesim **패키지**

```
roscore
```

```
rosrun turtlesim turtlesim_node
```

```
rosrun turtlesim turtle_teleop_key
```

```
rqt_graph 
```

![image.png](https://coda.io/contentProxy/iN6yhrM5Zk/blobs/bl-3jwCcMpUHx/689e5313f72fb3dde3dac74cab80ee73df5d4a6cee0cc1734c1e97698b0bd43108f759f7003e8c6eaf5bef3a858a065e21a98b19ac81f26a27e1c63e7b403a545bb858d79e6c8e708462dfc9a64f8a4038fd198dc7083495fa3b3bde6a7acad7f143350b)
