ROS2Lab Chapter 01
Ch.01

ROS2 설치와 환경

Ubuntu 24.04 + ROS2 Jazzy

⏱ 20분 #설치#Ubuntu

🖥 먼저 뭐가 필요해?

ROS2를 가장 편하게 쓰려면 Ubuntu 리눅스가 필요해요. Windows와 macOS에서도 돌릴 수는 있지만, 99%의 자료와 튜토리얼이 Ubuntu 기준이라 처음 배울 땐 무조건 Ubuntu가 정답이에요.

ROS2 버전
지원 Ubuntu
지원 기간
추천?
Jazzy Jalisco
Ubuntu 24.04 LTS
~2029.05
⭐ 새로 시작하면 이거
Humble Hawksbill
Ubuntu 22.04 LTS
~2027.05
👌 자료가 가장 많음
Iron Irwini
Ubuntu 22.04 LTS
이미 종료
❌ 쓰지 마요
💡 이 교재는 Jazzy(Ubuntu 24.04)를 기준으로 설명해요. Humble을 쓰는 경우 jazzyhumble로만 바꾸면 거의 다 똑같이 작동해요.

🐢 Ubuntu가 없으면?

Windows/Mac 사용자라면 옵션은 3가지예요.

  1. 듀얼 부팅 설치 (가장 추천) — Ubuntu를 진짜로 깐다. ubuntu.com/download
  2. WSL2 (Windows에서 가장 쉬움) — Windows 안의 Linux. GUI(RViz/Gazebo)는 약간 까다로움.
  3. 가상머신(VirtualBox) — 무겁고 느려서 비추.

일단 Ubuntu 24.04가 설치된 상태라고 가정하고 진행할게요.

📥 ROS2 Jazzy 설치 — 6단계

1) 로케일 설정 (UTF-8)

ROS2는 UTF-8 환경에서 돌아야 해요. 한 번만 확인.

locale  # 현재 로케일 확인
sudo apt update && sudo apt install locales -y
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale  # UTF-8이 보이면 OK

2) 필요한 도구 설치

sudo apt install software-properties-common curl -y
sudo add-apt-repository universe -y

3) ROS2 저장소 키 등록

ROS2 패키지를 어디서 다운받을지 우분투에게 알려주는 과정이에요. 명령어가 길어보여도 그냥 복붙하면 돼요.

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
  -o /usr/share/keyrings/ros-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | \
  sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

4) ROS2 Jazzy 설치 (Desktop 풀버전)

sudo apt update
sudo apt upgrade -y
sudo apt install ros-jazzy-desktop -y

ros-jazzy-desktop는 RViz2, demo 패키지, turtlesim까지 포함된 풀패키지예요. 용량이 좀 크니까(약 1GB+) 다운로드 시간이 좀 걸려요.

💡 더 가벼운 ros-jazzy-ros-base도 있지만, 학습용은 풀버전이 편해요.

5) 개발 도구 설치

나중에 직접 노드를 만들 때 필요해요.

sudo apt install ros-dev-tools -y
sudo apt install python3-colcon-common-extensions python3-rosdep -y
sudo rosdep init
rosdep update
약어
colcon = collective construction · ROS2의 빌드 도구. 여러 패키지를 한 번에 빌드해요. ROS1에서는 catkin이라는 게 그 역할이었어요.
약어
rosdep = ROS dependency manager · ROS 패키지의 시스템 의존성(예: 어떤 라이브러리가 필요한지)을 자동으로 깔아주는 도구.

🔌 환경 설정 — source가 뭐길래?

설치는 됐는데, 터미널에서 ros2 명령을 쳤더니 "그런 명령 없는데?" 하고 나와요. 왜냐하면 매번 ROS2 환경을 "켜줘야" 하기 때문이에요.

source /opt/ros/jazzy/setup.bash

이 명령 한 줄을 치면 그 터미널에서 ROS2 명령어들이 작동해요. 하지만 새 터미널을 열 때마다 또 쳐야 해요. 번거롭죠? 그래서 ~/.bashrc에 자동으로 들어가게 해놔요.

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

이제 새 터미널을 열 때마다 ROS2가 자동으로 활성화돼요.

💡 만약 ROS2 버전을 여러 개 쓰고 있다면 .bashrc에 넣지 말고, 필요할 때만 source 하는 게 안전해요.

✅ 설치 확인 — talker / listener

ROS2가 잘 깔렸는지 확인하는 가장 빠른 방법은 데모 노드 2개를 띄워보는 것이에요. 터미널 2개를 열어주세요.

터미널 1 — 말하는 노드

ros2 run demo_nodes_cpp talker

이런 메시지가 1초마다 찍히면 성공:

[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'
...

터미널 2 — 듣는 노드

ros2 run demo_nodes_py listener

터미널 1에서 찍힌 메시지를 똑같이 받아서 보여주면 통신 성공:

[INFO] [listener]: I heard: [Hello World: 1]
[INFO] [listener]: I heard: [Hello World: 2]
[INFO] [listener]: I heard: [Hello World: 3]
...

🎉 축하해요! 여러분은 방금 인생 첫 ROS2 통신을 했어요. talker(C++)가 발행한 메시지를 listener(Python)가 구독해서 받은 거예요. 두 노드는 서로의 존재조차 직접 알 필요가 없어요 — 그게 ROS2의 매력이에요.

종료는 두 터미널에서 Ctrl + C.

🌐 ROS_DOMAIN_ID — 같은 와이파이에서 안 섞이게

같은 네트워크에 ROS2를 쓰는 사람이 또 있다면, 서로의 메시지가 섞일 수 있어요. 그걸 막으려면 각자 다른 도메인 ID를 쓰면 돼요.

echo "export ROS_DOMAIN_ID=42" >> ~/.bashrc
source ~/.bashrc

0~101 사이의 숫자 아무거나 골라요(추천은 0~100). 같은 ID끼리만 대화해요. 혼자 쓰면 안 건드려도 돼요.

✏️ 퀴즈 1

새 터미널에서 ros2 명령을 쓰려면 매번 뭘 해야 할까?

✏️ 퀴즈 2

colcon은 ROS2에서 뭐 하는 도구일까?

✏️ 퀴즈 3

ROS_DOMAIN_ID는 왜 설정할까?

🎁 정리

  • ROS2는 Ubuntu에서 가장 잘 돌아간다 (Jazzy → Ubuntu 24.04)
  • 설치 6단계: 로케일 → 도구 → 저장소 → 본설치 → 개발도구 → source
  • 새 터미널마다 source /opt/ros/jazzy/setup.bash 필요 (보통 .bashrc에 넣음)
  • demo_nodes의 talker/listener로 설치 확인
  • 네트워크 격리하려면 ROS_DOMAIN_ID 설정

이제 본격적으로 ROS2의 핵심 개념을 만나러 갈 시간이에요. 다음 챕터로! ➡️