# Ubuntu 기반 설치 절차

#### 사전 준비

ROS 2 Humble 버전을 원활히 설치하기 위해서는 먼저 다음 사항을 점검해야 한다.

* **Ubuntu 버전**: ROS 2 Humble은 Ubuntu 22.04 (Jammy)에 최적화되어 있다.
* **관리자 권한**: 패키지 설치 작업에 관리자 권한이 필요하므로, $sudo$ 명령어 사용이 가능해야 한다.
* **인터넷 연결**: ROS 2 설치 패키지와 의존성 라이브러리를 다운로드하기 위해 안정적인 네트워크 연결이 중요하다.
* **기본 시스템 업데이트**: 기존에 설치된 패키지들을 최신 버전으로 업데이트한 뒤 설치를 진행하면 의존성 충돌을 최소화할 수 있다.

아래는 설치 과정을 단계별로 나누어 설명한다. 각 단계에서 필요한 셸 명령은 코드 펜스로 표기한다.

{% @mermaid/diagram content="flowchart TD
A\["Ubuntu 준비"] --> B\["시스템 업데이트"]
B --> C\["ROS 2 저장소 등록"]
C --> D\["GPG 키 설정"]
D --> E\["ROS 2 Humble 설치"]
E --> F\["환경 변수 설정"]
F --> G\["테스트 및 확인"]" %}

#### Ubuntu 버전 확인

ROS 2 Humble을 설치하려면 Ubuntu 22.04 버전이 권장된다. 현재 사용 중인 우분투 버전을 확인하려면 아래 명령을 입력한다.

```
lsb_release -a
```

출력 결과에서 `Ubuntu 22.04.x LTS` 형태로 표시되는지 확인한다. 만약 다른 버전이라면 22.04 버전으로 업그레이드를 진행한 후 설치를 시도하는 것이 좋다.

#### 시스템 업데이트

설치 작업 전, 우분투를 최신 상태로 업데이트하는 것을 권장한다.

```
sudo apt update
sudo apt upgrade
```

만약 시스템 업데이트 과정에서 커널 업데이트가 포함된 경우, 시스템을 재부팅한다.

#### ROS 2 저장소 등록

우분투의 패키지 매니저인 APT를 통해 ROS 2를 설치하려면 ROS 2 패키지를 제공하는 저장소를 등록해야 한다. 이를 위해 먼저 [apt.repos.ros.org](https://apt.repos.ros.org) 관련 설정을 추가한다.

```
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo add-apt-repository restricted
```

상기 명령들은 우분투의 기본 저장소를 확장하기 위해 universe, multiverse, restricted 저장소를 활성화한다.

#### GPG 키 설정

패키지 무결성을 확인하기 위해 ROS 패키지 저장소의 GPG 키를 등록한다. GPG 키를 등록하지 않으면 설치 시 경고가 발생하거나 설치가 차단될 수 있다.

```
sudo apt update
sudo apt install curl
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
```

이 명령을 통해 ROS 공식 GPG 키를 시스템에 추가한다.

#### ROS 2 Humble 설치

ROS 2 버전별로 패키지 규모가 다르므로, 사용 목적에 따라 적합한 설치 옵션을 선택할 수 있다. 예시로 다음과 같은 패키지들이 있다.

* **ros-humble-desktop**: 기본적인 ROS 2 구성요소와 RViz, rqt, 기타 GUI 도구들을 포함한다.
* **ros-humble-desktop-full**: Desktop 패키지에 시뮬레이션 툴 Gazebo, navigation2 등 추가 기능이 포함된다.
* **ros-humble-base**: ROS 2 동작에 필수적인 최소 구성 요소만 포함한다.

일반적으로 GUI 시각화 및 시뮬레이션을 사용하려면 `ros-humble-desktop` 이상의 패키지를 설치하는 것이 편리하다. 아래 예시에서는 `ros-humble-desktop` 패키지를 설치한다.

```
sudo apt update
sudo apt install ros-humble-desktop
```

설치 완료 후에는 ROS 2에 포함된 바이너리, 라이브러리, 설정 파일 등이 `/opt/ros/humble` 디렉터리에 위치하게 된다.

#### 환경 변수 설정

ROS 2 사용을 위해서는 환경 변수 설정이 필요하다. 아래 명령을 입력하면 현재 세션에서만 ROS 2 경로가 등록된다.

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

만약 매번 새 터미널을 열 때마다 자동으로 설정되게 하려면 `~/.bashrc` 파일에 위 명령을 추가한다.

```
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
```

Zsh를 사용한다면 `~/.zshrc` 파일에 같은 내용을 추가한다.

#### 테스트 및 확인

ROS 2가 정상적으로 설치되었는지 확인하기 위해 간단한 예제를 실행해 볼 수 있다. ROS 2에는 기본적으로 데모 패키지가 포함되어 있으며, 여기에 **talker**(메시지 발행)와 **listener**(메시지 구독) 노드가 포함되어 있다.

**첫 번째 터미널**에서 talker 노드를 실행한다.

```
ros2 run demo_nodes_cpp talker
```

메시지가 초당 한 번씩 발행되는 것을 확인할 수 있다.

**두 번째 터미널**에서 환경 변수를 다시 로드한다.

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

그리고 listener 노드를 실행한다.

```
ros2 run demo_nodes_cpp listener
```

첫 번째 터미널에서 발행한 메시지를 두 번째 터미널에서 정상적으로 구독해 출력하는지 확인한다.

#### 워크스페이스 생성 (선택 사항)

개발자가 직접 패키지를 작성하고 컴파일하기 위해서는 $colcon$ 빌드 도구와 함께 ROS 2 워크스페이스를 구성하는 것이 일반적이다.

의존 패키지 설치: `colcon` 및 기타 필수 툴을 설치한다.

```
sudo apt update
sudo apt install -y python3-colcon-common-extensions
```

워크스페이스 디렉터리 생성: 일반적으로

```
~/ros2_humble_ws
```

등의 디렉터리를 만들어 사용한다.

```
mkdir -p ~/ros2_humble_ws/src
```

빌드 테스트: 빈 워크스페이스에 들어가

```
colcon build
```

를 수행해본다.

```
cd ~/ros2_humble_ws
colcon build
```

에러 없이 완료되면 워크스페이스가 정상적으로 구성되었음을 의미한다.

#### 추가 환경 변수 확인

ROS 2를 설치하고 환경 설정을 마쳤다면, 아래와 같이 주요 환경 변수가 정상 설정되었는지 확인할 수 있다.

**ROS 배포 버전**

```
echo $ROS_DISTRO
```

여기에서 `$ROS_DISTRO`가 `humble`로 표시되어야 한다.

**ROS 버전**

```
echo $ROS_VERSION
```

ROS 2의 메이저 버전을 나타내며, ROS 2인 경우 일반적으로 `2`가 출력된다.

**ROS Python 버전**

```
echo $ROS_PYTHON_VERSION
```

사용하는 ROS 2에 연결된 파이썬 버전이 표시된다. 주로 3.x 버전으로 나타난다.

#### ROS Domain ID 설정 (선택 사항)

ROS 2는 노드 간 통신에서 DDS(데이터 분산 서비스) 프로토콜을 사용한다. 여러 네트워크 상에서 충돌 없이 ROS 2 노드를 사용하기 위해, **Domain ID**를 설정할 수 있다. 기본 값은 0이며, 이 값이 같으면 서로 통신할 수 있는 환경에 놓이게 된다.

환경 변수로 설정

```
export ROS_DOMAIN_ID=10
```

이렇게 설정하면 동일 네트워크 상에서

```
ROS_DOMAIN_ID=10
```

으로 설정한 노드끼리만 통신 가능하다.

시스템 전체 또는 사용자 단에 영구적으로 설정하려면 `~/.bashrc`(혹은 `~/.zshrc`)에 위 내용을 추가한다.

#### 다중 ROS 버전 공존 (주의 사항)

개발자가 ROS 2의 다른 버전(예: Galactic, Foxy 등)과 Humble 버전을 동시에 사용해야 하는 경우, 주의해야 할 점이 있다.

**Workspace 격리**: 서로 다른 버전을 병행할 때는 각 버전별 워크스페이스를 구분하여 사용해야 한다.

**Environment Sourcing 순서**: 특정 버전을 사용하고 싶다면 해당 버전에 대응하는 setup 스크립트를 먼저 source해야 한다. 예를 들어, Humble의 setup.bash를 우선 적용하려면 다음과 같이 순서를 지킨다.

```
source /opt/ros/humble/setup.bash
source ~/ros2_humble_ws/install/setup.bash
```

**터미널 분리**: 실제 개발 시에는 서로 다른 터미널에서 각각 다른 버전을 source하여 사용하는 편이 안전하다. 한 터미널에서 여러 버전을 뒤섞어 source하면 충돌이 발생할 수 있다.

#### APT 패키지 목록 확인

Humble 설치 후, 어떤 ROS 패키지들이 설치되어 있는지 확인하려면 APT 목록 확인 명령을 사용할 수 있다.

```
apt list --installed | grep ros-humble
```

이 명령어로 설치된 ROS 2 Humble 관련 패키지 이름과 버전을 한 번에 파악할 수 있다.

#### 설치 제거(언인스톨)

만약 ROS 2 Humble을 제거해야 하는 상황이 생긴다면 다음과 같이 실행한다.

```
sudo apt remove ros-humble-*
sudo apt autoremove
```

이 후, `/opt/ros/humble` 디렉터리가 정상적으로 제거되었는지 확인한다.
